summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apct-tests/perftests/core/src/android/libcore/regression/ExpensiveObjectsPerfTest.java22
-rw-r--r--cmds/svc/src/com/android/commands/svc/OWNERS2
-rw-r--r--core/java/android/app/INotificationManager.aidl1
-rw-r--r--core/java/android/app/notification.aconfig10
-rw-r--r--core/java/android/appwidget/flags.aconfig10
-rw-r--r--core/java/android/content/AttributionSource.java9
-rw-r--r--core/java/android/content/Context.java2
-rw-r--r--core/java/android/content/Intent.java2
-rw-r--r--core/java/android/content/res/XmlBlock.java20
-rw-r--r--core/java/android/os/UserManager.java4
-rw-r--r--core/java/android/permission/flags.aconfig7
-rw-r--r--core/java/android/provider/Settings.java10
-rw-r--r--core/java/android/security/flags.aconfig10
-rw-r--r--core/java/android/text/Layout.java8
-rw-r--r--core/java/android/window/DesktopModeFlags.java2
-rw-r--r--core/java/android/window/TaskFragmentOperation.java88
-rw-r--r--core/java/android/window/flags/lse_desktop_experience.aconfig17
-rw-r--r--core/java/com/android/internal/jank/Cuj.java2
-rw-r--r--core/java/com/android/internal/protolog/IProtoLogConfigurationService.aidl12
-rw-r--r--core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java16
-rw-r--r--core/java/com/android/internal/protolog/ProcessedPerfettoProtoLogImpl.java7
-rw-r--r--core/java/com/android/internal/protolog/ProtoLogConfigurationServiceImpl.java74
-rw-r--r--core/java/com/android/internal/protolog/UnprocessedPerfettoProtoLogImpl.java2
-rw-r--r--core/java/com/android/internal/security/TEST_MAPPING4
-rw-r--r--core/java/com/android/internal/widget/NotificationProgressBar.java7
-rw-r--r--core/java/com/android/internal/widget/remotecompose/OWNERS1
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java34
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/PaintContext.java7
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java27
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/RemoteContext.java6
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/ColorExpression.java36
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/DataListFloat.java9
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/DataListIds.java9
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase2.java2
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase3.java6
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase4.java8
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase6.java12
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextAnchored.java16
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextOnPath.java14
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/FloatConstant.java27
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/FloatExpression.java15
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/Header.java365
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/IntegerExpression.java15
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/NamedVariable.java28
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/PaintData.java9
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/PathAppend.java12
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/PathCreate.java12
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/PathTween.java14
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/RootContentDescription.java9
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/ShaderData.java15
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/TextAttribute.java34
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/TextData.java9
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/TextFromFloat.java15
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/TextLookup.java13
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/TextLookupInt.java13
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/TextMerge.java13
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/TouchExpression.java17
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/layout/ImpulseProcess.java10
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/layout/LoopOperation.java18
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/TextLayout.java6
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BackgroundModifierOperation.java2
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BorderModifierOperation.java2
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/RippleModifierOperation.java2
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/paint/PaintBundle.java207
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/operations/utilities/easing/FloatAnimation.java15
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/serialize/MapSerializer.java34
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/serialize/SerializeTags.java1
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/types/BooleanConstant.java11
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/types/IntegerConstant.java15
-rw-r--r--core/java/com/android/internal/widget/remotecompose/core/types/LongConstant.java15
-rw-r--r--core/java/com/android/internal/widget/remotecompose/player/RemoteComposePlayer.java52
-rw-r--r--core/java/com/android/internal/widget/remotecompose/player/platform/AndroidPaintContext.java6
-rw-r--r--core/java/com/android/internal/widget/remotecompose/player/platform/RemoteComposeCanvas.java7
-rw-r--r--core/jni/android_media_AudioRecord.cpp2
-rw-r--r--core/jni/android_media_AudioTrack.cpp2
-rw-r--r--core/proto/android/nfc/OWNERS2
-rw-r--r--core/res/res/layout/notification_2025_template_header.xml26
-rw-r--r--core/res/res/layout/notification_template_header.xml24
-rw-r--r--core/res/res/values-af/strings.xml35
-rw-r--r--core/res/res/values-am/strings.xml33
-rw-r--r--core/res/res/values-ar/strings.xml31
-rw-r--r--core/res/res/values-as/strings.xml33
-rw-r--r--core/res/res/values-az/strings.xml33
-rw-r--r--core/res/res/values-b+sr+Latn/strings.xml25
-rw-r--r--core/res/res/values-be/strings.xml37
-rw-r--r--core/res/res/values-bg/strings.xml33
-rw-r--r--core/res/res/values-bn/strings.xml33
-rw-r--r--core/res/res/values-bs/strings.xml29
-rw-r--r--core/res/res/values-ca/strings.xml33
-rw-r--r--core/res/res/values-cs/strings.xml8
-rw-r--r--core/res/res/values-da/strings.xml33
-rw-r--r--core/res/res/values-de/strings.xml39
-rw-r--r--core/res/res/values-el/strings.xml35
-rw-r--r--core/res/res/values-en-rAU/strings.xml33
-rw-r--r--core/res/res/values-en-rCA/strings.xml25
-rw-r--r--core/res/res/values-en-rGB/strings.xml33
-rw-r--r--core/res/res/values-en-rIN/strings.xml33
-rw-r--r--core/res/res/values-es-rUS/strings.xml29
-rw-r--r--core/res/res/values-es/strings.xml33
-rw-r--r--core/res/res/values-et/strings.xml27
-rw-r--r--core/res/res/values-eu/strings.xml33
-rw-r--r--core/res/res/values-fa/strings.xml37
-rw-r--r--core/res/res/values-fi/strings.xml35
-rw-r--r--core/res/res/values-fr-rCA/strings.xml33
-rw-r--r--core/res/res/values-fr/strings.xml33
-rw-r--r--core/res/res/values-gl/strings.xml33
-rw-r--r--core/res/res/values-gu/strings.xml37
-rw-r--r--core/res/res/values-hi/strings.xml39
-rw-r--r--core/res/res/values-hr/strings.xml25
-rw-r--r--core/res/res/values-hu/strings.xml33
-rw-r--r--core/res/res/values-hy/strings.xml12
-rw-r--r--core/res/res/values-in/strings.xml33
-rw-r--r--core/res/res/values-is/strings.xml33
-rw-r--r--core/res/res/values-it/strings.xml45
-rw-r--r--core/res/res/values-iw/strings.xml14
-rw-r--r--core/res/res/values-ja/strings.xml25
-rw-r--r--core/res/res/values-ka/strings.xml25
-rw-r--r--core/res/res/values-kk/strings.xml35
-rw-r--r--core/res/res/values-km/strings.xml25
-rw-r--r--core/res/res/values-kn/strings.xml37
-rw-r--r--core/res/res/values-ko/strings.xml33
-rw-r--r--core/res/res/values-ky/strings.xml33
-rw-r--r--core/res/res/values-lo/strings.xml25
-rw-r--r--core/res/res/values-lt/strings.xml37
-rw-r--r--core/res/res/values-lv/strings.xml33
-rw-r--r--core/res/res/values-mk/strings.xml33
-rw-r--r--core/res/res/values-ml/strings.xml25
-rw-r--r--core/res/res/values-mn/strings.xml33
-rw-r--r--core/res/res/values-mr/strings.xml37
-rw-r--r--core/res/res/values-ms/strings.xml25
-rw-r--r--core/res/res/values-my/strings.xml33
-rw-r--r--core/res/res/values-nb/strings.xml33
-rw-r--r--core/res/res/values-ne/strings.xml44
-rw-r--r--core/res/res/values-nl/strings.xml25
-rw-r--r--core/res/res/values-or/strings.xml35
-rw-r--r--core/res/res/values-pa/strings.xml25
-rw-r--r--core/res/res/values-pl/strings.xml33
-rw-r--r--core/res/res/values-pt-rBR/strings.xml37
-rw-r--r--core/res/res/values-pt-rPT/strings.xml25
-rw-r--r--core/res/res/values-pt/strings.xml37
-rw-r--r--core/res/res/values-ro/strings.xml33
-rw-r--r--core/res/res/values-ru/strings.xml25
-rw-r--r--core/res/res/values-si/strings.xml12
-rw-r--r--core/res/res/values-sk/strings.xml27
-rw-r--r--core/res/res/values-sl/strings.xml27
-rw-r--r--core/res/res/values-sq/strings.xml33
-rw-r--r--core/res/res/values-sr/strings.xml25
-rw-r--r--core/res/res/values-sv/strings.xml33
-rw-r--r--core/res/res/values-sw/strings.xml33
-rw-r--r--core/res/res/values-ta/strings.xml33
-rw-r--r--core/res/res/values-te/strings.xml33
-rw-r--r--core/res/res/values-th/strings.xml25
-rw-r--r--core/res/res/values-tl/strings.xml29
-rw-r--r--core/res/res/values-tr/strings.xml33
-rw-r--r--core/res/res/values-uk/strings.xml14
-rw-r--r--core/res/res/values-ur/strings.xml37
-rw-r--r--core/res/res/values-uz/strings.xml29
-rw-r--r--core/res/res/values-vi/strings.xml33
-rw-r--r--core/res/res/values-zh-rCN/strings.xml35
-rw-r--r--core/res/res/values-zh-rHK/strings.xml33
-rw-r--r--core/res/res/values-zh-rTW/strings.xml33
-rw-r--r--core/res/res/values-zu/strings.xml33
-rw-r--r--core/res/res/values/attrs.xml1
-rw-r--r--core/res/res/values/config.xml2
-rw-r--r--core/res/res/values/public-final.xml4
-rw-r--r--core/res/res/values/symbols.xml3
-rw-r--r--core/tests/coretests/src/com/android/internal/util/RateLimitingCacheTest.java65
-rw-r--r--data/etc/platform.xml1
-rwxr-xr-xdata/fonts/script/test/test_commandline.py14
-rwxr-xr-xdata/fonts/script/test/test_xml_builder.py20
-rw-r--r--libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleTaskViewListenerTest.kt491
-rw-r--r--libs/WindowManager/Shell/res/values-af/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-am/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-ar/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-az/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml6
-rw-r--r--libs/WindowManager/Shell/res/values-bg/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-bn/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-bs/strings.xml24
-rw-r--r--libs/WindowManager/Shell/res/values-ca/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-cs/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-de/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-el/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-en-rAU/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-en-rGB/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-en-rIN/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-es/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-eu/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-fi/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-fr-rCA/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-fr/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-gu/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-hi/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-hu/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-hy/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-in/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-iw/strings.xml35
-rw-r--r--libs/WindowManager/Shell/res/values-ka/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-kk/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-ko/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-ky/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-lo/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-lv/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-mk/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-mn/strings.xml35
-rw-r--r--libs/WindowManager/Shell/res/values-mr/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-my/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-nb/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-ne/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-or/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-pl/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-ro/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-sq/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-sr/strings.xml6
-rw-r--r--libs/WindowManager/Shell/res/values-sv/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-sw/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-ta/strings.xml35
-rw-r--r--libs/WindowManager/Shell/res/values-tr/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-uk/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-ur/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-vi/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-zh-rCN/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-zh-rHK/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-zh-rTW/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values-zu/strings.xml33
-rw-r--r--libs/WindowManager/Shell/res/values/dimen.xml11
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java11
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTaskViewHelper.java292
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTaskViewListener.java279
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTransitions.java132
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarExpandedView.java23
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDesktopState.java6
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java2
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java10
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/dagger/pip/Pip2Module.java5
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeVisualIndicator.java405
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt54
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt94
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/ExitDesktopTaskTransitionHandler.java10
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/VisualIndicatorViewContainer.kt491
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipDragToResizeHandler.java218
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipPinchToResizeHandler.java129
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipResizeGestureHandler.java196
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTouchHandler.java5
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/recents/IRecentsAnimationRunner.aidl5
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java9
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java8
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java4
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleImageButton.kt41
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt8
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java1
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleTransitionsTest.java95
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeVisualIndicatorTest.kt16
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt12
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt62
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/VisualIndicatorViewContainerTest.kt250
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentsTransitionHandlerTest.java26
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositionerTest.kt19
-rw-r--r--media/jni/android_media_MediaPlayer.cpp2
-rw-r--r--media/jni/android_media_MediaRecorder.cpp2
-rw-r--r--nfc-extras/OWNERS2
-rw-r--r--nfc-non-updatable/OWNERS2
-rw-r--r--nfc-non-updatable/java/android/nfc/cardemulation/ApduServiceInfo.java31
-rw-r--r--omapi/OWNERS2
-rw-r--r--omapi/java/android/se/OWNERS2
-rw-r--r--omapi/java/android/se/omapi/OWNERS2
-rw-r--r--packages/CompanionDeviceManager/res/values-ar/strings.xml6
-rw-r--r--packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml6
-rw-r--r--packages/CompanionDeviceManager/res/values-be/strings.xml8
-rw-r--r--packages/CompanionDeviceManager/res/values-bs/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-da/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-de/strings.xml4
-rw-r--r--packages/CompanionDeviceManager/res/values-el/strings.xml6
-rw-r--r--packages/CompanionDeviceManager/res/values-es/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-et/strings.xml12
-rw-r--r--packages/CompanionDeviceManager/res/values-fa/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-fi/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml6
-rw-r--r--packages/CompanionDeviceManager/res/values-gu/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-hi/strings.xml8
-rw-r--r--packages/CompanionDeviceManager/res/values-hu/strings.xml6
-rw-r--r--packages/CompanionDeviceManager/res/values-hy/strings.xml6
-rw-r--r--packages/CompanionDeviceManager/res/values-it/strings.xml4
-rw-r--r--packages/CompanionDeviceManager/res/values-iw/strings.xml4
-rw-r--r--packages/CompanionDeviceManager/res/values-ka/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-kk/strings.xml10
-rw-r--r--packages/CompanionDeviceManager/res/values-kn/strings.xml4
-rw-r--r--packages/CompanionDeviceManager/res/values-ky/strings.xml4
-rw-r--r--packages/CompanionDeviceManager/res/values-lt/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-lv/strings.xml4
-rw-r--r--packages/CompanionDeviceManager/res/values-mk/strings.xml6
-rw-r--r--packages/CompanionDeviceManager/res/values-mr/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-nb/strings.xml6
-rw-r--r--packages/CompanionDeviceManager/res/values-ne/strings.xml12
-rw-r--r--packages/CompanionDeviceManager/res/values-nl/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-or/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-pl/strings.xml4
-rw-r--r--packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-pt/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-ru/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-sk/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-sl/strings.xml8
-rw-r--r--packages/CompanionDeviceManager/res/values-sq/strings.xml6
-rw-r--r--packages/CompanionDeviceManager/res/values-sr/strings.xml6
-rw-r--r--packages/CompanionDeviceManager/res/values-sv/strings.xml4
-rw-r--r--packages/CompanionDeviceManager/res/values-te/strings.xml4
-rw-r--r--packages/CompanionDeviceManager/res/values-tl/strings.xml4
-rw-r--r--packages/CompanionDeviceManager/res/values-ur/strings.xml2
-rw-r--r--packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml8
-rw-r--r--packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml4
-rw-r--r--packages/CredentialManager/res/values-pl/strings.xml4
-rw-r--r--packages/PackageInstaller/res/values-my/strings.xml2
-rw-r--r--packages/PackageInstaller/res/values-pt-rBR/strings.xml2
-rw-r--r--packages/PackageInstaller/res/values-pt/strings.xml2
-rw-r--r--packages/SettingsLib/IntroPreference/res/layout/settingslib_expressive_preference_intro.xml5
-rw-r--r--packages/SettingsLib/IntroPreference/src/com/android/settingslib/widget/IntroPreference.kt31
-rw-r--r--packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/CollapsableTextView.kt47
-rw-r--r--packages/SettingsLib/res/values-af/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-af/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-am/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-am/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-ar/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-ar/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-as/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-as/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-az/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-az/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-b+sr+Latn/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-be/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-be/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-bg/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-bg/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-bn/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-bn/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-bs/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-bs/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-ca/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-ca/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-cs/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-da/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-da/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-de/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-de/strings.xml5
-rw-r--r--packages/SettingsLib/res/values-el/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-el/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-en-rAU/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-en-rAU/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-en-rCA/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-en-rGB/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-en-rGB/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-en-rIN/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-en-rIN/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-es-rUS/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-es/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-es/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-et/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-eu/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-eu/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-fa/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-fa/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-fi/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-fi/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-fr-rCA/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-fr-rCA/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-fr/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-fr/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-gl/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-gl/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-gu/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-gu/strings.xml5
-rw-r--r--packages/SettingsLib/res/values-hi/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-hi/strings.xml5
-rw-r--r--packages/SettingsLib/res/values-hr/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-hu/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-hu/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-hy/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-hy/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-in/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-in/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-is/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-is/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-it/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-it/strings.xml9
-rw-r--r--packages/SettingsLib/res/values-iw/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-iw/strings.xml5
-rw-r--r--packages/SettingsLib/res/values-ja/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-ja/strings.xml2
-rw-r--r--packages/SettingsLib/res/values-ka/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-kk/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-kk/strings.xml5
-rw-r--r--packages/SettingsLib/res/values-km/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-kn/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-kn/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-ko/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-ko/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-ky/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-ky/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-lo/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-lt/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-lt/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-lv/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-lv/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-mk/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-mk/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-ml/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-mn/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-mn/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-mr/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-mr/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-ms/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-my/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-my/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-nb/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-nb/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-ne/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-ne/strings.xml5
-rw-r--r--packages/SettingsLib/res/values-nl/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-or/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-or/strings.xml5
-rw-r--r--packages/SettingsLib/res/values-pa/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-pa/strings.xml2
-rw-r--r--packages/SettingsLib/res/values-pl/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-pl/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-pt-rBR/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-pt-rBR/strings.xml9
-rw-r--r--packages/SettingsLib/res/values-pt-rPT/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-pt/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-pt/strings.xml9
-rw-r--r--packages/SettingsLib/res/values-ro/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-ro/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-ru/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-si/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-si/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-sk/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-sl/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-sq/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-sq/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-sr/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-sv/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-sv/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-sw/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-sw/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-ta/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-ta/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-te/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-te/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-th/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-tl/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-tr/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-tr/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-uk/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-uk/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-ur/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-ur/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-uz/arrays.xml9
-rw-r--r--packages/SettingsLib/res/values-vi/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-vi/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-zh-rCN/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-zh-rCN/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-zh-rHK/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-zh-rHK/strings.xml5
-rw-r--r--packages/SettingsLib/res/values-zh-rTW/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-zh-rTW/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-zu/arrays.xml21
-rw-r--r--packages/SettingsLib/res/values-zu/strings.xml3
-rw-r--r--packages/SettingsLib/res/values/strings.xml27
-rw-r--r--packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java1
-rw-r--r--packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java1
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java14
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/WritableNamespacePrefixes.java1
-rw-r--r--packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java5
-rw-r--r--packages/Shell/res/values-cs/strings.xml2
-rw-r--r--packages/Shell/res/values-pl/strings.xml2
-rw-r--r--packages/Shell/res/values-sl/strings.xml2
-rw-r--r--packages/SystemUI/Android.bp25
-rw-r--r--packages/SystemUI/aconfig/systemui.aconfig17
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/Icon.kt11
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/DefaultBlueprint.kt6
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt36
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneTransitionLayoutDataSource.kt12
-rw-r--r--packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutState.kt15
-rw-r--r--packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt2
-rw-r--r--packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutStateTest.kt8
-rw-r--r--packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt4
-rw-r--r--packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/SimpleDigitalClockTextView.kt90
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/back/domain/interactor/BackActionInteractorTest.kt17
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalBackActionInteractorTest.kt61
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalTutorialInteractorTest.kt13
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalTransitionViewModelTest.kt4
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryFaceAuthInteractorTest.kt19
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorTest.kt64
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorTest.kt68
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt7
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt7
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/DozingToDreamingTransitionViewModelTest.kt54
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java4
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/GridLayoutTypeInteractorTest.kt2
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/QSColumnsInteractorTest.kt2
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/MediaInRowInLandscapeViewModelTest.kt4
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/QSColumnsViewModelTest.kt4
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/InternetTileNewImplTest.kt26
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java10
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/InternetTileMapperTest.kt6
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractorTest.kt24
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeModeInteractorImplTest.kt4
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt3
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/shared/system/QuickStepContractTest.kt3
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt2
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/notification/domain/interactor/SingleNotificationChipInteractorTest.kt22
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/notification/domain/interactor/StatusBarNotificationChipsInteractorTest.kt79
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinatorTest.java209
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinatorTest.kt191
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelTest.kt5
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java11
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/data/repository/WallpaperRepositoryImplTest.kt123
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModelTest.kt35
-rw-r--r--packages/SystemUI/res-keyguard/values-bs/strings.xml2
-rw-r--r--packages/SystemUI/res-keyguard/values-kn/strings.xml2
-rw-r--r--packages/SystemUI/res/layout/battery_status_chip.xml12
-rw-r--r--packages/SystemUI/res/layout/bindable_status_bar_compose_icon.xml33
-rw-r--r--packages/SystemUI/res/layout/magic_action_button.xml3
-rw-r--r--packages/SystemUI/res/layout/promoted_notification_info.xml36
-rw-r--r--packages/SystemUI/res/layout/status_bar_event_chip_compose.xml34
-rw-r--r--packages/SystemUI/res/layout/volume_dialog.xml38
-rw-r--r--packages/SystemUI/res/layout/volume_dialog_bottom_section.xml26
-rw-r--r--packages/SystemUI/res/layout/volume_dialog_top_section.xml (renamed from packages/SystemUI/res/layout/volume_ringer_drawer.xml)5
-rw-r--r--packages/SystemUI/res/values-af/strings.xml17
-rw-r--r--packages/SystemUI/res/values-am/strings.xml17
-rw-r--r--packages/SystemUI/res/values-ar/strings.xml17
-rw-r--r--packages/SystemUI/res/values-as/strings.xml5
-rw-r--r--packages/SystemUI/res/values-az/strings.xml17
-rw-r--r--packages/SystemUI/res/values-b+sr+Latn/strings.xml12
-rw-r--r--packages/SystemUI/res/values-be/strings.xml4
-rw-r--r--packages/SystemUI/res/values-bg/strings.xml17
-rw-r--r--packages/SystemUI/res/values-bn/strings.xml17
-rw-r--r--packages/SystemUI/res/values-bs/strings.xml12
-rw-r--r--packages/SystemUI/res/values-ca/strings.xml19
-rw-r--r--packages/SystemUI/res/values-cs/strings.xml19
-rw-r--r--packages/SystemUI/res/values-da/strings.xml5
-rw-r--r--packages/SystemUI/res/values-de/strings.xml19
-rw-r--r--packages/SystemUI/res/values-el/strings.xml17
-rw-r--r--packages/SystemUI/res/values-en-rAU/strings.xml17
-rw-r--r--packages/SystemUI/res/values-en-rCA/strings.xml4
-rw-r--r--packages/SystemUI/res/values-en-rGB/strings.xml17
-rw-r--r--packages/SystemUI/res/values-en-rIN/strings.xml17
-rw-r--r--packages/SystemUI/res/values-es-rUS/strings.xml8
-rw-r--r--packages/SystemUI/res/values-es/strings.xml17
-rw-r--r--packages/SystemUI/res/values-et/strings.xml6
-rw-r--r--packages/SystemUI/res/values-eu/strings.xml19
-rw-r--r--packages/SystemUI/res/values-fa/strings.xml8
-rw-r--r--packages/SystemUI/res/values-fi/strings.xml17
-rw-r--r--packages/SystemUI/res/values-fr-rCA/strings.xml17
-rw-r--r--packages/SystemUI/res/values-fr/strings.xml19
-rw-r--r--packages/SystemUI/res/values-gl/strings.xml5
-rw-r--r--packages/SystemUI/res/values-gu/strings.xml18
-rw-r--r--packages/SystemUI/res/values-hi/strings.xml20
-rw-r--r--packages/SystemUI/res/values-hr/strings.xml4
-rw-r--r--packages/SystemUI/res/values-hu/strings.xml19
-rw-r--r--packages/SystemUI/res/values-hy/strings.xml17
-rw-r--r--packages/SystemUI/res/values-in/strings.xml17
-rw-r--r--packages/SystemUI/res/values-is/strings.xml5
-rw-r--r--packages/SystemUI/res/values-it/strings.xml8
-rw-r--r--packages/SystemUI/res/values-iw/strings.xml34
-rw-r--r--packages/SystemUI/res/values-iw/tiles_states_strings.xml2
-rw-r--r--packages/SystemUI/res/values-ja/strings.xml24
-rw-r--r--packages/SystemUI/res/values-ka/strings.xml16
-rw-r--r--packages/SystemUI/res/values-kk/strings.xml19
-rw-r--r--packages/SystemUI/res/values-km/strings.xml4
-rw-r--r--packages/SystemUI/res/values-kn/strings.xml4
-rw-r--r--packages/SystemUI/res/values-ko/strings.xml19
-rw-r--r--packages/SystemUI/res/values-ky/strings.xml17
-rw-r--r--packages/SystemUI/res/values-lo/strings.xml16
-rw-r--r--packages/SystemUI/res/values-lt/strings.xml10
-rw-r--r--packages/SystemUI/res/values-lv/strings.xml19
-rw-r--r--packages/SystemUI/res/values-mk/strings.xml17
-rw-r--r--packages/SystemUI/res/values-ml/strings.xml4
-rw-r--r--packages/SystemUI/res/values-mn/strings.xml17
-rw-r--r--packages/SystemUI/res/values-mr/strings.xml16
-rw-r--r--packages/SystemUI/res/values-ms/strings.xml6
-rw-r--r--packages/SystemUI/res/values-my/strings.xml17
-rw-r--r--packages/SystemUI/res/values-nb/strings.xml19
-rw-r--r--packages/SystemUI/res/values-ne/strings.xml27
-rw-r--r--packages/SystemUI/res/values-night/colors.xml10
-rw-r--r--packages/SystemUI/res/values-nl/strings.xml4
-rw-r--r--packages/SystemUI/res/values-or/strings.xml19
-rw-r--r--packages/SystemUI/res/values-pa/strings.xml4
-rw-r--r--packages/SystemUI/res/values-pl/strings.xml19
-rw-r--r--packages/SystemUI/res/values-pt-rBR/strings.xml10
-rw-r--r--packages/SystemUI/res/values-pt-rPT/strings.xml4
-rw-r--r--packages/SystemUI/res/values-pt/strings.xml10
-rw-r--r--packages/SystemUI/res/values-ro/strings.xml17
-rw-r--r--packages/SystemUI/res/values-ru/strings.xml6
-rw-r--r--packages/SystemUI/res/values-si/strings.xml5
-rw-r--r--packages/SystemUI/res/values-sk/strings.xml4
-rw-r--r--packages/SystemUI/res/values-sl/strings.xml4
-rw-r--r--packages/SystemUI/res/values-sq/strings.xml17
-rw-r--r--packages/SystemUI/res/values-sr/strings.xml12
-rw-r--r--packages/SystemUI/res/values-sv/strings.xml17
-rw-r--r--packages/SystemUI/res/values-sw/strings.xml17
-rw-r--r--packages/SystemUI/res/values-ta/strings.xml23
-rw-r--r--packages/SystemUI/res/values-te/strings.xml9
-rw-r--r--packages/SystemUI/res/values-th/strings.xml4
-rw-r--r--packages/SystemUI/res/values-tl/strings.xml13
-rw-r--r--packages/SystemUI/res/values-tr/strings.xml19
-rw-r--r--packages/SystemUI/res/values-uk/strings.xml23
-rw-r--r--packages/SystemUI/res/values-ur/strings.xml18
-rw-r--r--packages/SystemUI/res/values-uz/strings.xml5
-rw-r--r--packages/SystemUI/res/values-vi/strings.xml17
-rw-r--r--packages/SystemUI/res/values-zh-rCN/strings.xml17
-rw-r--r--packages/SystemUI/res/values-zh-rHK/strings.xml19
-rw-r--r--packages/SystemUI/res/values-zh-rTW/strings.xml17
-rw-r--r--packages/SystemUI/res/values-zu/strings.xml17
-rw-r--r--packages/SystemUI/res/values/colors.xml10
-rw-r--r--packages/SystemUI/res/values/dimens.xml24
-rw-r--r--packages/SystemUI/res/values/strings.xml8
-rw-r--r--packages/SystemUI/res/values/styles.xml13
-rw-r--r--packages/SystemUI/res/xml/volume_dialog_constraint_set.xml2
-rw-r--r--packages/SystemUI/res/xml/volume_dialog_half_folded_constraint_set.xml2
-rw-r--r--packages/SystemUI/res/xml/volume_dialog_ringer_drawer_motion_scene.xml29
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java5
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationListener.java3
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/CameraAvailabilityListener.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/ScreenDecorations.java22
-rw-r--r--packages/SystemUI/src/com/android/systemui/SwipeHelper.java16
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/FullscreenMagnificationController.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/extradim/ExtraDimDialogManager.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/back/domain/interactor/BackActionInteractor.kt9
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContent.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentManager.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentViewModel.kt (renamed from packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogViewModel.kt)9
-rw-r--r--packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsViewModel.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogDelegate.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/common/shared/colors/SurfaceEffectColors.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/communal/CommunalBackupRestoreStartable.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalBackActionInteractor.kt56
-rw-r--r--packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt8
-rw-r--r--packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalSceneTransitionInteractor.kt9
-rw-r--r--packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/decor/ScreenDecorCommand.kt9
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/homecontrols/service/TaskFragmentComponent.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java234
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardTransitionRepository.kt13
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt32
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt8
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt48
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt43
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt29
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/LightRevealScrimViewBinder.kt1
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DozingToDreamingTransitionViewModel.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt73
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java186
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/EditTile.kt134
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/selection/Selection.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTileNewImpl.kt13
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java22
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/ScreenRecordDetailsContent.kt7
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/InternetTileMapper.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractor.kt15
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt14
-rw-r--r--packages/SystemUI/src/com/android/systemui/screenshot/scroll/ImageTileSet.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/BaseShadeControllerImpl.kt9
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/ShadeControllerImpl.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeModeInteractor.kt14
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/ui/ShadeColors.kt40
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/BatteryStatusChip.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt25
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/interactor/SingleNotificationChipInteractor.kt21
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/interactor/StatusBarNotificationChipsInteractor.kt15
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/model/NotificationChipModel.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/ui/viewmodel/NotifChipsViewModel.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/ChipContent.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/OngoingActivityChip.kt76
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/OngoingActivityChips.kt12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt23
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/events/ui/view/BatteryStatusEventComposeChip.kt100
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterView.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/AODPromotedNotification.kt55
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/domain/interactor/AODPromotedNotificationInteractor.kt13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/MagicActionBackgroundDrawable.kt265
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/MagicActionButton.kt36
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PromotedNotificationInfo.java22
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImpl.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java99
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationScrollView.kt7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt36
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java74
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java34
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/battery/domain/interactor/BatteryInteractor.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/icons/shared/BindableIconsRegistry.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt19
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt26
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileViewLogger.kt16
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/StackedMobileBindableIcon.kt52
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/StackedMobileIconBinder.kt65
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/StackedMobileIconViewModel.kt90
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt20
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StackedMobileIcon.kt180
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt19
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/view/SingleBindableStatusBarComposeIconView.kt155
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java37
-rw-r--r--packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/util/concurrency/SysUIConcurrencyModule.kt13
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogModule.kt15
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/binder/VolumeDialogSettingsButtonViewBinder.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSlidersViewBinder.kt11
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/ViewBinder.kt (renamed from packages/SystemUI/src/com/android/systemui/common/shared/colors/ShadeColors.kt)19
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt108
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/ui/utils/JankListenerFactory.kt39
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/ui/utils/SuspendAnimators.kt30
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallpapers/data/repository/WallpaperRepository.kt18
-rw-r--r--packages/SystemUI/src/com/android/systemui/window/data/repository/NoopWindowRootViewBlurRepository.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/window/data/repository/WindowRootViewBlurRepository.kt7
-rw-r--r--packages/SystemUI/src/com/android/systemui/window/domain/interactor/WindowRootViewBlurInteractor.kt22
-rw-r--r--packages/SystemUI/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModel.kt55
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentManagerTest.kt8
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentViewModelTest.kt (renamed from packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogViewModelTest.kt)34
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogDelegateTest.kt2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java166
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/DragAndDropTest.kt42
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/EditModeTest.kt21
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/TestMatchers.kt52
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt12
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java104
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/app/WallpaperManagerKosmos.kt2
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/communal/domain/interactor/CommunalSceneTransitionInteractorKosmos.kt2
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorKosmos.kt4
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorKosmos.kt2
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractorKosmos.kt2
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelKosmos.kt4
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt3
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/promoted/domain/interactor/AODPromotedNotificationInteractorKosmos.kt (renamed from packages/SystemUI/tests/utils/src/com/android/systemui/communal/domain/interactor/CommunalBackActionInteractorKosmos.kt)16
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelKosmos.kt2
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/FakeMobileIconsInteractor.kt3
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinderKosmos.kt10
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/wallpapers/data/repository/WallpaperRepositoryKosmos.kt24
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/window/data/repository/WindowRootViewBlurRepositoryKosmos.kt1
-rw-r--r--services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java5
-rw-r--r--services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java4
-rw-r--r--services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java5
-rw-r--r--services/core/Android.bp5
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java8
-rw-r--r--services/core/java/com/android/server/am/OomAdjuster.java7
-rw-r--r--services/core/java/com/android/server/am/UserController.java38
-rw-r--r--services/core/java/com/android/server/am/flags.aconfig18
-rw-r--r--services/core/java/com/android/server/appbinding/AppBindingConstants.java13
-rw-r--r--services/core/java/com/android/server/audio/AudioDeviceBroker.java40
-rw-r--r--services/core/java/com/android/server/audio/AudioDeviceInventory.java11
-rw-r--r--services/core/java/com/android/server/audio/BtHelper.java23
-rw-r--r--services/core/java/com/android/server/display/DisplayDevice.java29
-rw-r--r--services/core/java/com/android/server/display/DisplayManagerService.java1
-rw-r--r--services/core/java/com/android/server/display/LocalDisplayAdapter.java14
-rw-r--r--services/core/java/com/android/server/display/LogicalDisplay.java13
-rw-r--r--services/core/java/com/android/server/display/LogicalDisplayMapper.java3
-rw-r--r--services/core/java/com/android/server/display/OverlayDisplayAdapter.java2
-rw-r--r--services/core/java/com/android/server/display/VirtualDisplayAdapter.java15
-rw-r--r--services/core/java/com/android/server/display/WifiDisplayAdapter.java2
-rw-r--r--services/core/java/com/android/server/display/feature/DisplayManagerFlags.java10
-rw-r--r--services/core/java/com/android/server/dreams/DreamManagerService.java3
-rw-r--r--services/core/java/com/android/server/flags/people.aconfig12
-rw-r--r--services/core/java/com/android/server/notification/NotificationManagerService.java15
-rw-r--r--services/core/java/com/android/server/notification/PreferencesHelper.java23
-rw-r--r--services/core/java/com/android/server/pm/InstallPackageHelper.java29
-rw-r--r--services/core/java/com/android/server/pm/InstallingSession.java24
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java4
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java35
-rw-r--r--services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java13
-rw-r--r--services/core/java/com/android/server/stats/pull/StatsPullAtomService.java14
-rw-r--r--services/core/java/com/android/server/updates/CertPinInstallReceiver.java10
-rw-r--r--services/core/java/com/android/server/wearable/WearableSensingManagerPerUserService.java3
-rw-r--r--services/core/java/com/android/server/wearable/WearableSensingSecureChannel.java4
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java226
-rw-r--r--services/core/java/com/android/server/wm/AppTransition.java29
-rw-r--r--services/core/java/com/android/server/wm/NonAppWindowAnimationAdapter.java227
-rw-r--r--services/core/java/com/android/server/wm/RemoteAnimationController.java636
-rw-r--r--services/core/java/com/android/server/wm/TaskDisplayArea.java8
-rw-r--r--services/core/java/com/android/server/wm/TaskFragment.java13
-rw-r--r--services/core/java/com/android/server/wm/WallpaperAnimationAdapter.java191
-rw-r--r--services/core/java/com/android/server/wm/WallpaperWindowToken.java6
-rw-r--r--services/core/java/com/android/server/wm/WindowContainer.java66
-rw-r--r--services/core/java/com/android/server/wm/WindowContainerThumbnail.java218
-rw-r--r--services/core/java/com/android/server/wm/WindowOrganizerController.java51
-rw-r--r--services/people/java/com/android/server/people/PeopleService.java14
-rw-r--r--services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidManifest.xml4
-rw-r--r--services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java414
-rw-r--r--services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java5
-rw-r--r--services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/res/layout/input_view.xml22
-rw-r--r--services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/res/xml/method.xml11
-rw-r--r--services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/KeyCodeConstants.java85
-rw-r--r--services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/SimpleInputMethodService.java44
-rw-r--r--services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/SimpleKeyboard.java132
-rw-r--r--services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/SimpleKeyboardView.java191
-rw-r--r--services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/ims/InputMethodServiceWrapper.java67
-rw-r--r--services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/testing/TestActivity.java51
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceTest.java67
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/LocalDisplayAdapterTest.java4
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java30
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickControllerTest.java74
-rw-r--r--services/tests/servicestests/src/com/android/server/am/UserControllerTest.java19
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java36
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java61
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RemoteAnimationControllerTest.java757
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java22
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java65
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java1
-rw-r--r--tests/Input/src/com/android/server/input/InputManagerServiceTests.kt28
-rw-r--r--tests/Tracing/src/com/android/internal/protolog/ProtoLogConfigurationServiceTest.java58
-rw-r--r--tests/testables/tests/src/android/animation/AnimatorTestRuleToolkitTest.kt21
-rw-r--r--tools/aapt2/cmd/Diff.cpp183
-rw-r--r--tools/aapt2/cmd/Diff.h15
829 files changed, 11824 insertions, 10941 deletions
diff --git a/apct-tests/perftests/core/src/android/libcore/regression/ExpensiveObjectsPerfTest.java b/apct-tests/perftests/core/src/android/libcore/regression/ExpensiveObjectsPerfTest.java
index ecbfc7169945..10ec2bfcb49a 100644
--- a/apct-tests/perftests/core/src/android/libcore/regression/ExpensiveObjectsPerfTest.java
+++ b/apct-tests/perftests/core/src/android/libcore/regression/ExpensiveObjectsPerfTest.java
@@ -75,8 +75,19 @@ public class ExpensiveObjectsPerfTest {
@Test(timeout = 900000)
public void timeNewCollator() {
BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ int i = 0;
while (state.keepRunning()) {
Collator.getInstance(Locale.US);
+
+ if (++i % 1000 == 0) {
+ state.pauseTiming();
+ // GC and finalize occasionally to avoid GC for alloc and/or
+ // blocking on finalization during benchmark time.
+ // See: b/394961590
+ System.gc();
+ System.runFinalization();
+ state.resumeTiming();
+ }
}
}
@@ -84,8 +95,19 @@ public class ExpensiveObjectsPerfTest {
public void timeClonedCollator() {
Collator c = Collator.getInstance(Locale.US);
BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ int i = 0;
while (state.keepRunning()) {
c.clone();
+
+ if (++i % 1000 == 0) {
+ state.pauseTiming();
+ // GC and finalize occasionally to avoid GC for alloc and/or
+ // blocking on finalization during benchmark time.
+ // See: b/394961590
+ System.gc();
+ System.runFinalization();
+ state.resumeTiming();
+ }
}
}
diff --git a/cmds/svc/src/com/android/commands/svc/OWNERS b/cmds/svc/src/com/android/commands/svc/OWNERS
index d5a5d7b3b858..a901dfdeddfb 100644
--- a/cmds/svc/src/com/android/commands/svc/OWNERS
+++ b/cmds/svc/src/com/android/commands/svc/OWNERS
@@ -1,2 +1,2 @@
# Bug component: 48448
-per-file NfcCommand.java = file:platform/packages/apps/Nfc:/OWNERS
+per-file NfcCommand.java = file:platform/packages/modules/Nfc:/OWNERS
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 6fedcbe50f30..b9255ecaf1b6 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -126,6 +126,7 @@ interface INotificationManager
boolean areChannelsBypassingDnd();
ParceledListSlice getNotificationChannelsBypassingDnd(String pkg, int uid);
ParceledListSlice getPackagesBypassingDnd(int userId);
+ List<String> getPackagesWithAnyChannels(int userId);
boolean isPackagePaused(String pkg);
void deleteNotificationHistoryItem(String pkg, int uid, long postedTime);
boolean isPermissionFixed(String pkg, int userId);
diff --git a/core/java/android/app/notification.aconfig b/core/java/android/app/notification.aconfig
index a10b6ff39a37..9d8ab03982e6 100644
--- a/core/java/android/app/notification.aconfig
+++ b/core/java/android/app/notification.aconfig
@@ -308,6 +308,16 @@ flag {
}
flag {
+ name: "nm_binder_perf_get_apps_with_channels"
+ namespace: "systemui"
+ description: "Use a single binder call to get the set of apps with channels for a user"
+ bug: "362981561"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "no_sbnholder"
namespace: "systemui"
description: "removes sbnholder from NLS"
diff --git a/core/java/android/appwidget/flags.aconfig b/core/java/android/appwidget/flags.aconfig
index 9914ba2b020a..58bf4ef8100b 100644
--- a/core/java/android/appwidget/flags.aconfig
+++ b/core/java/android/appwidget/flags.aconfig
@@ -97,16 +97,6 @@ flag {
}
flag {
- name: "check_remote_views_uri_permission"
- namespace: "app_widgets"
- description: "Check that the widget provider has permissions to access any URIs within its RemoteViews"
- bug: "369137473"
- metadata {
- purpose: PURPOSE_BUGFIX
- }
-}
-
-flag {
name: "engagement_metrics"
namespace: "app_widgets"
description: "Enable collection of widget engagement metrics"
diff --git a/core/java/android/content/AttributionSource.java b/core/java/android/content/AttributionSource.java
index ffed5366d31b..ebf522b66c4e 100644
--- a/core/java/android/content/AttributionSource.java
+++ b/core/java/android/content/AttributionSource.java
@@ -34,6 +34,7 @@ import android.os.UserHandle;
import android.permission.PermissionManager;
import android.permission.flags.Flags;
import android.util.ArraySet;
+import android.util.Log;
import com.android.internal.annotations.Immutable;
@@ -90,6 +91,7 @@ import java.util.Set;
*/
@Immutable
public final class AttributionSource implements Parcelable {
+ private static final String TAG = "AttributionSource";
private static final String DESCRIPTOR = "android.content.AttributionSource";
private static final Binder sDefaultToken = new Binder(DESCRIPTOR);
@@ -273,6 +275,13 @@ public final class AttributionSource implements Parcelable {
final AttributionSource globalSource = ActivityThread.currentAttributionSource();
if (globalSource != null) {
+ if (Flags.enforceDefaultDeviceIdInMyAttributionSource()
+ && globalSource.getDeviceId() != Context.DEVICE_ID_DEFAULT) {
+ Log.w(TAG,
+ "Avoid using myAttributionSource() to fetch an attributionSource with a "
+ + "non-default device Id");
+ return globalSource.withDeviceId(Context.DEVICE_ID_DEFAULT);
+ }
return globalSource;
}
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 8378695fd7a7..3391e79b2ae4 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -3334,7 +3334,7 @@ public abstract class Context {
* this case, only one of these can be returned directly by the function;
* which of these that is returned is arbitrarily decided by the system.
*
- * <p>If you know the Intent your are registering for is sticky, you can
+ * <p>If you know the Intent you are registering for is sticky, you can
* supply null for your <var>receiver</var>. In this case, no receiver is
* registered -- the function simply returns the sticky Intent that
* matches <var>filter</var>. In the case of multiple matches, the same
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 0312ad7a739a..038756148a32 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -8181,7 +8181,7 @@ public class Intent implements Parcelable, Cloneable {
/**
* Create an intent from a URI. This URI may encode the action,
* category, and other intent fields, if it was returned by
- * {@link #toUri}. If the Intent was not generate by toUri(), its data
+ * {@link #toUri}. If the Intent was not generated by toUri(), its data
* will be the entire URI and its action will be ACTION_VIEW.
*
* <p>The URI given here must not be relative -- that is, it must include
diff --git a/core/java/android/content/res/XmlBlock.java b/core/java/android/content/res/XmlBlock.java
index 40c532498fbc..2ead17588be4 100644
--- a/core/java/android/content/res/XmlBlock.java
+++ b/core/java/android/content/res/XmlBlock.java
@@ -29,6 +29,8 @@ import android.ravenwood.annotation.RavenwoodKeepWholeClass;
import android.util.TypedValue;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.pm.pkg.component.AconfigFlags;
+import com.android.internal.pm.pkg.parsing.ParsingPackageUtils;
import com.android.internal.util.XmlUtils;
import dalvik.annotation.optimization.CriticalNative;
@@ -50,6 +52,7 @@ import java.io.Reader;
@RavenwoodClassLoadHook(RavenwoodClassLoadHook.LIBANDROID_LOADING_HOOK)
public final class XmlBlock implements AutoCloseable {
private static final boolean DEBUG=false;
+ public static final String ANDROID_RESOURCES = "http://schemas.android.com/apk/res/android";
@UnsupportedAppUsage
public XmlBlock(byte[] data) {
@@ -343,6 +346,23 @@ public final class XmlBlock implements AutoCloseable {
if (ev == ERROR_BAD_DOCUMENT) {
throw new XmlPullParserException("Corrupt XML binary file");
}
+ if (Flags.layoutReadwriteFlags() && ev == START_TAG) {
+ AconfigFlags flags = ParsingPackageUtils.getAconfigFlags();
+ if (flags.skipCurrentElement(/* pkg= */ null, this)) {
+ int depth = 1;
+ while (depth > 0) {
+ int ev2 = nativeNext(mParseState);
+ if (ev2 == ERROR_BAD_DOCUMENT) {
+ throw new XmlPullParserException("Corrupt XML binary file");
+ } else if (ev2 == START_TAG) {
+ depth++;
+ } else if (ev2 == END_TAG) {
+ depth--;
+ }
+ }
+ return next();
+ }
+ }
if (mDecNextDepth) {
mDepth--;
mDecNextDepth = false;
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index c00f31db1a38..08365c935626 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -982,8 +982,8 @@ public class UserManager {
/**
* Specifies if a user is disallowed from adding new users. This can only be set by device
* owners or profile owners on the main user. The default value is <code>false</code>.
- * <p> When the device is an organization-owned device provisioned with a managed profile,
- * this restriction will be set as a base restriction which cannot be removed by any admin.
+ * <p> When the device is an organization-owned device, this restriction will be set as
+ * a base restriction which cannot be removed by any admin.
*
* <p>Holders of the permission
* {@link android.Manifest.permission#MANAGE_DEVICE_POLICY_MODIFY_USERS}
diff --git a/core/java/android/permission/flags.aconfig b/core/java/android/permission/flags.aconfig
index daa5584462ba..d469a2f985fa 100644
--- a/core/java/android/permission/flags.aconfig
+++ b/core/java/android/permission/flags.aconfig
@@ -507,3 +507,10 @@ flag {
description: "Use IoThread handler for AppOpsService background/IO work."
bug: "394380603"
}
+
+flag {
+ name: "enforce_default_device_id_in_my_attribution_source"
+ namespace: "permissions"
+ description: "Force AttributionSource.myAttributionSource() to return a default device id"
+ bug: "343121936"
+}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index f1a9514107da..670709846d4c 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -10269,6 +10269,16 @@ public final class Settings {
public static final String DOZE_ALWAYS_ON = "doze_always_on";
/**
+ * Indicates whether ambient wallpaper is visible with AOD.
+ * <p>
+ * Type: int (0 for false, 1 for true)
+ *
+ * @hide
+ */
+ public static final String DOZE_ALWAYS_ON_WALLPAPER_ENABLED =
+ "doze_always_on_wallpaper_enabled";
+
+ /**
* Whether the device should pulse on pick up gesture.
* @hide
*/
diff --git a/core/java/android/security/flags.aconfig b/core/java/android/security/flags.aconfig
index 792e6ff52d01..3a3ea189b227 100644
--- a/core/java/android/security/flags.aconfig
+++ b/core/java/android/security/flags.aconfig
@@ -126,6 +126,16 @@ flag {
}
flag {
+ name: "internal_log_event_listener"
+ namespace: "hardware_backed_security"
+ description: "Use internal callback to gather SecurityMonitor logs."
+ bug: "389732143"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "protect_device_config_flags"
namespace: "psap_ai"
description: "Feature flag to limit adb shell to allowlisted flags"
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java
index 323d83b92143..2fa56137a8a0 100644
--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -672,7 +672,7 @@ public abstract class Layout {
// LINT.IfChange(hct_darken)
var lab = new double[3];
ColorUtils.colorToLAB(color, lab);
- return lab[0] < 50.0;
+ return lab[0] <= 50.0;
// LINT.ThenChange(/libs/hwui/hwui/DrawTextFunctor.h:hct_darken)
}
@@ -1021,6 +1021,12 @@ public abstract class Layout {
return;
}
+ if (!mSpannedText || mSpanColors == null) {
+ if (mPaint.getAlpha() == 0) {
+ return;
+ }
+ }
+
var padding = Math.max(HIGH_CONTRAST_TEXT_BORDER_WIDTH_MIN_PX,
mPaint.getTextSize() * HIGH_CONTRAST_TEXT_BORDER_WIDTH_FACTOR);
var cornerRadius = mPaint.density * HIGH_CONTRAST_TEXT_BACKGROUND_CORNER_RADIUS_DP;
diff --git a/core/java/android/window/DesktopModeFlags.java b/core/java/android/window/DesktopModeFlags.java
index 1ce5df7cd137..d43469fa76ca 100644
--- a/core/java/android/window/DesktopModeFlags.java
+++ b/core/java/android/window/DesktopModeFlags.java
@@ -57,6 +57,8 @@ public enum DesktopModeFlags {
true),
ENABLE_DESKTOP_CLOSE_SHORTCUT_BUGFIX(Flags::enableDesktopCloseShortcutBugfix, false),
ENABLE_DESKTOP_COMPAT_UI_VISIBILITY_STATUS(Flags::enableCompatUiVisibilityStatus, true),
+ ENABLE_DESKTOP_INDICATOR_IN_SEPARATE_THREAD_BUGFIX(
+ Flags::enableDesktopIndicatorInSeparateThreadBugfix, false),
ENABLE_DESKTOP_RECENTS_TRANSITIONS_CORNERS_BUGFIX(
Flags::enableDesktopRecentsTransitionsCornersBugfix, false),
ENABLE_DESKTOP_SKIP_COMPAT_UI_EDUCATION_IN_DESKTOP_MODE_BUGFIX(
diff --git a/core/java/android/window/TaskFragmentOperation.java b/core/java/android/window/TaskFragmentOperation.java
index 9d0ea547e734..1fd79ccf9e3f 100644
--- a/core/java/android/window/TaskFragmentOperation.java
+++ b/core/java/android/window/TaskFragmentOperation.java
@@ -90,26 +90,6 @@ public final class TaskFragmentOperation implements Parcelable {
public static final int OP_TYPE_SET_ISOLATED_NAVIGATION = 11;
/**
- * Reorders the TaskFragment to be the bottom-most in the Task. Note that this op will bring the
- * TaskFragment to the bottom of the Task below all the other Activities and TaskFragments.
- *
- * This is only allowed for system organizers. See
- * {@link com.android.server.wm.TaskFragmentOrganizerController#registerOrganizer(
- * ITaskFragmentOrganizer, boolean)}
- */
- public static final int OP_TYPE_REORDER_TO_BOTTOM_OF_TASK = 12;
-
- /**
- * Reorders the TaskFragment to be the top-most in the Task. Note that this op will bring the
- * TaskFragment to the top of the Task above all the other Activities and TaskFragments.
- *
- * This is only allowed for system organizers. See
- * {@link com.android.server.wm.TaskFragmentOrganizerController#registerOrganizer(
- * ITaskFragmentOrganizer, boolean)}
- */
- public static final int OP_TYPE_REORDER_TO_TOP_OF_TASK = 13;
-
- /**
* Creates a decor surface in the parent Task of the TaskFragment. The created decor surface
* will be provided in {@link TaskFragmentTransaction#TYPE_TASK_FRAGMENT_PARENT_INFO_CHANGED}
* event callback. If a decor surface already exists in the parent Task, the current
@@ -118,27 +98,17 @@ public final class TaskFragmentOperation implements Parcelable {
*
* The decor surface can be used to draw the divider between TaskFragments or other decorations.
*/
- public static final int OP_TYPE_CREATE_OR_MOVE_TASK_FRAGMENT_DECOR_SURFACE = 14;
+ public static final int OP_TYPE_CREATE_OR_MOVE_TASK_FRAGMENT_DECOR_SURFACE = 12;
/**
* Removes the decor surface in the parent Task of the TaskFragment.
*/
- public static final int OP_TYPE_REMOVE_TASK_FRAGMENT_DECOR_SURFACE = 15;
+ public static final int OP_TYPE_REMOVE_TASK_FRAGMENT_DECOR_SURFACE = 13;
/**
* Applies dimming on the parent Task which could cross two TaskFragments.
*/
- public static final int OP_TYPE_SET_DIM_ON_TASK = 16;
-
- /**
- * Sets this TaskFragment to move to bottom of the Task if any of the activities below it is
- * launched in a mode requiring clear top.
- *
- * This is only allowed for system organizers. See
- * {@link com.android.server.wm.TaskFragmentOrganizerController#registerOrganizer(
- * ITaskFragmentOrganizer, boolean)}
- */
- public static final int OP_TYPE_SET_MOVE_TO_BOTTOM_IF_CLEAR_WHEN_LAUNCH = 17;
+ public static final int OP_TYPE_SET_DIM_ON_TASK = 14;
/**
* Sets whether the decor surface will be boosted. When not boosted, the decor surface is placed
@@ -147,7 +117,7 @@ public final class TaskFragmentOperation implements Parcelable {
* surface is placed above all the non-boosted windows in the Task, the content of these
* non-boosted windows will be hidden and inputs are disabled.
*/
- public static final int OP_TYPE_SET_DECOR_SURFACE_BOOSTED = 18;
+ public static final int OP_TYPE_SET_DECOR_SURFACE_BOOSTED = 15;
/**
* Sets the TaskFragment to be pinned.
@@ -159,7 +129,44 @@ public final class TaskFragmentOperation implements Parcelable {
* <p>
* See {@link #OP_TYPE_REORDER_TO_FRONT} on how to reorder a pinned TaskFragment to the top.
*/
- public static final int OP_TYPE_SET_PINNED = 19;
+ public static final int OP_TYPE_SET_PINNED = 16;
+
+ /**
+ * The start index of the privileged operations. Only system organizers are allowed to use
+ * operations with index greater than or equal to this value.
+ */
+ public static final int PRIVILEGED_OP_START = 1000;
+
+ /**
+ * Reorders the TaskFragment to be the bottom-most in the Task. Note that this op will bring the
+ * TaskFragment to the bottom of the Task below all the other Activities and TaskFragments.
+ *
+ * This is only allowed for system organizers. See
+ * {@link com.android.server.wm.TaskFragmentOrganizerController#registerOrganizer(
+ * ITaskFragmentOrganizer, boolean)}
+ */
+ public static final int OP_TYPE_PRIVILEGED_REORDER_TO_BOTTOM_OF_TASK = PRIVILEGED_OP_START + 1;
+
+ /**
+ * Reorders the TaskFragment to be the top-most in the Task. Note that this op will bring the
+ * TaskFragment to the top of the Task above all the other Activities and TaskFragments.
+ *
+ * This is only allowed for system organizers. See
+ * {@link com.android.server.wm.TaskFragmentOrganizerController#registerOrganizer(
+ * ITaskFragmentOrganizer, boolean)}
+ */
+ public static final int OP_TYPE_PRIVILEGED_REORDER_TO_TOP_OF_TASK = PRIVILEGED_OP_START + 2;
+
+ /**
+ * Sets this TaskFragment to move to bottom of the Task if any of the activities below it is
+ * launched in a mode requiring clear top.
+ *
+ * This is only allowed for system organizers. See
+ * {@link com.android.server.wm.TaskFragmentOrganizerController#registerOrganizer(
+ * ITaskFragmentOrganizer, boolean)}
+ */
+ public static final int OP_TYPE_PRIVILEGED_SET_MOVE_TO_BOTTOM_IF_CLEAR_WHEN_LAUNCH =
+ PRIVILEGED_OP_START + 3;
/**
* Sets whether this TaskFragment can affect system UI flags such as the status bar. Default
@@ -169,7 +176,8 @@ public final class TaskFragmentOperation implements Parcelable {
* {@link com.android.server.wm.TaskFragmentOrganizerController#registerOrganizer(
* ITaskFragmentOrganizer, boolean)}
*/
- public static final int OP_TYPE_SET_CAN_AFFECT_SYSTEM_UI_FLAGS = 20;
+ public static final int OP_TYPE_PRIVILEGED_SET_CAN_AFFECT_SYSTEM_UI_FLAGS =
+ PRIVILEGED_OP_START + 4;
@IntDef(prefix = { "OP_TYPE_" }, value = {
OP_TYPE_UNKNOWN,
@@ -185,15 +193,15 @@ public final class TaskFragmentOperation implements Parcelable {
OP_TYPE_SET_RELATIVE_BOUNDS,
OP_TYPE_REORDER_TO_FRONT,
OP_TYPE_SET_ISOLATED_NAVIGATION,
- OP_TYPE_REORDER_TO_BOTTOM_OF_TASK,
- OP_TYPE_REORDER_TO_TOP_OF_TASK,
OP_TYPE_CREATE_OR_MOVE_TASK_FRAGMENT_DECOR_SURFACE,
OP_TYPE_REMOVE_TASK_FRAGMENT_DECOR_SURFACE,
OP_TYPE_SET_DIM_ON_TASK,
- OP_TYPE_SET_MOVE_TO_BOTTOM_IF_CLEAR_WHEN_LAUNCH,
OP_TYPE_SET_DECOR_SURFACE_BOOSTED,
OP_TYPE_SET_PINNED,
- OP_TYPE_SET_CAN_AFFECT_SYSTEM_UI_FLAGS,
+ OP_TYPE_PRIVILEGED_REORDER_TO_BOTTOM_OF_TASK,
+ OP_TYPE_PRIVILEGED_REORDER_TO_TOP_OF_TASK,
+ OP_TYPE_PRIVILEGED_SET_MOVE_TO_BOTTOM_IF_CLEAR_WHEN_LAUNCH,
+ OP_TYPE_PRIVILEGED_SET_CAN_AFFECT_SYSTEM_UI_FLAGS,
})
@Retention(RetentionPolicy.SOURCE)
public @interface OperationType {}
diff --git a/core/java/android/window/flags/lse_desktop_experience.aconfig b/core/java/android/window/flags/lse_desktop_experience.aconfig
index b805ac560b8d..3266ad4d93ae 100644
--- a/core/java/android/window/flags/lse_desktop_experience.aconfig
+++ b/core/java/android/window/flags/lse_desktop_experience.aconfig
@@ -623,6 +623,13 @@ flag {
}
flag {
+ name: "enable_multi_display_split"
+ namespace: "lse_desktop_experience"
+ description: "Enables split screen on multiple displays at the same time"
+ bug: "395943397"
+}
+
+flag {
name: "exclude_caption_from_app_bounds"
namespace: "lse_desktop_experience"
description: "Whether caption insets are excluded from app bounds in freeform"
@@ -706,3 +713,13 @@ flag {
purpose: PURPOSE_BUGFIX
}
}
+
+flag {
+ name: "enable_desktop_indicator_in_separate_thread_bugfix"
+ namespace: "lse_desktop_experience"
+ description: "Enables running visual indicator view operations in ShellDesktopThread."
+ bug: "366413536"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
diff --git a/core/java/com/android/internal/jank/Cuj.java b/core/java/com/android/internal/jank/Cuj.java
index 9085bbec949f..41e2ca9cdfad 100644
--- a/core/java/com/android/internal/jank/Cuj.java
+++ b/core/java/com/android/internal/jank/Cuj.java
@@ -816,7 +816,7 @@ public class Cuj {
case CUJ_LAUNCHER_WORK_UTILITY_VIEW_SHRINK:
return "LAUNCHER_WORK_UTILITY_VIEW_SHRINK";
case CUJ_DEFAULT_TASK_TO_TASK_ANIMATION:
- return "CUJ_DEFAULT_TASK_TO_TASK_ANIMATION";
+ return "DEFAULT_TASK_TO_TASK_ANIMATION";
}
return "UNKNOWN";
}
diff --git a/core/java/com/android/internal/protolog/IProtoLogConfigurationService.aidl b/core/java/com/android/internal/protolog/IProtoLogConfigurationService.aidl
index 9b60f49d1446..a6f0b306f4bf 100644
--- a/core/java/com/android/internal/protolog/IProtoLogConfigurationService.aidl
+++ b/core/java/com/android/internal/protolog/IProtoLogConfigurationService.aidl
@@ -40,12 +40,12 @@ import com.android.internal.protolog.IProtoLogClient;
*
* {@hide}
*/
-oneway interface IProtoLogConfigurationService {
- interface IRegisterClientArgs {
- String[] getGroups();
- boolean[] getGroupsDefaultLogcatStatus();
- String getViewerConfigFile();
+interface IProtoLogConfigurationService {
+ parcelable RegisterClientArgs {
+ String[] groups;
+ boolean[] groupsDefaultLogcatStatus;
+ String viewerConfigFile;
}
- void registerClient(IProtoLogClient client, IRegisterClientArgs args);
+ oneway void registerClient(IProtoLogClient client, in RegisterClientArgs args);
} \ No newline at end of file
diff --git a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
index d8cf258e23ba..93be3b02a12a 100644
--- a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
+++ b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
@@ -62,7 +62,7 @@ import android.util.Slog;
import android.util.proto.ProtoOutputStream;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.protolog.ProtoLogConfigurationServiceImpl.RegisterClientArgs;
+import com.android.internal.protolog.IProtoLogConfigurationService.RegisterClientArgs;
import com.android.internal.protolog.common.ILogger;
import com.android.internal.protolog.common.IProtoLog;
import com.android.internal.protolog.common.IProtoLogGroup;
@@ -164,11 +164,15 @@ public abstract class PerfettoProtoLogImpl extends IProtoLogClient.Stub implemen
try {
var args = createConfigurationServiceRegisterClientArgs();
- final var groupArgs = mLogGroups.values().stream()
- .map(group -> new RegisterClientArgs
- .GroupConfig(group.name(), group.isLogToLogcat()))
- .toArray(RegisterClientArgs.GroupConfig[]::new);
- args.setGroups(groupArgs);
+ args.groups = new String[mLogGroups.size()];
+ args.groupsDefaultLogcatStatus = new boolean[mLogGroups.size()];
+
+ var groups = mLogGroups.values().stream().toList();
+ for (var i = 0; i < groups.size(); i++) {
+ var group = groups.get(i);
+ args.groups[i] = group.name();
+ args.groupsDefaultLogcatStatus[i] = group.isLogToLogcat();
+ }
mConfigurationService.registerClient(this, args);
} catch (RemoteException e) {
diff --git a/core/java/com/android/internal/protolog/ProcessedPerfettoProtoLogImpl.java b/core/java/com/android/internal/protolog/ProcessedPerfettoProtoLogImpl.java
index 1f9df3cc842a..d9c54d695a87 100644
--- a/core/java/com/android/internal/protolog/ProcessedPerfettoProtoLogImpl.java
+++ b/core/java/com/android/internal/protolog/ProcessedPerfettoProtoLogImpl.java
@@ -22,7 +22,7 @@ import android.os.ServiceManager;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.protolog.ProtoLogConfigurationServiceImpl.RegisterClientArgs;
+import com.android.internal.protolog.IProtoLogConfigurationService.RegisterClientArgs;
import com.android.internal.protolog.common.ILogger;
import com.android.internal.protolog.common.IProtoLogGroup;
@@ -104,8 +104,9 @@ public class ProcessedPerfettoProtoLogImpl extends PerfettoProtoLogImpl {
@NonNull
@Override
protected RegisterClientArgs createConfigurationServiceRegisterClientArgs() {
- return new RegisterClientArgs()
- .setViewerConfigFile(mViewerConfigFilePath);
+ var args = new RegisterClientArgs();
+ args.viewerConfigFile = mViewerConfigFilePath;
+ return args;
}
/**
diff --git a/core/java/com/android/internal/protolog/ProtoLogConfigurationServiceImpl.java b/core/java/com/android/internal/protolog/ProtoLogConfigurationServiceImpl.java
index 23f7c2a3d987..f83359dddfcc 100644
--- a/core/java/com/android/internal/protolog/ProtoLogConfigurationServiceImpl.java
+++ b/core/java/com/android/internal/protolog/ProtoLogConfigurationServiceImpl.java
@@ -134,74 +134,6 @@ public class ProtoLogConfigurationServiceImpl extends IProtoLogConfigurationServ
mDataSource = datasource;
}
- public static class RegisterClientArgs extends IRegisterClientArgs.Stub {
- /**
- * The viewer config file to be registered for this client ProtoLog process.
- */
- @Nullable
- private String mViewerConfigFile = null;
- /**
- * The list of all groups that this client protolog process supports and might trace.
- */
- @NonNull
- private String[] mGroups = new String[0];
- /**
- * The default logcat status of the ProtoLog client. True is logging to logcat, false
- * otherwise. The indices should match the indices in {@link mGroups}.
- */
- @NonNull
- private boolean[] mLogcatStatus = new boolean[0];
-
- public record GroupConfig(@NonNull String group, boolean logToLogcat) {}
-
- /**
- * Specify groups to register with this client that will be used for protologging in this
- * process.
- * @param groups to register with this client.
- * @return self
- */
- public RegisterClientArgs setGroups(GroupConfig... groups) {
- mGroups = new String[groups.length];
- mLogcatStatus = new boolean[groups.length];
-
- for (int i = 0; i < groups.length; i++) {
- mGroups[i] = groups[i].group;
- mLogcatStatus[i] = groups[i].logToLogcat;
- }
-
- return this;
- }
-
- /**
- * Set the viewer config file that the logs in this process are using.
- * @param viewerConfigFile The file path of the viewer config.
- * @return self
- */
- public RegisterClientArgs setViewerConfigFile(@NonNull String viewerConfigFile) {
- mViewerConfigFile = viewerConfigFile;
-
- return this;
- }
-
- @Override
- @NonNull
- public String[] getGroups() {
- return mGroups;
- }
-
- @Override
- @NonNull
- public boolean[] getGroupsDefaultLogcatStatus() {
- return mLogcatStatus;
- }
-
- @Nullable
- @Override
- public String getViewerConfigFile() {
- return mViewerConfigFile;
- }
- }
-
@FunctionalInterface
public interface ViewerConfigFileTracer {
/**
@@ -216,16 +148,16 @@ public class ProtoLogConfigurationServiceImpl extends IProtoLogConfigurationServ
}
@Override
- public void registerClient(@NonNull IProtoLogClient client, @NonNull IRegisterClientArgs args)
+ public void registerClient(@NonNull IProtoLogClient client, @NonNull RegisterClientArgs args)
throws RemoteException {
client.asBinder().linkToDeath(() -> onClientBinderDeath(client), /* flags */ 0);
- final String viewerConfigFile = args.getViewerConfigFile();
+ final String viewerConfigFile = args.viewerConfigFile;
if (viewerConfigFile != null) {
registerViewerConfigFile(client, viewerConfigFile);
}
- registerGroups(client, args.getGroups(), args.getGroupsDefaultLogcatStatus());
+ registerGroups(client, args.groups, args.groupsDefaultLogcatStatus);
}
@Override
diff --git a/core/java/com/android/internal/protolog/UnprocessedPerfettoProtoLogImpl.java b/core/java/com/android/internal/protolog/UnprocessedPerfettoProtoLogImpl.java
index ebb07a04270d..39b01fb59d9e 100644
--- a/core/java/com/android/internal/protolog/UnprocessedPerfettoProtoLogImpl.java
+++ b/core/java/com/android/internal/protolog/UnprocessedPerfettoProtoLogImpl.java
@@ -19,7 +19,7 @@ package com.android.internal.protolog;
import android.annotation.NonNull;
import android.os.ServiceManager;
-import com.android.internal.protolog.ProtoLogConfigurationServiceImpl.RegisterClientArgs;
+import com.android.internal.protolog.IProtoLogConfigurationService.RegisterClientArgs;
import com.android.internal.protolog.common.IProtoLogGroup;
public class UnprocessedPerfettoProtoLogImpl extends PerfettoProtoLogImpl {
diff --git a/core/java/com/android/internal/security/TEST_MAPPING b/core/java/com/android/internal/security/TEST_MAPPING
index 5bd9d2e4512d..be50bebf0831 100644
--- a/core/java/com/android/internal/security/TEST_MAPPING
+++ b/core/java/com/android/internal/security/TEST_MAPPING
@@ -6,10 +6,6 @@
{
"name": "UpdatableSystemFontTest",
"file_patterns": ["VerityUtils\\.java"]
- },
- {
- "name": "CtsApkVerityInstallHostTestCases",
- "file_patterns": ["VerityUtils\\.java"]
}
],
"postsubmit": [
diff --git a/core/java/com/android/internal/widget/NotificationProgressBar.java b/core/java/com/android/internal/widget/NotificationProgressBar.java
index 905d4dd547f3..c0fe0d125e44 100644
--- a/core/java/com/android/internal/widget/NotificationProgressBar.java
+++ b/core/java/com/android/internal/widget/NotificationProgressBar.java
@@ -64,6 +64,7 @@ public final class NotificationProgressBar extends ProgressBar implements
NotificationProgressDrawable.BoundsChangeListener {
private static final String TAG = "NotificationProgressBar";
private static final boolean DEBUG = false;
+ private static final float FADED_OPACITY = 0.5f;
private NotificationProgressDrawable mNotificationProgressDrawable;
private final Rect mProgressDrawableBounds = new Rect();
@@ -851,12 +852,12 @@ public final class NotificationProgressBar extends ProgressBar implements
}
/**
- * Get a color with an opacity that's 50% of the input color.
+ * Get a color that's the input color with opacity updated to FADED_OPACITY.
*/
@ColorInt
static int getFadedColor(@ColorInt int color) {
return Color.argb(
- (int) (Color.alpha(color) * 0.5f + 0.5f),
+ (int) (Color.alpha(color) * FADED_OPACITY + 0.5f),
Color.red(color),
Color.green(color),
Color.blue(color));
@@ -1200,7 +1201,7 @@ public final class NotificationProgressBar extends ProgressBar implements
* <p>
* <pre>
* When mFaded is set to true, a combination of the following is done to the segment:
- * 1. The drawing color is mColor with opacity updated to 50%.
+ * 1. The drawing color is mColor with opacity updated to FADED_OPACITY.
* 2. The gap between faded and non-faded segments is:
* - the segment-segment gap, when there is no tracker icon
* - 0, when there is tracker icon
diff --git a/core/java/com/android/internal/widget/remotecompose/OWNERS b/core/java/com/android/internal/widget/remotecompose/OWNERS
index 54facab0c3f4..e163474bccb9 100644
--- a/core/java/com/android/internal/widget/remotecompose/OWNERS
+++ b/core/java/com/android/internal/widget/remotecompose/OWNERS
@@ -5,4 +5,3 @@ sihua@google.com
sunnygoyal@google.com
oscarad@google.com
pinyaoting@google.com
-zakcohen@google.com
diff --git a/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java b/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java
index dea1caf76a5c..ca355c41f7a9 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/CoreDocument.java
@@ -35,6 +35,7 @@ import com.android.internal.widget.remotecompose.core.operations.layout.LoopOper
import com.android.internal.widget.remotecompose.core.operations.layout.RootLayoutComponent;
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.ComponentModifiers;
import com.android.internal.widget.remotecompose.core.operations.layout.modifiers.ModifierOperation;
+import com.android.internal.widget.remotecompose.core.operations.utilities.IntMap;
import com.android.internal.widget.remotecompose.core.operations.utilities.StringSerializer;
import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
import com.android.internal.widget.remotecompose.core.serialize.Serializable;
@@ -64,7 +65,7 @@ public class CoreDocument implements Serializable {
// We also keep a more fine-grained BUILD number, exposed as
// ID_API_LEVEL = DOCUMENT_API_LEVEL + BUILD
- static final float BUILD = 0.0f;
+ static final float BUILD = 0.1f;
@NonNull ArrayList<Operation> mOperations = new ArrayList<>();
@@ -99,6 +100,8 @@ public class CoreDocument implements Serializable {
private int mLastId = 1; // last component id when inflating the file
+ private IntMap<Object> mDocProperties;
+
/** Returns a version number that is monotonically increasing. */
public static int getDocumentApiLevel() {
return DOCUMENT_API_LEVEL;
@@ -407,10 +410,31 @@ public class CoreDocument implements Serializable {
@Override
public void serialize(MapSerializer serializer) {
- serializer.add("type", "CoreDocument");
- serializer.add("width", mWidth);
- serializer.add("height", mHeight);
- serializer.add("operations", mOperations);
+ serializer
+ .add("type", "CoreDocument")
+ .add("width", mWidth)
+ .add("height", mHeight)
+ .add("operations", mOperations);
+ }
+
+ /**
+ * Set the properties of the document
+ *
+ * @param properties the properties to set
+ */
+ public void setProperties(IntMap<Object> properties) {
+ mDocProperties = properties;
+ }
+
+ /**
+ * @param key the key
+ * @return the value associated with the key
+ */
+ public Object getProperty(short key) {
+ if (mDocProperties == null) {
+ return null;
+ }
+ return mDocProperties.get(key);
}
// ============== Haptic support ==================
diff --git a/core/java/com/android/internal/widget/remotecompose/core/PaintContext.java b/core/java/com/android/internal/widget/remotecompose/core/PaintContext.java
index a5b669d6aecf..1b0b9d783dff 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/PaintContext.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/PaintContext.java
@@ -207,6 +207,13 @@ public abstract class PaintContext {
public abstract void restorePaint();
/**
+ * Replace the current paint with the PaintBundle
+ *
+ * @param paint
+ */
+ public abstract void replacePaint(PaintBundle paint);
+
+ /**
* draw a round rect
*
* @param left left coordinate of the rectangle
diff --git a/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java b/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java
index c6ef1d3c457d..39f85f600310 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/RemoteComposeBuffer.java
@@ -191,6 +191,11 @@ public class RemoteComposeBuffer {
// Supported operations on the buffer
///////////////////////////////////////////////////////////////////////////////////////////////
+ /** Insert a header */
+ public void addHeader(short[] tags, Object[] values) {
+ Header.apply(mBuffer, tags, values);
+ }
+
/**
* Insert a header
*
@@ -219,6 +224,28 @@ public class RemoteComposeBuffer {
* @param width the width of the document in pixels
* @param height the height of the document in pixels
* @param contentDescription content description of the document
+ * @param capabilities bitmask indicating needed capabilities (unused for now)
+ */
+ public void addHeader(
+ int width,
+ int height,
+ @Nullable String contentDescription,
+ float density,
+ long capabilities) {
+ Header.apply(mBuffer, width, height, density, capabilities);
+ int contentDescriptionId = 0;
+ if (contentDescription != null) {
+ contentDescriptionId = addText(contentDescription);
+ RootContentDescription.apply(mBuffer, contentDescriptionId);
+ }
+ }
+
+ /**
+ * Insert a header
+ *
+ * @param width the width of the document in pixels
+ * @param height the height of the document in pixels
+ * @param contentDescription content description of the document
*/
public void header(int width, int height, @Nullable String contentDescription) {
header(width, height, contentDescription, 1f, 0);
diff --git a/core/java/com/android/internal/widget/remotecompose/core/RemoteContext.java b/core/java/com/android/internal/widget/remotecompose/core/RemoteContext.java
index 36e4ec1ff303..622f0c8d12b7 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/RemoteContext.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/RemoteContext.java
@@ -26,6 +26,7 @@ import com.android.internal.widget.remotecompose.core.operations.layout.Componen
import com.android.internal.widget.remotecompose.core.operations.utilities.ArrayAccess;
import com.android.internal.widget.remotecompose.core.operations.utilities.CollectionsAccess;
import com.android.internal.widget.remotecompose.core.operations.utilities.DataMap;
+import com.android.internal.widget.remotecompose.core.operations.utilities.IntMap;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
@@ -392,6 +393,7 @@ public abstract class RemoteContext {
* @param width original width of the document when created
* @param height original height of the document when created
* @param capabilities bitmask of capabilities used in the document (TBD)
+ * @param properties properties of the document (TBD)
*/
public void header(
int majorVersion,
@@ -399,13 +401,15 @@ public abstract class RemoteContext {
int patchVersion,
int width,
int height,
- long capabilities) {
+ long capabilities,
+ IntMap<Object> properties) {
mRemoteComposeState.setWindowWidth(width);
mRemoteComposeState.setWindowHeight(height);
mDocument.setVersion(majorVersion, minorVersion, patchVersion);
mDocument.setWidth(width);
mDocument.setHeight(height);
mDocument.setRequiredCapabilities(capabilities);
+ mDocument.setProperties(properties);
}
/**
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/ColorExpression.java b/core/java/com/android/internal/widget/remotecompose/core/operations/ColorExpression.java
index a593241888df..d5af7914607a 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/ColorExpression.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/ColorExpression.java
@@ -27,6 +27,8 @@ import com.android.internal.widget.remotecompose.core.VariableSupport;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
@@ -34,7 +36,7 @@ import java.util.List;
* Operation to Colors Color modes mMode = 0 two colors and a tween mMode = 1 color1 is a colorID.
* mMode = 2 color2 is a colorID. mMode = 3 color1 & color2 are ids mMode = 4 H S V mode
*/
-public class ColorExpression extends Operation implements VariableSupport {
+public class ColorExpression extends Operation implements VariableSupport, Serializable {
private static final int OP_CODE = Operations.COLOR_EXPRESSIONS;
private static final String CLASS_NAME = "ColorExpression";
public int mId;
@@ -502,4 +504,36 @@ public class ColorExpression extends Operation implements VariableSupport {
public String deepToString(@NonNull String indent) {
return indent + toString();
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer.add("type", CLASS_NAME).add("id", mId);
+ switch (mMode) {
+ case COLOR_COLOR_INTERPOLATE:
+ case ID_COLOR_INTERPOLATE:
+ case COLOR_ID_INTERPOLATE:
+ case ID_ID_INTERPOLATE:
+ serializer.add("mode", "TWEEN");
+ serializer.add("startColor", mColor1, mOutColor1);
+ serializer.add("endColor", mColor2, mOutColor2);
+ serializer.add("startColor", mTween, mOutTween);
+ break;
+ case HSV_MODE:
+ serializer.add("mode", "HSV");
+ serializer.add("hue", mHue, mOutHue);
+ serializer.add("sat", mSat, mOutSat);
+ serializer.add("val", mValue, mOutValue);
+ break;
+ case ARGB_MODE:
+ case IDARGB_MODE:
+ serializer.add("mode", "ARGB");
+ serializer.add("a", mArgbAlpha, mOutArgbAlpha);
+ serializer.add("r", mArgbRed, mOutArgbRed);
+ serializer.add("g", mArgbGreen, mOutArgbGreen);
+ serializer.add("b", mArgbBlue, mOutArgbBlue);
+ break;
+ default:
+ serializer.add("mode", "NONE");
+ }
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DataListFloat.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DataListFloat.java
index 7a72b109b2a8..fb3abdbb0626 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DataListFloat.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DataListFloat.java
@@ -28,11 +28,13 @@ import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
import com.android.internal.widget.remotecompose.core.operations.utilities.ArrayAccess;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.Arrays;
import java.util.List;
-public class DataListFloat extends Operation implements VariableSupport, ArrayAccess {
+public class DataListFloat extends Operation implements VariableSupport, ArrayAccess, Serializable {
private static final int OP_CODE = Operations.FLOAT_LIST;
private static final String CLASS_NAME = "IdListData";
private final int mId;
@@ -145,4 +147,9 @@ public class DataListFloat extends Operation implements VariableSupport, ArrayAc
public int getLength() {
return mValues.length;
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer.add("type", CLASS_NAME).add("id", mId).add("values", List.of(mValues));
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DataListIds.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DataListIds.java
index 7e29620ec104..58fd74fdcf3e 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DataListIds.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DataListIds.java
@@ -29,11 +29,13 @@ import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
import com.android.internal.widget.remotecompose.core.operations.utilities.ArrayAccess;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.Arrays;
import java.util.List;
-public class DataListIds extends Operation implements VariableSupport, ArrayAccess {
+public class DataListIds extends Operation implements VariableSupport, ArrayAccess, Serializable {
private static final int OP_CODE = Operations.ID_LIST;
private static final String CLASS_NAME = "IdListData";
private final int mId;
@@ -147,4 +149,9 @@ public class DataListIds extends Operation implements VariableSupport, ArrayAcce
public int getIntValue(int index) {
return 0;
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer.add("type", CLASS_NAME).add("id", mId).add("ids", List.of(mIds));
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase2.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase2.java
index 6df4b91cc405..5dbaf29b8cc0 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase2.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase2.java
@@ -121,6 +121,6 @@ public abstract class DrawBase2 extends PaintOperation implements VariableSuppor
}
protected MapSerializer serialize(MapSerializer serializer, String v1Name, String v2Name) {
- return serializer.add(v1Name, mV1, mValue1).add(v2Name, mV2, mValue2);
+ return serializer.add(v1Name, mValue1, mV1).add(v2Name, mValue2, mV2);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase3.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase3.java
index 16ead454d84f..238f10e794d0 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase3.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase3.java
@@ -126,8 +126,8 @@ public abstract class DrawBase3 extends PaintOperation implements VariableSuppor
protected MapSerializer serialize(
MapSerializer serializer, String v1Name, String v2Name, String v3Name) {
return serializer
- .add(v1Name, mV1, mValue1)
- .add(v2Name, mV2, mValue2)
- .add(v3Name, mV3, mValue3);
+ .add(v1Name, mValue1, mV1)
+ .add(v2Name, mValue2, mV2)
+ .add(v3Name, mValue3, mV3);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase4.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase4.java
index 0733b833be11..ca34e01f1725 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase4.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase4.java
@@ -158,9 +158,9 @@ public abstract class DrawBase4 extends PaintOperation implements VariableSuppor
protected MapSerializer serialize(
MapSerializer serializer, String x1Name, String y1Name, String x2Name, String y2Name) {
return serializer
- .add(x1Name, mX1, mX1Value)
- .add(y1Name, mY1, mY1Value)
- .add(x2Name, mX2, mX2Value)
- .add(y2Name, mY2, mY2Value);
+ .add(x1Name, mX1Value, mX1)
+ .add(y1Name, mY1Value, mY1)
+ .add(x2Name, mX2Value, mX2)
+ .add(y2Name, mY2Value, mY2);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase6.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase6.java
index 75b87c04e810..ca0584d0ee73 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase6.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawBase6.java
@@ -173,11 +173,11 @@ public abstract class DrawBase6 extends PaintOperation implements VariableSuppor
String v5Name,
String v6Name) {
return serializer
- .add(v1Name, mV1, mValue1)
- .add(v2Name, mV2, mValue2)
- .add(v3Name, mV3, mValue3)
- .add(v4Name, mV4, mValue4)
- .add(v5Name, mV5, mValue5)
- .add(v6Name, mV6, mValue6);
+ .add(v1Name, mValue1, mV1)
+ .add(v2Name, mValue2, mV2)
+ .add(v3Name, mValue3, mV3)
+ .add(v4Name, mValue4, mV4)
+ .add(v5Name, mValue5, mV5)
+ .add(v6Name, mValue6, mV6);
}
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextAnchored.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextAnchored.java
index 5d0c43723ea1..92469d1834ba 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextAnchored.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextAnchored.java
@@ -26,11 +26,13 @@ import com.android.internal.widget.remotecompose.core.VariableSupport;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
/** Draw Text in Anchored to a point */
-public class DrawTextAnchored extends PaintOperation implements VariableSupport {
+public class DrawTextAnchored extends PaintOperation implements VariableSupport, Serializable {
private static final int OP_CODE = Operations.DRAW_TEXT_ANCHOR;
private static final String CLASS_NAME = "DrawTextAnchored";
int mTextID;
@@ -238,4 +240,16 @@ public class DrawTextAnchored extends PaintOperation implements VariableSupport
float y = Float.isNaN(mOutPanY) ? mOutY : mOutY + getVerticalOffset();
context.drawTextRun(mTextID, 0, -1, 0, 1, x, y, (mFlags & ANCHOR_TEXT_RTL) == 1);
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("textId", mTextID)
+ .add("x", mX, mOutX)
+ .add("y", mY, mOutY)
+ .add("panX", mPanX, mOutPanX)
+ .add("panY", mPanY, mOutPanY)
+ .add("flags", mFlags);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextOnPath.java b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextOnPath.java
index 3ab4a87c614c..1f7910ede4b5 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextOnPath.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/DrawTextOnPath.java
@@ -26,11 +26,13 @@ import com.android.internal.widget.remotecompose.core.VariableSupport;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
/** Draw text along a path. */
-public class DrawTextOnPath extends PaintOperation implements VariableSupport {
+public class DrawTextOnPath extends PaintOperation implements VariableSupport, Serializable {
private static final int OP_CODE = Operations.DRAW_TEXT_ON_PATH;
private static final String CLASS_NAME = "DrawTextOnPath";
int mPathId;
@@ -153,4 +155,14 @@ public class DrawTextOnPath extends PaintOperation implements VariableSupport {
public void paint(@NonNull PaintContext context) {
context.drawTextOnPath(mTextId, mPathId, mOutHOffset, mOutVOffset);
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("pathId", mPathId)
+ .add("textId", mTextId)
+ .add("vOffset", mVOffset, mOutVOffset)
+ .add("hOffset", mHOffset, mOutHOffset);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/FloatConstant.java b/core/java/com/android/internal/widget/remotecompose/core/operations/FloatConstant.java
index e04e691c312c..7f3c3ed6bcff 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/FloatConstant.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/FloatConstant.java
@@ -25,30 +25,32 @@ import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
-/** Operation to deal with Text data */
-public class FloatConstant extends Operation {
+/** Used to represent a float */
+public class FloatConstant extends Operation implements Serializable {
private static final int OP_CODE = Operations.DATA_FLOAT;
private static final String CLASS_NAME = "FloatConstant";
- public int mTextId;
+ public int mId;
public float mValue;
- public FloatConstant(int textId, float value) {
- this.mTextId = textId;
+ public FloatConstant(int id, float value) {
+ this.mId = id;
this.mValue = value;
}
@Override
public void write(@NonNull WireBuffer buffer) {
- apply(buffer, mTextId, mValue);
+ apply(buffer, mId, mValue);
}
@NonNull
@Override
public String toString() {
- return "FloatConstant[" + mTextId + "] = " + mValue;
+ return "FloatConstant[" + mId + "] = " + mValue;
}
/**
@@ -90,10 +92,10 @@ public class FloatConstant extends Operation {
* @param operations the list of operations that will be added to
*/
public static void read(@NonNull WireBuffer buffer, @NonNull List<Operation> operations) {
- int textId = buffer.readInt();
+ int id = buffer.readInt();
float value = buffer.readFloat();
- operations.add(new FloatConstant(textId, value));
+ operations.add(new FloatConstant(id, value));
}
/**
@@ -110,7 +112,7 @@ public class FloatConstant extends Operation {
@Override
public void apply(@NonNull RemoteContext context) {
- context.loadFloat(mTextId, mValue);
+ context.loadFloat(mId, mValue);
}
@NonNull
@@ -118,4 +120,9 @@ public class FloatConstant extends Operation {
public String deepToString(@NonNull String indent) {
return indent + toString();
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer.add("type", CLASS_NAME).add("id", mId).add("value", mValue);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/FloatExpression.java b/core/java/com/android/internal/widget/remotecompose/core/operations/FloatExpression.java
index e09745aa8546..c1fa898ec619 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/FloatExpression.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/FloatExpression.java
@@ -34,6 +34,9 @@ import com.android.internal.widget.remotecompose.core.operations.utilities.Anima
import com.android.internal.widget.remotecompose.core.operations.utilities.NanMap;
import com.android.internal.widget.remotecompose.core.operations.utilities.easing.FloatAnimation;
import com.android.internal.widget.remotecompose.core.operations.utilities.easing.SpringStopEngine;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
+import com.android.internal.widget.remotecompose.core.serialize.SerializeTags;
import java.util.List;
@@ -42,7 +45,7 @@ import java.util.List;
* like injecting the width of the component int draw rect As well as supporting generalized
* animation floats. The floats represent a RPN style calculator
*/
-public class FloatExpression extends Operation implements VariableSupport {
+public class FloatExpression extends Operation implements VariableSupport, Serializable {
private static final int OP_CODE = Operations.ANIMATED_FLOAT;
private static final String CLASS_NAME = "FloatExpression";
public int mId;
@@ -336,4 +339,14 @@ public class FloatExpression extends Operation implements VariableSupport {
public String deepToString(@NonNull String indent) {
return indent + toString();
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .addTags(SerializeTags.EXPRESSION)
+ .add("type", CLASS_NAME)
+ .add("id", mId)
+ .addFloatExpressionSrc("srcValues", mSrcValue)
+ .add("animation", mFloatAnimation);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/Header.java b/core/java/com/android/internal/widget/remotecompose/core/operations/Header.java
index 98c2745380d7..3d6316b67e8f 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/Header.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/Header.java
@@ -30,7 +30,11 @@ import com.android.internal.widget.remotecompose.core.RemoteComposeOperation;
import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
+import com.android.internal.widget.remotecompose.core.operations.utilities.IntMap;
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.List;
/**
@@ -42,16 +46,75 @@ import java.util.List;
public class Header extends Operation implements RemoteComposeOperation {
private static final int OP_CODE = Operations.HEADER;
private static final String CLASS_NAME = "Header";
+ private static final int MAGIC_NUMBER = 0x048C0000; // to uniquly identify the protocol
int mMajorVersion;
int mMinorVersion;
int mPatchVersion;
- int mWidth;
- int mHeight;
+ int mWidth = 256;
+ int mHeight = 256;
- float mDensity;
- long mCapabilities;
+ float mDensity = 3;
+ long mCapabilities = 0;
+ private IntMap<Object> mProperties;
+
+ /**
+ * Get a property on the header
+ *
+ * @param property the property to get
+ * @return the value of the property
+ */
+ public Object get(short property) {
+ return mProperties.get(property);
+ }
+
+ /** the width of the document */
+ public static final short DOC_WIDTH = 5;
+
+ /** The height of the document */
+ public static final short DOC_HEIGHT = 6;
+
+ /** The density at generation */
+ public static final short DOC_DENSITY_AT_GENERATION = 7;
+
+ /** The desired FPS for the document */
+ public static final short DOC_DESIRED_FPS = 8;
+
+ /** The description of the contents of the document */
+ public static final short DOC_CONTENT_DESCRIPTION = 9;
+
+ /** The source of the document */
+ public static final short DOC_SOURCE = 11;
+
+ /** The object is an integer */
+ private static final short DATA_TYPE_INT = 0;
+
+ /** The object is an float */
+ private static final short DATA_TYPE_FLOAT = 1;
+
+ /** The object is an LONG */
+ private static final short DATA_TYPE_LONG = 2;
+
+ /** The object is an UTF-8 encoded string */
+ private static final short DATA_TYPE_STRING = 3;
+
+ private static final short[] KEYS = {
+ DOC_WIDTH,
+ DOC_HEIGHT,
+ DOC_DENSITY_AT_GENERATION,
+ DOC_DESIRED_FPS,
+ DOC_CONTENT_DESCRIPTION,
+ DOC_SOURCE
+ };
+ private static final String[] KEY_NAMES = {
+ "DOC_WIDTH",
+ "DOC_HEIGHT",
+ "DOC_DENSITY_AT_GENERATION",
+ "DOC_DESIRED_FPS",
+ "DOC_CONTENT_DESCRIPTION",
+ "DOC_SOURCE"
+ };
/**
* It encodes the version of the document (following semantic versioning) as well as the
@@ -82,6 +145,60 @@ public class Header extends Operation implements RemoteComposeOperation {
this.mCapabilities = capabilities;
}
+ /**
+ * @param majorVersion the major version of the RemoteCompose document API
+ * @param minorVersion the minor version of the RemoteCompose document API
+ * @param patchVersion the patch version of the RemoteCompose document API
+ * @param properties the properties of the document
+ */
+ public Header(int majorVersion, int minorVersion, int patchVersion, IntMap<Object> properties) {
+ this.mMajorVersion = majorVersion;
+ this.mMinorVersion = minorVersion;
+ this.mPatchVersion = patchVersion;
+ if (properties != null) {
+ this.mProperties = properties;
+ this.mWidth = getInt(DOC_WIDTH, 256);
+ this.mHeight = getInt(DOC_HEIGHT, 256);
+ this.mDensity = getFloat(DOC_DENSITY_AT_GENERATION, 0);
+ }
+ }
+
+ private int getInt(int key, int defaultValue) {
+ Integer value = (Integer) mProperties.get(key);
+ if (value != null) {
+ return value;
+ } else {
+ return defaultValue;
+ }
+ }
+
+ private long getLong(int key, long defaultValue) {
+ Long value = (Long) mProperties.get(key);
+ if (value != null) {
+ return value;
+ } else {
+ return defaultValue;
+ }
+ }
+
+ private float getFloat(int key, float defaultValue) {
+ Float value = (Float) mProperties.get(key);
+ if (value != null) {
+ return value;
+ } else {
+ return defaultValue;
+ }
+ }
+
+ private String getString(int key, String defaultValue) {
+ String value = (String) mProperties.get(key);
+ if (value != null) {
+ return value;
+ } else {
+ return defaultValue;
+ }
+ }
+
@Override
public void write(@NonNull WireBuffer buffer) {
apply(buffer, mWidth, mHeight, mDensity, mCapabilities);
@@ -90,6 +207,16 @@ public class Header extends Operation implements RemoteComposeOperation {
@NonNull
@Override
public String toString() {
+ String prop = "";
+ if (mProperties != null) {
+ for (int i = 0; i < KEYS.length; i++) {
+ Object p = mProperties.get(KEYS[i]);
+ if (p != null) {
+ prop += "\n " + KEY_NAMES[i] + " " + p.toString();
+ }
+ }
+ return "HEADER v" + mMajorVersion + "." + mMinorVersion + "." + mPatchVersion + prop;
+ }
return "HEADER v"
+ mMajorVersion
+ "."
@@ -102,12 +229,20 @@ public class Header extends Operation implements RemoteComposeOperation {
+ mHeight
+ " ["
+ mCapabilities
- + "]";
+ + "]"
+ + prop;
}
@Override
public void apply(@NonNull RemoteContext context) {
- context.header(mMajorVersion, mMinorVersion, mPatchVersion, mWidth, mHeight, mCapabilities);
+ context.header(
+ mMajorVersion,
+ mMinorVersion,
+ mPatchVersion,
+ mWidth,
+ mHeight,
+ mCapabilities,
+ mProperties);
}
@NonNull
@@ -157,22 +292,44 @@ public class Header extends Operation implements RemoteComposeOperation {
}
/**
- * Read this operation and add it to the list of operations
+ * Apply the header to the wire buffer
*
- * @param buffer the buffer to read
- * @param operations the list of operations that will be added to
+ * @param buffer
*/
- public static void read(@NonNull WireBuffer buffer, @NonNull List<Operation> operations) {
- int majorVersion = buffer.readInt();
- int minorVersion = buffer.readInt();
- int patchVersion = buffer.readInt();
- int width = buffer.readInt();
- int height = buffer.readInt();
- // float density = buffer.readFloat();
- float density = 1f;
- long capabilities = buffer.readLong();
- Header header =
- new Header(
+ public static void apply(@NonNull WireBuffer buffer, short[] type, Object[] value) {
+ buffer.start(OP_CODE);
+ buffer.writeInt(MAJOR_VERSION | MAGIC_NUMBER); // major version number of the protocol
+ buffer.writeInt(MINOR_VERSION); // minor version number of the protocol
+ buffer.writeInt(PATCH_VERSION); // patch version number of the protocol
+ buffer.writeInt(type.length);
+ writeMap(buffer, type, value);
+ }
+
+ /**
+ * @param is the stream to read from
+ * @return the header
+ * @throws IOException if there is an error reading the header
+ */
+ public static Header readDirect(InputStream is) throws IOException {
+ DataInputStream stream = new DataInputStream(is);
+ try {
+
+ int type = stream.readByte();
+
+ if (type != OP_CODE) {
+ throw new IOException("Invalid header " + type + " != " + OP_CODE);
+ }
+ int majorVersion = stream.readInt();
+ int minorVersion = stream.readInt();
+ int patchVersion = stream.readInt();
+
+ if (majorVersion < 0x10000) {
+ int width = stream.readInt();
+ int height = stream.readInt();
+ // float density = is.read();
+ float density = 1f;
+ long capabilities = stream.readLong();
+ return new Header(
majorVersion,
minorVersion,
patchVersion,
@@ -180,7 +337,173 @@ public class Header extends Operation implements RemoteComposeOperation {
height,
density,
capabilities);
- operations.add(header);
+ }
+
+ if ((majorVersion & 0xFFFF0000) != MAGIC_NUMBER) {
+ throw new IOException(
+ "Invalid header MAGIC_NUMBER "
+ + (majorVersion & 0xFFFF0000)
+ + " != "
+ + MAGIC_NUMBER);
+ }
+ majorVersion &= 0xFFFF;
+ int len = stream.readInt();
+ short[] types = new short[len];
+ Object[] values = new Object[len];
+ readMap(stream, types, values);
+ IntMap<Object> map = new IntMap<>();
+ for (int i = 0; i < len; i++) {
+ map.put(types[i], values[i]);
+ }
+ return new Header(majorVersion, minorVersion, patchVersion, map);
+
+ } finally {
+ stream.close();
+ }
+ }
+
+ /**
+ * Read this operation and add it to the list of operations
+ *
+ * @param stream the buffer to read
+ * @param types the list of types that will be populated
+ * @param values the list of values that will be populated
+ */
+ private static void readMap(DataInputStream stream, short[] types, Object[] values)
+ throws IOException {
+ for (int i = 0; i < types.length; i++) {
+ short tag = (short) stream.readShort();
+ int itemLen = stream.readShort();
+ int dataType = tag >> 10;
+ types[i] = (short) (tag & 0x3F);
+ Object value;
+ switch (dataType) {
+ case DATA_TYPE_INT:
+ values[i] = stream.readInt();
+ break;
+ case DATA_TYPE_FLOAT:
+ values[i] = stream.readFloat();
+ break;
+ case DATA_TYPE_LONG:
+ values[i] = stream.readLong();
+ break;
+ case DATA_TYPE_STRING:
+ int slen = stream.readInt();
+ byte[] data = new byte[slen];
+ stream.readFully(data);
+ values[i] = new String(data);
+ break;
+ }
+ }
+ }
+
+ /**
+ * Read this operation and add it to the list of operations
+ *
+ * @param buffer the buffer to read
+ * @param operations the list of operations that will be added to
+ */
+ public static void read(@NonNull WireBuffer buffer, @NonNull List<Operation> operations) {
+ int majorVersion = buffer.readInt();
+ int minorVersion = buffer.readInt();
+ int patchVersion = buffer.readInt();
+ if (majorVersion < 0x10000) {
+ int width = buffer.readInt();
+ int height = buffer.readInt();
+ // float density = buffer.readFloat();
+ float density = 1f;
+ long capabilities = buffer.readLong();
+ Header header =
+ new Header(
+ majorVersion,
+ minorVersion,
+ patchVersion,
+ width,
+ height,
+ density,
+ capabilities);
+ operations.add(header);
+ } else {
+ majorVersion &= 0xFFFF;
+ int length = buffer.readInt();
+ short[] types = new short[length];
+ Object[] values = new Object[length];
+ readMap(buffer, types, values);
+ IntMap<Object> map = new IntMap<>();
+ for (int i = 0; i < length; i++) {
+ map.put(types[i], values[i]);
+ }
+ Header header = new Header(majorVersion, minorVersion, patchVersion, map);
+ operations.add(header);
+ }
+ }
+
+ /**
+ * Read this operation and add it to the list of operations
+ *
+ * @param buffer the buffer to read
+ * @param types the list of types that will be populated
+ * @param values the list of values that will be populated
+ */
+ private static void readMap(@NonNull WireBuffer buffer, short[] types, Object[] values) {
+ for (int i = 0; i < types.length; i++) {
+ short tag = (short) buffer.readShort();
+ int itemLen = buffer.readShort();
+ int dataType = tag >> 10;
+ types[i] = (short) (tag & 0x3F);
+ Object value;
+ switch (dataType) {
+ case DATA_TYPE_INT:
+ values[i] = buffer.readInt();
+ break;
+ case DATA_TYPE_FLOAT:
+ values[i] = buffer.readFloat();
+ break;
+ case DATA_TYPE_LONG:
+ values[i] = buffer.readLong();
+ break;
+ case DATA_TYPE_STRING:
+ values[i] = buffer.readUTF8();
+ break;
+ }
+ }
+ }
+
+ /**
+ * Write the map of values to the buffer
+ *
+ * @param buffer the buffer to read
+ * @param types the list of types that will be written
+ * @param values the list of values that will be written
+ */
+ private static void writeMap(@NonNull WireBuffer buffer, short[] types, Object[] values) {
+ for (int i = 0; i < types.length; i++) {
+ short tag = types[i];
+ if (values[i] instanceof String) {
+ tag = (short) (tag | (DATA_TYPE_STRING << 10));
+ buffer.writeShort(tag);
+ String str = (String) values[i];
+ byte[] data = str.getBytes();
+ buffer.writeShort((data.length + 4));
+ buffer.writeBuffer(data);
+ } else if (values[i] instanceof Integer) {
+ tag = (short) (tag | (DATA_TYPE_INT << 10));
+ buffer.writeShort(tag);
+ buffer.writeShort(4);
+ buffer.writeInt((Integer) values[i]);
+ } else if (values[i] instanceof Float) {
+ tag = (short) (tag | (DATA_TYPE_FLOAT << 10));
+ buffer.writeShort(tag);
+ buffer.writeShort(4);
+
+ buffer.writeFloat((float) values[i]);
+ } else if (values[i] instanceof Long) {
+ tag = (short) (tag | (DATA_TYPE_LONG << 10));
+ buffer.writeShort(tag);
+ buffer.writeShort(8);
+ buffer.writeLong((Long) values[i]);
+ }
+ }
}
/**
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/IntegerExpression.java b/core/java/com/android/internal/widget/remotecompose/core/operations/IntegerExpression.java
index f04f30dc62fb..2a5260c0c9b1 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/IntegerExpression.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/IntegerExpression.java
@@ -29,6 +29,9 @@ import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
import com.android.internal.widget.remotecompose.core.operations.utilities.IntegerExpressionEvaluator;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
+import com.android.internal.widget.remotecompose.core.serialize.SerializeTags;
import java.util.Arrays;
import java.util.List;
@@ -38,7 +41,7 @@ import java.util.List;
* like injecting the width of the component int draw rect As well as supporting generalized
* animation floats. The floats represent a RPN style calculator
*/
-public class IntegerExpression extends Operation implements VariableSupport {
+public class IntegerExpression extends Operation implements VariableSupport, Serializable {
private static final int OP_CODE = Operations.INTEGER_EXPRESSION;
private static final String CLASS_NAME = "IntegerExpression";
public int mId;
@@ -225,4 +228,14 @@ public class IntegerExpression extends Operation implements VariableSupport {
public static boolean isId(int mask, int i, int value) {
return ((1 << i) & mask) != 0 && value < IntegerExpressionEvaluator.OFFSET;
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .addTags(SerializeTags.EXPRESSION)
+ .add("type", CLASS_NAME)
+ .add("id", mId)
+ .add("mask", mId)
+ .addIntExpressionSrc("srcValues", mSrcValue, mMask);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/NamedVariable.java b/core/java/com/android/internal/widget/remotecompose/core/operations/NamedVariable.java
index dde632e0c346..96628fd51225 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/NamedVariable.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/NamedVariable.java
@@ -26,11 +26,13 @@ import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
/** Operation to deal with Text data */
-public class NamedVariable extends Operation {
+public class NamedVariable extends Operation implements Serializable {
private static final int OP_CODE = Operations.NAMED_VARIABLE;
private static final String CLASS_NAME = "NamedVariable";
public final int mVarId;
@@ -135,4 +137,28 @@ public class NamedVariable extends Operation {
public String deepToString(@NonNull String indent) {
return indent + toString();
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("varId", mVarId)
+ .add("varName", mVarName)
+ .add("varType", typeToString());
+ }
+
+ private String typeToString() {
+ switch (mVarType) {
+ case COLOR_TYPE:
+ return "COLOR_TYPE";
+ case FLOAT_TYPE:
+ return "FLOAT_TYPE";
+ case STRING_TYPE:
+ return "STRING_TYPE";
+ case IMAGE_TYPE:
+ return "IMAGE_TYPE";
+ default:
+ return "INVALID_TYPE";
+ }
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/PaintData.java b/core/java/com/android/internal/widget/remotecompose/core/operations/PaintData.java
index f756b76b86c3..8389aa707ee6 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/PaintData.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/PaintData.java
@@ -29,11 +29,13 @@ import com.android.internal.widget.remotecompose.core.VariableSupport;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.operations.paint.PaintBundle;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
/** Paint data operation */
-public class PaintData extends PaintOperation implements VariableSupport {
+public class PaintData extends PaintOperation implements VariableSupport, Serializable {
private static final int OP_CODE = Operations.PAINT_VALUES;
private static final String CLASS_NAME = "PaintData";
@NonNull public PaintBundle mPaintData = new PaintBundle();
@@ -126,4 +128,9 @@ public class PaintData extends PaintOperation implements VariableSupport {
public void paint(@NonNull PaintContext context) {
context.applyPaint(mPaintData);
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer.add("type", CLASS_NAME).add("paintBundle", mPaintData);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/PathAppend.java b/core/java/com/android/internal/widget/remotecompose/core/operations/PathAppend.java
index e7cce03f0c4b..8f353ce4a26b 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/PathAppend.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/PathAppend.java
@@ -30,11 +30,13 @@ import com.android.internal.widget.remotecompose.core.VariableSupport;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.Arrays;
import java.util.List;
-public class PathAppend extends PaintOperation implements VariableSupport {
+public class PathAppend extends PaintOperation implements VariableSupport, Serializable {
private static final int OP_CODE = Operations.PATH_ADD;
private static final String CLASS_NAME = "PathAppend";
int mInstanceId;
@@ -253,4 +255,12 @@ public class PathAppend extends PaintOperation implements VariableSupport {
}
return str.toString();
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("id", mInstanceId)
+ .add("path", pathString(mFloatPath));
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/PathCreate.java b/core/java/com/android/internal/widget/remotecompose/core/operations/PathCreate.java
index 1f76639b1b1f..7aa3390b53ee 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/PathCreate.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/PathCreate.java
@@ -29,11 +29,13 @@ import com.android.internal.widget.remotecompose.core.VariableSupport;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.Arrays;
import java.util.List;
-public class PathCreate extends PaintOperation implements VariableSupport {
+public class PathCreate extends PaintOperation implements VariableSupport, Serializable {
private static final int OP_CODE = Operations.PATH_CREATE;
private static final String CLASS_NAME = "PathCreate";
int mInstanceId;
@@ -237,4 +239,12 @@ public class PathCreate extends PaintOperation implements VariableSupport {
public void apply(@NonNull RemoteContext context) {
context.loadPathData(mInstanceId, mOutputPath);
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("id", mInstanceId)
+ .add("path", pathString(mFloatPath));
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/PathTween.java b/core/java/com/android/internal/widget/remotecompose/core/operations/PathTween.java
index 65adfeabefa6..c5add57d4dd0 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/PathTween.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/PathTween.java
@@ -29,11 +29,13 @@ import com.android.internal.widget.remotecompose.core.VariableSupport;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
/** Operation to deal with Path data */
-public class PathTween extends PaintOperation implements VariableSupport {
+public class PathTween extends PaintOperation implements VariableSupport, Serializable {
private static final int OP_CODE = Operations.PATH_TWEEN;
private static final String CLASS_NAME = "PathTween";
public int mOutId;
@@ -155,4 +157,14 @@ public class PathTween extends PaintOperation implements VariableSupport {
public void paint(PaintContext context) {
context.tweenPath(mOutId, mPathId1, mPathId2, mTweenOut);
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("outId", mOutId)
+ .add("pathId1", mPathId1)
+ .add("pathId2", mPathId2)
+ .add("tween", mTween, mTweenOut);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/RootContentDescription.java b/core/java/com/android/internal/widget/remotecompose/core/operations/RootContentDescription.java
index c1ddf63264fa..a6a8a810d2ad 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/RootContentDescription.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/RootContentDescription.java
@@ -25,12 +25,14 @@ import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
import com.android.internal.widget.remotecompose.core.semantics.AccessibleComponent;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
/** Describe a content description for the document */
public class RootContentDescription extends Operation
- implements RemoteComposeOperation, AccessibleComponent {
+ implements RemoteComposeOperation, AccessibleComponent, Serializable {
private static final int OP_CODE = Operations.ROOT_CONTENT_DESCRIPTION;
private static final String CLASS_NAME = "RootContentDescription";
int mContentDescription;
@@ -128,4 +130,9 @@ public class RootContentDescription extends Operation
.description("Content description of root")
.field(DocumentedOperation.INT, "id", "id of Int");
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer.add("type", CLASS_NAME).add("contentDescriptionId", mContentDescription);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/ShaderData.java b/core/java/com/android/internal/widget/remotecompose/core/operations/ShaderData.java
index 46a32905b96c..5f6162b68e9e 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/ShaderData.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/ShaderData.java
@@ -32,6 +32,8 @@ import com.android.internal.widget.remotecompose.core.VariableSupport;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.Arrays;
import java.util.HashMap;
@@ -41,7 +43,7 @@ import java.util.List;
* Operation to deal with bitmap data On getting an Image during a draw call the bitmap is
* compressed and saved in playback the image is decompressed
*/
-public class ShaderData extends Operation implements VariableSupport {
+public class ShaderData extends Operation implements VariableSupport, Serializable {
private static final int OP_CODE = Operations.DATA_SHADER;
private static final String CLASS_NAME = "ShaderData";
int mShaderTextId; // the actual text of a shader
@@ -384,4 +386,15 @@ public class ShaderData extends Operation implements VariableSupport {
public void enable(boolean shaderValid) {
mShaderValid = shaderValid;
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("shaderTextId", mShaderTextId)
+ .add("shaderID", mShaderID)
+ .add("uniformRawFloatMap", mUniformRawFloatMap)
+ .add("uniformFloatMap", mUniformFloatMap)
+ .add("uniformBitmapMap", mUniformBitmapMap);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TextAttribute.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TextAttribute.java
index 45cced3f8b45..3e72995de9db 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TextAttribute.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TextAttribute.java
@@ -27,11 +27,13 @@ import com.android.internal.widget.remotecompose.core.PaintContext;
import com.android.internal.widget.remotecompose.core.PaintOperation;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
/** Operation to Measure Text data */
-public class TextAttribute extends PaintOperation {
+public class TextAttribute extends PaintOperation implements Serializable {
private static final int OP_CODE = Operations.ATTRIBUTE_TEXT;
private static final String CLASS_NAME = "TextMeasure";
public int mId;
@@ -167,4 +169,34 @@ public class TextAttribute extends PaintOperation {
break;
}
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("id", mId)
+ .add("textId", mTextId)
+ .add("measureType", typeToString());
+ }
+
+ private String typeToString() {
+ switch (mType) {
+ case MEASURE_WIDTH:
+ return "MEASURE_WIDTH";
+ case MEASURE_HEIGHT:
+ return "MEASURE_HEIGHT";
+ case MEASURE_LEFT:
+ return "MEASURE_LEFT";
+ case MEASURE_RIGHT:
+ return "MEASURE_RIGHT";
+ case MEASURE_TOP:
+ return "MEASURE_TOP";
+ case MEASURE_BOTTOM:
+ return "MEASURE_BOTTOM";
+ case TEXT_LENGTH:
+ return "TEXT_LENGTH";
+ default:
+ return "INVALID_TYPE";
+ }
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TextData.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TextData.java
index 5788d8f4da64..419e6d074479 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TextData.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TextData.java
@@ -27,11 +27,13 @@ import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
import com.android.internal.widget.remotecompose.core.operations.utilities.StringSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
/** Operation to deal with Text data */
-public class TextData extends Operation implements SerializableToString {
+public class TextData extends Operation implements SerializableToString, Serializable {
private static final int OP_CODE = Operations.DATA_TEXT;
private static final String CLASS_NAME = "TextData";
public final int mTextId;
@@ -131,4 +133,9 @@ public class TextData extends Operation implements SerializableToString {
private String getSerializedName() {
return "DATA_TEXT";
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer.add("type", CLASS_NAME).add("textId", mTextId).add("text", mText);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TextFromFloat.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TextFromFloat.java
index cc0ff025f09b..6b2f49be76f0 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TextFromFloat.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TextFromFloat.java
@@ -28,6 +28,8 @@ import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
import com.android.internal.widget.remotecompose.core.operations.utilities.StringUtils;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
@@ -36,7 +38,7 @@ import java.util.List;
* [command][textID][before,after][flags] before and after define number of digits before and after
* the decimal point
*/
-public class TextFromFloat extends Operation implements VariableSupport {
+public class TextFromFloat extends Operation implements VariableSupport, Serializable {
private static final int OP_CODE = Operations.TEXT_FROM_FLOAT;
private static final String CLASS_NAME = "TextFromFloat";
public int mTextId;
@@ -209,4 +211,15 @@ public class TextFromFloat extends Operation implements VariableSupport {
public String deepToString(@NonNull String indent) {
return indent + toString();
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("textId", mTextId)
+ .add("value", mValue, mOutValue)
+ .add("digitsBefore", mDigitsBefore)
+ .add("digitsAfter", mDigitsAfter)
+ .add("flags", mFlags);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookup.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookup.java
index dceb8b67ec3a..e8865c26db12 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookup.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookup.java
@@ -26,6 +26,8 @@ import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.VariableSupport;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
@@ -34,7 +36,7 @@ import java.util.List;
* [command][textID][before,after][flags] before and after define number of digits before and after
* the decimal point
*/
-public class TextLookup extends Operation implements VariableSupport {
+public class TextLookup extends Operation implements VariableSupport, Serializable {
private static final int OP_CODE = Operations.TEXT_LOOKUP;
private static final String CLASS_NAME = "TextFromFloat";
public int mTextId;
@@ -150,4 +152,13 @@ public class TextLookup extends Operation implements VariableSupport {
public String deepToString(@NonNull String indent) {
return indent + toString();
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("textId", mTextId)
+ .add("dataSetId", mDataSetId)
+ .add("indexId", mIndex, mOutIndex);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookupInt.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookupInt.java
index 823b70656c86..de2025569d46 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookupInt.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TextLookupInt.java
@@ -26,11 +26,13 @@ import com.android.internal.widget.remotecompose.core.VariableSupport;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
/** Operation convert int index of a list to text */
-public class TextLookupInt extends Operation implements VariableSupport {
+public class TextLookupInt extends Operation implements VariableSupport, Serializable {
private static final int OP_CODE = Operations.TEXT_LOOKUP_INT;
private static final String CLASS_NAME = "TextFromINT";
public int mTextId;
@@ -143,4 +145,13 @@ public class TextLookupInt extends Operation implements VariableSupport {
public String deepToString(@NonNull String indent) {
return indent + toString();
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("textId", mTextId)
+ .add("dataSetId", mDataSetId)
+ .add("indexId", mIndex, mOutIndex);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TextMerge.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TextMerge.java
index d69561566b56..262916dd9d0c 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TextMerge.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TextMerge.java
@@ -25,11 +25,13 @@ import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
/** Operation to deal with Text data */
-public class TextMerge extends Operation {
+public class TextMerge extends Operation implements Serializable {
private static final int OP_CODE = Operations.TEXT_MERGE;
private static final String CLASS_NAME = "TextMerge";
public int mTextId;
@@ -126,4 +128,13 @@ public class TextMerge extends Operation {
public String deepToString(@NonNull String indent) {
return indent + toString();
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("id", mTextId)
+ .add("leftId", mSrcId1)
+ .add("rightId", mSrcId2);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/TouchExpression.java b/core/java/com/android/internal/widget/remotecompose/core/operations/TouchExpression.java
index 997628140c46..2591a4c39778 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/TouchExpression.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/TouchExpression.java
@@ -35,6 +35,8 @@ import com.android.internal.widget.remotecompose.core.operations.layout.RootLayo
import com.android.internal.widget.remotecompose.core.operations.utilities.AnimatedFloatExpression;
import com.android.internal.widget.remotecompose.core.operations.utilities.NanMap;
import com.android.internal.widget.remotecompose.core.operations.utilities.touch.VelocityEasing;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.Arrays;
import java.util.List;
@@ -44,7 +46,8 @@ import java.util.List;
* touch behaviours. Including animating to Notched, positions. and tweaking the dynamics of the
* animation.
*/
-public class TouchExpression extends Operation implements VariableSupport, TouchListener {
+public class TouchExpression extends Operation
+ implements VariableSupport, TouchListener, Serializable {
private static final int OP_CODE = Operations.TOUCH_EXPRESSION;
private static final String CLASS_NAME = "TouchExpression";
private float mDefValue;
@@ -709,4 +712,16 @@ public class TouchExpression extends Operation implements VariableSupport, Touch
public String deepToString(@NonNull String indent) {
return indent + toString();
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("id", mId)
+ .add("mDefValue", mDefValue, mOutDefValue)
+ .add("min", mMin, mOutMin)
+ .add("max", mMax, mOutMax)
+ .add("mode", mMode)
+ .addFloatExpressionSrc("srcExp", mSrcExp);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ImpulseProcess.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ImpulseProcess.java
index f896f3d8ee9c..8c9dd76c9ed5 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ImpulseProcess.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/ImpulseProcess.java
@@ -25,12 +25,15 @@ import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.VariableSupport;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.ArrayList;
import java.util.List;
/** Represents the repeating part of an Impulse. */
-public class ImpulseProcess extends PaintOperation implements VariableSupport, Container {
+public class ImpulseProcess extends PaintOperation
+ implements VariableSupport, Container, Serializable {
private static final int OP_CODE = Operations.IMPULSE_PROCESS;
private static final String CLASS_NAME = "ImpulseProcess";
@@ -151,4 +154,9 @@ public class ImpulseProcess extends PaintOperation implements VariableSupport, C
public int estimateIterations() {
return 1;
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer.add("type", CLASS_NAME).add("list", mList);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/LoopOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/LoopOperation.java
index 0f4cf562eae6..2b63cf246555 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/LoopOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/LoopOperation.java
@@ -27,12 +27,16 @@ import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
import com.android.internal.widget.remotecompose.core.operations.Utils;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.ArrayList;
import java.util.List;
/** Represents a loop of operations */
-public class LoopOperation extends PaintOperation implements Container, VariableSupport {
+public class LoopOperation extends PaintOperation
+ implements Container, VariableSupport, Serializable {
+ private static final String CLASS_NAME = "LoopOperation";
private static final int OP_CODE = Operations.LOOP_START;
@@ -198,4 +202,16 @@ public class LoopOperation extends PaintOperation implements Container, Variable
}
return 10; // this is a generic estmate if the values are variables;
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", CLASS_NAME)
+ .add("indexVariableId", mIndexVariableId)
+ .add("until", mUntil, mUntilOut)
+ .add("from", mFrom, mFromOut)
+ .add("step", mStep, mStepOut)
+ .add("mUntilOut", mUntilOut)
+ .add("list", mList);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/TextLayout.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/TextLayout.java
index 1cfb50724e0b..d5db74b5ca51 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/TextLayout.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/managers/TextLayout.java
@@ -209,7 +209,7 @@ public class TextLayout extends LayoutManager implements VariableSupport, Access
mPaint.setColor(mColor);
mPaint.setTextSize(mFontSize);
mPaint.setTextStyle(mType, (int) mFontWeight, mFontStyle == 1);
- context.applyPaint(mPaint);
+ context.replacePaint(mPaint);
if (mCachedString == null) {
return;
}
@@ -330,7 +330,7 @@ public class TextLayout extends LayoutManager implements VariableSupport, Access
mPaint.setTextSize(mFontSize);
mPaint.setTextStyle(mType, (int) mFontWeight, mFontStyle == 1);
mPaint.setColor(mColor);
- context.applyPaint(mPaint);
+ context.replacePaint(mPaint);
float[] bounds = new float[4];
if (mCachedString == null) {
return;
@@ -343,7 +343,7 @@ public class TextLayout extends LayoutManager implements VariableSupport, Access
flags |= PaintContext.TEXT_COMPLEX;
}
context.getTextBounds(mTextId, 0, mCachedString.length(), flags, bounds);
- if (bounds[2] - bounds[1] > maxWidth) {
+ if (bounds[2] - bounds[1] > maxWidth && mMaxLines > 1) {
mComputedTextLayout =
context.layoutComplexText(
mTextId,
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BackgroundModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BackgroundModifierOperation.java
index dc1b875f0f9c..fd5f8c9cdbe7 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BackgroundModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BackgroundModifierOperation.java
@@ -196,7 +196,7 @@ public class BackgroundModifierOperation extends DecoratorModifierOperation {
mPaint.reset();
mPaint.setStyle(PaintBundle.STYLE_FILL);
mPaint.setColor(mR, mG, mB, mA);
- context.applyPaint(mPaint);
+ context.replacePaint(mPaint);
if (mShapeType == ShapeType.RECTANGLE) {
context.drawRect(0f, 0f, mWidth, mHeight);
} else if (mShapeType == ShapeType.CIRCLE) {
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BorderModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BorderModifierOperation.java
index 3acbd88329c2..e5f318307a75 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BorderModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/BorderModifierOperation.java
@@ -252,7 +252,7 @@ public class BorderModifierOperation extends DecoratorModifierOperation {
paint.setColor(mR, mG, mB, mA);
paint.setStrokeWidth(mBorderWidth);
paint.setStyle(PaintBundle.STYLE_STROKE);
- context.applyPaint(paint);
+ context.replacePaint(paint);
if (mShapeType == ShapeType.RECTANGLE) {
context.drawRect(0f, 0f, mWidth, mHeight);
} else {
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/RippleModifierOperation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/RippleModifierOperation.java
index d3004aa73a77..69ace8478e08 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/RippleModifierOperation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/layout/modifiers/RippleModifierOperation.java
@@ -126,7 +126,7 @@ public class RippleModifierOperation extends DecoratorModifierOperation implemen
float radius = Math.max(mWidth, mHeight) * tweenRadius;
mPaint.setColor(paintedColor);
- context.applyPaint(mPaint);
+ context.replacePaint(mPaint);
context.clipRect(0f, 0f, mWidth, mHeight);
context.drawCircle(mAnimateRippleX, mAnimateRippleY, radius);
context.restorePaint();
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/paint/PaintBundle.java b/core/java/com/android/internal/widget/remotecompose/core/operations/paint/PaintBundle.java
index 4c7f503e0bf8..0f17b114133d 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/paint/PaintBundle.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/paint/PaintBundle.java
@@ -15,6 +15,8 @@
*/
package com.android.internal.widget.remotecompose.core.operations.paint;
+import static com.android.internal.widget.remotecompose.core.serialize.MapSerializer.orderedOf;
+
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -23,11 +25,16 @@ import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.VariableSupport;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.operations.Utils;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
/** Paint Bundle represents a delta of changes to a paint object */
-public class PaintBundle {
+public class PaintBundle implements Serializable {
@NonNull int[] mArray = new int[200];
@Nullable int[] mOutArray = null;
int mPos = 0;
@@ -337,7 +344,6 @@ public class PaintBundle {
}
}
}
-
len = array[ret++]; // stops
for (int j = 0; j < len; j++) {
registerFloat(array[ret++], context, support);
@@ -1239,4 +1245,201 @@ public class PaintBundle {
return ret;
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer.add("type", "PaintBundle");
+ List<Map<String, Object>> list = new ArrayList<>();
+ int i = 0;
+ while (i < mPos) {
+ int cmd = mArray[i++];
+ int type = cmd & 0xFFFF;
+ switch (type) {
+ case TEXT_SIZE:
+ list.add(orderedOf("type", "TextSize", "size", getVariable(mArray[i++])));
+ break;
+ case TYPEFACE:
+ int style = (cmd >> 16);
+ float weight = (float) (style & 0x3ff);
+ boolean italic = (style >> 10) > 0;
+ int fontFamily = mArray[i++];
+ list.add(orderedOf("type", "FontFamily", "fontFamily", fontFamily));
+ list.add(orderedOf("type", "FontWeight", "weight", weight));
+ list.add(orderedOf("type", "TypeFace", "italic", italic));
+ break;
+ case COLOR:
+ list.add(orderedOf("type", "Color", "color", colorInt(mArray[i++])));
+ break;
+ case COLOR_ID:
+ list.add(orderedOf("type", "ColorId", "id", mArray[i++]));
+ break;
+ case STROKE_WIDTH:
+ list.add(orderedOf("type", "StrokeWidth", "width", getVariable(mArray[i++])));
+ break;
+ case STROKE_MITER:
+ list.add(orderedOf("type", "StrokeMiter", "miter", getVariable(mArray[i++])));
+ break;
+ case STROKE_CAP:
+ list.add(orderedOf("type", "StrokeCap", "cap", cmd >> 16));
+ break;
+ case STYLE:
+ list.add(orderedOf("type", "Style", "style", cmd >> 16));
+ break;
+ case COLOR_FILTER:
+ list.add(
+ orderedOf(
+ "type",
+ "ColorFilter",
+ "color",
+ colorInt(mArray[i++]),
+ "mode",
+ blendModeString(cmd >> 16)));
+ break;
+ case COLOR_FILTER_ID:
+ list.add(
+ orderedOf(
+ "type",
+ "ColorFilterID",
+ "id",
+ mArray[i++],
+ "mode",
+ blendModeString(cmd >> 16)));
+ break;
+ case CLEAR_COLOR_FILTER:
+ list.add(orderedOf("type", "ClearColorFilter"));
+ break;
+ case SHADER:
+ list.add(orderedOf("type", "Shader", "id", mArray[i++]));
+ break;
+ case ALPHA:
+ list.add(orderedOf("type", "Alpha", "alpha", getVariable(mArray[i++])));
+ break;
+ case IMAGE_FILTER_QUALITY:
+ list.add(orderedOf("type", "ImageFilterQuality", "quality", cmd >> 16));
+ break;
+ case BLEND_MODE:
+ list.add(orderedOf("type", "BlendMode", "mode", blendModeString(cmd >> 16)));
+ break;
+ case FILTER_BITMAP:
+ list.add(orderedOf("type", "FilterBitmap", "enabled", !(cmd >> 16 == 0)));
+ break;
+ case STROKE_JOIN:
+ list.add(orderedOf("type", "StrokeJoin", "strokeJoin", cmd >> 16));
+ break;
+ case ANTI_ALIAS:
+ list.add(orderedOf("type", "AntiAlias", "enabled", !(cmd >> 16 == 0)));
+ break;
+ case GRADIENT:
+ i = serializeGradient(cmd, mArray, i, list);
+ }
+ }
+ serializer.add("operations", list);
+ }
+
+ private static Map<String, Object> getVariable(int value) {
+ float fValue = Float.intBitsToFloat(value);
+ if (Float.isNaN(fValue)) {
+ return orderedOf("type", "Variable", "id", Utils.idFromNan(fValue));
+ }
+ return orderedOf("type", "Value", "value", fValue);
+ }
+
+ private static int serializeGradient(
+ int cmd, int[] array, int i, List<Map<String, Object>> list) {
+ int ret = i;
+ int gradientType = (cmd >> 16);
+
+ int len = 0xFF & array[ret++]; // maximum 256 colors
+
+ String[] colors = null;
+ if (len > 0) {
+ colors = new String[len];
+ for (int j = 0; j < colors.length; j++) {
+ colors[j] = colorInt(array[ret++]);
+ }
+ }
+ len = array[ret++];
+ float[] stops = null;
+ if (len > 0) {
+ stops = new float[len];
+ for (int j = 0; j < colors.length; j++) {
+ stops[j] = Float.intBitsToFloat(array[ret++]);
+ }
+ }
+
+ if (colors == null) {
+ return ret;
+ }
+
+ int tileMode;
+ int centerX;
+ int centerY;
+
+ switch (gradientType) {
+ case LINEAR_GRADIENT:
+ int startX = array[ret++];
+ int startY = array[ret++];
+ int endX = array[ret++];
+ int endY = array[ret++];
+ tileMode = array[ret++];
+ list.add(
+ orderedOf(
+ "type",
+ "LinearGradient",
+ "colors",
+ colors,
+ "stops",
+ stops == null ? List.of() : stops,
+ "startX",
+ getVariable(startX),
+ "startY",
+ getVariable(startY),
+ "endX",
+ getVariable(endX),
+ "endY",
+ getVariable(endY),
+ "tileMode",
+ tileMode));
+ break;
+ case RADIAL_GRADIENT:
+ centerX = array[ret++];
+ centerY = array[ret++];
+ int radius = array[ret++];
+ tileMode = array[ret++];
+ list.add(
+ orderedOf(
+ "type",
+ "LinearGradient",
+ "colors",
+ colors,
+ "stops",
+ stops == null ? List.of() : stops,
+ "centerX",
+ getVariable(centerX),
+ "centerY",
+ getVariable(centerY),
+ "radius",
+ getVariable(radius),
+ "tileMode",
+ tileMode));
+ break;
+ case SWEEP_GRADIENT:
+ centerX = array[ret++];
+ centerY = array[ret++];
+ list.add(
+ orderedOf(
+ "type",
+ "LinearGradient",
+ "colors",
+ colors,
+ "stops",
+ stops == null ? List.of() : stops,
+ "centerX",
+ getVariable(centerX),
+ "centerY",
+ getVariable(centerY)));
+ }
+
+ return ret;
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/operations/utilities/easing/FloatAnimation.java b/core/java/com/android/internal/widget/remotecompose/core/operations/utilities/easing/FloatAnimation.java
index 65472c262206..cad76059f7a4 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/operations/utilities/easing/FloatAnimation.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/operations/utilities/easing/FloatAnimation.java
@@ -18,8 +18,11 @@ package com.android.internal.widget.remotecompose.core.operations.utilities.easi
import android.annotation.NonNull;
import android.annotation.Nullable;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
+
/** Support Animation of the FloatExpression */
-public class FloatAnimation extends Easing {
+public class FloatAnimation extends Easing implements Serializable {
float[] mSpec;
// mSpec[0] = duration
// int(mSpec[1]) = num_of_param << 16 | type
@@ -391,4 +394,14 @@ public class FloatAnimation extends Easing {
public float getInitialValue() {
return mInitialValue;
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer
+ .add("type", "FloatAnimation")
+ .add("initialValue", mInitialValue)
+ .add("targetValue", mInitialValue)
+ .add("duration", mInitialValue)
+ .add("easing", Easing.getString(mEasingCurve.getType()));
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/serialize/MapSerializer.java b/core/java/com/android/internal/widget/remotecompose/core/serialize/MapSerializer.java
index bcdac22f7baa..f9ecf0f4f672 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/serialize/MapSerializer.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/serialize/MapSerializer.java
@@ -17,6 +17,7 @@ package com.android.internal.widget.remotecompose.core.serialize;
import android.annotation.Nullable;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -24,6 +25,24 @@ import java.util.Map;
public interface MapSerializer {
/**
+ * Add a float expression
+ *
+ * @param key
+ * @param value
+ * @return
+ */
+ MapSerializer addFloatExpressionSrc(String key, float[] value);
+
+ /**
+ * Add an int expression
+ *
+ * @param key The key
+ * @param value The int src
+ * @param mask For determining ID from int
+ */
+ MapSerializer addIntExpressionSrc(String key, int[] value, int mask);
+
+ /**
* Add metadata to this map for filtering by the data format generator.
*
* @param value A set of tags to add
@@ -146,4 +165,19 @@ public interface MapSerializer {
* @param value The Enum
*/
<T extends Enum<T>> MapSerializer add(String key, @Nullable Enum<T> value);
+
+ /**
+ * Similar to Map.of, but create a LinkedHashMap preserving insertion order for predictable
+ * serialization.
+ *
+ * @param keysAndValues a even number of items, repeating String key and Object value.
+ * @return A LinkedHashMap.
+ */
+ static LinkedHashMap<String, Object> orderedOf(Object... keysAndValues) {
+ final LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+ for (int i = 0; i < keysAndValues.length; i += 2) {
+ map.put((String) keysAndValues[i], keysAndValues[i + 1]);
+ }
+ return map;
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/serialize/SerializeTags.java b/core/java/com/android/internal/widget/remotecompose/core/serialize/SerializeTags.java
index 99cac0fc75a8..c29dd98fbd7d 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/serialize/SerializeTags.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/serialize/SerializeTags.java
@@ -22,4 +22,5 @@ public enum SerializeTags {
A11Y,
ACTION,
DRAW_OPERATION,
+ EXPRESSION,
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/types/BooleanConstant.java b/core/java/com/android/internal/widget/remotecompose/core/types/BooleanConstant.java
index 2c874b183a62..cb759a61249a 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/types/BooleanConstant.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/types/BooleanConstant.java
@@ -25,11 +25,15 @@ import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
/** Used to represent a boolean */
-public class BooleanConstant extends Operation {
+public class BooleanConstant extends Operation implements Serializable {
+ private static final String CLASS_NAME = "BooleanConstant";
+
private static final int OP_CODE = Operations.DATA_BOOLEAN;
private boolean mValue = false;
private int mId;
@@ -124,4 +128,9 @@ public class BooleanConstant extends Operation {
.field(DocumentedOperation.INT, "id", "id of Int")
.field(BYTE, "value", "8-bit 0 or 1");
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer.add("type", CLASS_NAME).add("id", mId).add("value", mValue);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/types/IntegerConstant.java b/core/java/com/android/internal/widget/remotecompose/core/types/IntegerConstant.java
index 5462d3e069ed..c734f813ede3 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/types/IntegerConstant.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/types/IntegerConstant.java
@@ -25,13 +25,17 @@ import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
/** Represents a single integer typically used for states or named for input into the system */
-public class IntegerConstant extends Operation {
- private int mValue = 0;
- private int mId;
+public class IntegerConstant extends Operation implements Serializable {
+ private static final String CLASS_NAME = "IntegerConstant";
+
+ private final int mValue;
+ private final int mId;
IntegerConstant(int id, int value) {
mId = id;
@@ -116,4 +120,9 @@ public class IntegerConstant extends Operation {
.field(DocumentedOperation.INT, "id", "id of Int")
.field(INT, "value", "32-bit int value");
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer.add("type", CLASS_NAME).add("id", mId).add("value", mValue);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/core/types/LongConstant.java b/core/java/com/android/internal/widget/remotecompose/core/types/LongConstant.java
index 1a3cdb1a96d7..50509f3636b3 100644
--- a/core/java/com/android/internal/widget/remotecompose/core/types/LongConstant.java
+++ b/core/java/com/android/internal/widget/remotecompose/core/types/LongConstant.java
@@ -25,14 +25,18 @@ import com.android.internal.widget.remotecompose.core.RemoteContext;
import com.android.internal.widget.remotecompose.core.WireBuffer;
import com.android.internal.widget.remotecompose.core.documentation.DocumentationBuilder;
import com.android.internal.widget.remotecompose.core.documentation.DocumentedOperation;
+import com.android.internal.widget.remotecompose.core.serialize.MapSerializer;
+import com.android.internal.widget.remotecompose.core.serialize.Serializable;
import java.util.List;
/** Used to represent a long */
-public class LongConstant extends Operation {
+public class LongConstant extends Operation implements Serializable {
+ private static final String CLASS_NAME = "LongConstant";
+
private static final int OP_CODE = Operations.DATA_LONG;
- private long mValue;
- private int mId;
+ private final long mValue;
+ private final int mId;
public LongConstant(int id, long value) {
mId = id;
@@ -107,4 +111,9 @@ public class LongConstant extends Operation {
.field(DocumentedOperation.INT, "id", "id of Int")
.field(LONG, "value", "The long Value");
}
+
+ @Override
+ public void serialize(MapSerializer serializer) {
+ serializer.add("type", CLASS_NAME).add("id", mId).add("value", mValue);
+ }
}
diff --git a/core/java/com/android/internal/widget/remotecompose/player/RemoteComposePlayer.java b/core/java/com/android/internal/widget/remotecompose/player/RemoteComposePlayer.java
index 77f4b6a83eef..1d1e579ebc2f 100644
--- a/core/java/com/android/internal/widget/remotecompose/player/RemoteComposePlayer.java
+++ b/core/java/com/android/internal/widget/remotecompose/player/RemoteComposePlayer.java
@@ -29,7 +29,6 @@ import android.hardware.SensorManager;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
-import android.view.HapticFeedbackConstants;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
@@ -596,29 +595,34 @@ public class RemoteComposePlayer extends FrameLayout implements RemoteContextAwa
}
}
- private static int[] sHapticTable = {
- HapticFeedbackConstants.NO_HAPTICS,
- HapticFeedbackConstants.LONG_PRESS,
- HapticFeedbackConstants.VIRTUAL_KEY,
- HapticFeedbackConstants.KEYBOARD_TAP,
- HapticFeedbackConstants.CLOCK_TICK,
- HapticFeedbackConstants.CONTEXT_CLICK,
- HapticFeedbackConstants.KEYBOARD_PRESS,
- HapticFeedbackConstants.KEYBOARD_RELEASE,
- HapticFeedbackConstants.VIRTUAL_KEY_RELEASE,
- HapticFeedbackConstants.TEXT_HANDLE_MOVE,
- HapticFeedbackConstants.GESTURE_START,
- HapticFeedbackConstants.GESTURE_END,
- HapticFeedbackConstants.CONFIRM,
- HapticFeedbackConstants.REJECT,
- HapticFeedbackConstants.TOGGLE_ON,
- HapticFeedbackConstants.TOGGLE_OFF,
- HapticFeedbackConstants.GESTURE_THRESHOLD_ACTIVATE,
- HapticFeedbackConstants.GESTURE_THRESHOLD_DEACTIVATE,
- HapticFeedbackConstants.DRAG_START,
- HapticFeedbackConstants.SEGMENT_TICK,
- HapticFeedbackConstants.SEGMENT_FREQUENT_TICK,
- };
+ private static final int[] sHapticTable;
+
+ static {
+ sHapticTable =
+ new int[] {
+ android.view.HapticFeedbackConstants.NO_HAPTICS,
+ android.view.HapticFeedbackConstants.LONG_PRESS,
+ android.view.HapticFeedbackConstants.VIRTUAL_KEY,
+ android.view.HapticFeedbackConstants.KEYBOARD_TAP,
+ android.view.HapticFeedbackConstants.CLOCK_TICK,
+ android.view.HapticFeedbackConstants.CONTEXT_CLICK,
+ android.view.HapticFeedbackConstants.KEYBOARD_PRESS,
+ android.view.HapticFeedbackConstants.KEYBOARD_RELEASE,
+ android.view.HapticFeedbackConstants.VIRTUAL_KEY_RELEASE,
+ android.view.HapticFeedbackConstants.TEXT_HANDLE_MOVE,
+ android.view.HapticFeedbackConstants.GESTURE_START,
+ android.view.HapticFeedbackConstants.GESTURE_END,
+ android.view.HapticFeedbackConstants.CONFIRM,
+ android.view.HapticFeedbackConstants.REJECT,
+ android.view.HapticFeedbackConstants.TOGGLE_ON,
+ android.view.HapticFeedbackConstants.TOGGLE_OFF,
+ android.view.HapticFeedbackConstants.GESTURE_THRESHOLD_ACTIVATE,
+ android.view.HapticFeedbackConstants.GESTURE_THRESHOLD_DEACTIVATE,
+ android.view.HapticFeedbackConstants.DRAG_START,
+ android.view.HapticFeedbackConstants.SEGMENT_TICK,
+ android.view.HapticFeedbackConstants.SEGMENT_FREQUENT_TICK,
+ };
+ }
private void provideHapticFeedback(int type) {
performHapticFeedback(sHapticTable[type % sHapticTable.length]);
diff --git a/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidPaintContext.java b/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidPaintContext.java
index 6b1a30a7545c..ac4a294b5e5e 100644
--- a/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidPaintContext.java
+++ b/core/java/com/android/internal/widget/remotecompose/player/platform/AndroidPaintContext.java
@@ -246,6 +246,12 @@ public class AndroidPaintContext extends PaintContext {
}
@Override
+ public void replacePaint(PaintBundle paintBundle) {
+ mPaint.reset();
+ applyPaint(paintBundle);
+ }
+
+ @Override
public void drawRoundRect(
float left, float top, float right, float bottom, float radiusX, float radiusY) {
mCanvas.drawRoundRect(left, top, right, bottom, radiusX, radiusY, mPaint);
diff --git a/core/java/com/android/internal/widget/remotecompose/player/platform/RemoteComposeCanvas.java b/core/java/com/android/internal/widget/remotecompose/player/platform/RemoteComposeCanvas.java
index f76794fc0372..4d2dd05ca603 100644
--- a/core/java/com/android/internal/widget/remotecompose/player/platform/RemoteComposeCanvas.java
+++ b/core/java/com/android/internal/widget/remotecompose/player/platform/RemoteComposeCanvas.java
@@ -31,6 +31,7 @@ import android.widget.FrameLayout;
import com.android.internal.widget.remotecompose.core.CoreDocument;
import com.android.internal.widget.remotecompose.core.RemoteContext;
+import com.android.internal.widget.remotecompose.core.operations.Header;
import com.android.internal.widget.remotecompose.core.operations.RootContentBehavior;
import com.android.internal.widget.remotecompose.core.operations.Theme;
import com.android.internal.widget.remotecompose.player.RemoteComposeDocument;
@@ -105,10 +106,16 @@ public class RemoteComposeCanvas extends FrameLayout implements View.OnAttachSta
mARContext.setDensity(mDensity);
mARContext.setUseChoreographer(true);
setContentDescription(mDocument.getDocument().getContentDescription());
+
updateClickAreas();
requestLayout();
mARContext.loadFloat(RemoteContext.ID_TOUCH_EVENT_TIME, -Float.MAX_VALUE);
invalidate();
+ Integer fps = (Integer) mDocument.getDocument().getProperty(Header.DOC_DESIRED_FPS);
+ if (fps != null && fps > 0) {
+ mMaxFrameRate = fps;
+ mMaxFrameDelay = (long) (1000 / mMaxFrameRate);
+ }
}
@Override
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index 102edc944c22..22298b3f9525 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -598,7 +598,7 @@ static jintArray android_media_AudioRecord_getRoutedDeviceIds(JNIEnv *env, jobje
}
jint *values = env->GetIntArrayElements(result, 0);
for (unsigned int i = 0; i < deviceIds.size(); i++) {
- values[i++] = static_cast<jint>(deviceIds[i]);
+ values[i] = static_cast<jint>(deviceIds[i]);
}
env->ReleaseIntArrayElements(result, values, 0);
return result;
diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp
index 3fc1a02f46b6..3cf5d5fdde24 100644
--- a/core/jni/android_media_AudioTrack.cpp
+++ b/core/jni/android_media_AudioTrack.cpp
@@ -1204,7 +1204,7 @@ static jintArray android_media_AudioTrack_getRoutedDeviceIds(JNIEnv *env, jobjec
}
jint *values = env->GetIntArrayElements(result, 0);
for (unsigned int i = 0; i < deviceIds.size(); i++) {
- values[i++] = static_cast<jint>(deviceIds[i]);
+ values[i] = static_cast<jint>(deviceIds[i]);
}
env->ReleaseIntArrayElements(result, values, 0);
return result;
diff --git a/core/proto/android/nfc/OWNERS b/core/proto/android/nfc/OWNERS
index ca16721eacc1..36823aee4dbb 100644
--- a/core/proto/android/nfc/OWNERS
+++ b/core/proto/android/nfc/OWNERS
@@ -1 +1 @@
-include platform/packages/apps/Nfc:/OWNERS \ No newline at end of file
+include platform/packages/modules/Nfc:/OWNERS \ No newline at end of file
diff --git a/core/res/res/layout/notification_2025_template_header.xml b/core/res/res/layout/notification_2025_template_header.xml
index 72b3798e0780..5aae67802af9 100644
--- a/core/res/res/layout/notification_2025_template_header.xml
+++ b/core/res/res/layout/notification_2025_template_header.xml
@@ -59,7 +59,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
- android:layout_toStartOf="@id/expand_button"
+ android:layout_toStartOf="@id/expand_button_container"
android:layout_alignWithParentIfMissing="true"
android:layout_marginVertical="@dimen/notification_2025_margin"
android:clipChildren="false"
@@ -81,12 +81,30 @@
android:focusable="false"
/>
- <include layout="@layout/notification_2025_expand_button"
+
+ <LinearLayout
+ android:id="@+id/expand_button_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="top|end"
- android:layout_alignParentEnd="true" />
+ android:layout_alignParentEnd="true"
+ android:orientation="vertical"
+ >
+ <FrameLayout
+ android:id="@+id/expand_button_spacer"
+ android:layout_width="@dimen/notification_2025_expand_button_pill_width"
+ android:layout_height="@dimen/notification_2025_expand_button_pill_height"
+ android:layout_centerVertical="true"
+ android:layout_alignParentEnd="true"
+ android:layout_margin="@dimen/notification_2025_margin"
+ android:visibility="gone" />
+
+ <include layout="@layout/notification_2025_expand_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="top|end"
+ android:layout_alignParentEnd="true" />
+ </LinearLayout>
<include layout="@layout/notification_close_button"
android:id="@+id/close_button"
android:layout_width="@dimen/notification_close_button_size"
diff --git a/core/res/res/layout/notification_template_header.xml b/core/res/res/layout/notification_template_header.xml
index 57959361bd48..b7fd737a4e39 100644
--- a/core/res/res/layout/notification_template_header.xml
+++ b/core/res/res/layout/notification_template_header.xml
@@ -62,7 +62,7 @@
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
- android:layout_toStartOf="@id/expand_button"
+ android:layout_toStartOf="@id/expand_button_container"
android:layout_alignWithParentIfMissing="true"
android:clipChildren="false"
android:gravity="center_vertical"
@@ -83,12 +83,28 @@
android:focusable="false"
/>
- <include layout="@layout/notification_expand_button"
+ <LinearLayout
+ android:id="@+id/expand_button_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_alignParentEnd="true" />
+ android:layout_alignParentEnd="true"
+ android:orientation="vertical"
+ >
+ <FrameLayout
+ android:id="@+id/expand_button_spacer"
+ android:layout_width="@dimen/notification_expand_button_pill_height"
+ android:layout_height="@dimen/notification_header_height"
+ android:layout_centerVertical="true"
+ android:layout_alignParentEnd="true"
+ android:layout_marginHorizontal="16dp"
+ android:visibility="gone" />
+ <include layout="@layout/notification_expand_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerVertical="true"
+ android:layout_alignParentEnd="true" />
+ </LinearLayout>
<include layout="@layout/notification_close_button"
android:id="@+id/close_button"
android:layout_width="@dimen/notification_close_button_size"
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 368cf65ae67c..5da0924c08c3 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Ontspeld"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Ontspeld <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Appinligting"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Direktedelingteikens"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Appvoorstelle"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Applys"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Begin tans demonstrasie …"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Stel toestel tans terug …"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"D-paneel links"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"D-paneel regs"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"D-paneel middel"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Outoklik-tipe instellingspaneel"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Linksklik"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Onderbreek"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posisie"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> is in die BEPERK-groep geplaas"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"het \'n prent gestuur"</string>
@@ -2269,7 +2270,7 @@
<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_share_with_personal_apps_explanation" msgid="6349766201904601544">"Hierdie inhoud kan nie met persoonlike apps 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="1535946298236678122">"Werkapps is onderbreek"</string>
<string name="resolver_switch_on_work" msgid="4527096360772311894">"Hervat"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Apps"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Jou vingerafdrukke kan nie meer herken word nie. Stel Vingerafdrukslot weer op."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB-toestel is ingeprop wanneer dit gesluit is"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB-toestel is ingeprop wanneer jou Android gesluit is. Om die toestel te gebruik, moet jy eers jou Android ontsluit en dan weer die USB-toestel insit om dit te gebruik."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Verdagte USB-aktiwiteit"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB-datasein is gedeaktiveer."</string>
</resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 1ab3beb71858..c55f1c63bf04 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"ንቀል"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> ንቀል"</string>
<string name="app_info" msgid="6113278084877079851">"የመተግበሪያ መረጃ"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"የቀጥታ ማጋራት ዒላማዎች"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"የመተግበሪያ አስተያየቶች"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"የመተግበሪያ ዝርዝር"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"ማሳያን በማስጀመር ላይ…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"መሣሪያን ዳግም በማስጀመር ላይ…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"ከDpad በስተግራ"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"ከDpad በስተቀኝ"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"የDpad ማዕከል"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"የራስ-ሰር ጠቅ ማድረግ ትየባ ቅንብሮች ፓነል"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"የግራ ጠቅታ"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"ባለበት አቁም"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"አቀማመጥ"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ወደ የRESTRICTED ባልዲ ተከትቷል"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>፦"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"አንድ ምስል ልከዋል"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"ካርታዎች"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"መተግበሪያዎች"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"ከእንግዲህ የጣት አሻራዎችዎ ሊለዩ አይችሉም። በጣት አሻራ መክፈቻን እንደገና ያዋቅሩ።"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"ሲቆለፍ የUSB መሣሪያ ተሰክቷል።"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android ሲቆለፍ የUSB መሣሪያ ተሰክቷል። መሣሪያ ለመጠቀም እባክዎ መጀመሪያ Androidን ይክፈቱ እና ከዚያም እሱን ለመጠቀም የUSB መሣሪያ እንደገና ያስገቡ።"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"አጠራጣሪ የUSB እንቅስቃሴ"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"የUSB የውሂብ ምልክት ተሰናክሏል።"</string>
</resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 637b08daa171..f542d439bf2e 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -1468,7 +1468,7 @@
<string name="select_keyboard_layout_notification_message" msgid="8835158247369158154">"انقر لاختيار لغة وتنسيق"</string>
<string name="fast_scroll_alphabet" msgid="8854435958703888376">" أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي"</string>
<string name="fast_scroll_numeric_alphabet" msgid="2529539945421557329">" 0123456789 أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي"</string>
- <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"إظهار فوق التطبيقات الأخرى"</string>
+ <string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"الظهور فوق التطبيقات الأخرى"</string>
<string name="alert_windows_notification_channel_name" msgid="3437528564303192620">"جارٍ عرض <xliff:g id="NAME">%s</xliff:g> فوق تطبيقات أخرى"</string>
<string name="alert_windows_notification_title" msgid="6331662751095228536">"يتم عرض <xliff:g id="NAME">%s</xliff:g> فوق التطبيقات الأخرى."</string>
<string name="alert_windows_notification_message" msgid="6538171456970725333">"إذا كنت لا تريد أن يستخدم <xliff:g id="NAME">%s</xliff:g> هذه الميزة، فانقر لفتح الإعدادات، ثم اختر إيقافها."</string>
@@ -2092,12 +2092,9 @@
<string name="unpin_target" msgid="3963318576590204447">"إزالة تثبيت"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"إزالة تثبيت <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"معلومات عن التطبيق"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"أهداف المشاركة المباشرة"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"التطبيقات المقترَحة"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"قائمة التطبيقات"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"جارٍ بدء العرض التوضيحي…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"جارٍ إعادة ضبط الجهاز…"</string>
@@ -2254,6 +2251,14 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"الزرّ المركزي"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"لوحة إعدادات نوع النقر التلقائي"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"النقر بالزر الأيسر"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
+ <skip />
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"إيقاف مؤقت"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"تعديل الموضع"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"تم وضع <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> في الحزمة \"محظورة\"."</string>
@@ -2530,12 +2535,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"‏خرائط Google"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"التطبيقات"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"لم يعد بالإمكان التعرّف على بصمات أصابعك. يجب ضبط ميزة \"فتح الجهاز ببصمة الإصبع\" مجددًا."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"‏تم توصيل جهاز USB عندما كان الجهاز مقفلاً"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"‏تم توصيل جهاز USB عندما كان جهاز Android مقفلاً. لاستخدام الجهاز، يُرجى فتح قفل جهاز Android أولاً ثم إعادة إدخال جهاز USB لاستخدامه."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"‏نشاط مريب في جهاز USB"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"‏تم إيقاف مؤشر بيانات USB."</string>
</resources>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 95d442bf43a4..b8afd2edc2e1 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"আনপিন"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g>ক আনপিন কৰক"</string>
<string name="app_info" msgid="6113278084877079851">"এপ্ সম্পৰ্কীয় তথ্য"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"পোনপটীয়াকৈ কৰা শ্বেয়াৰৰ লক্ষ্য"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"এপৰ পৰামৰ্শ"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"এপৰ সূচী"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"ডেম\' আৰম্ভ কৰি থকা হৈছে…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"ডিভাইচটো আকৌ ছেটিং কৰি থকা হৈছে…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"ডিপেডৰ বাওঁফালৰ বুটাম"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"ডিপেডৰ সোঁফালৰ বুটাম"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"ডিপেডৰ মাজৰ বুটাম"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"প্ৰকাৰৰ ছেটিঙৰ পেনেলত স্বয়ংক্ৰিয়ভাৱে ক্লিক কৰক"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"বাওঁফালৰ ক্লিক"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"পজ কৰক"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"স্থান"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>ক সীমাবদ্ধ বাকেটটোত ৰখা হৈছে"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"এখন প্ৰতিচ্ছবি পঠিয়াইছে"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"মেপ"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"এপ্লিকেশ্বন"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"আপোনাৰ ফিংগাৰপ্ৰিণ্ট আৰু চিনাক্ত কৰিব নোৱাৰি। ফিংগাৰপ্ৰিণ্ট আনলক পুনৰ ছেট আপ কৰক।"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"লক হৈ থাকোঁতে USB ডিভাইচ প্লাগ ইন কৰা হৈছে"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android লক হৈ থাকোঁতে USB ডিভাইচ প্লাগ ইন কৰা হৈছে। ডিভাইচ ব্যৱহাৰ কৰিবলৈ অনুগ্ৰহ কৰি প্ৰথমে Android আনলক কৰক আৰু তাৰ পাছত USB ডিভাইচটো ব্যৱহাৰ কৰিবলৈ সেইটো পুনৰ ভৰাওক।"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"সন্দেহজনক USBৰ কাৰ্যকলাপ"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB ডেটা ছিগনেল অক্ষম কৰা হৈছে।"</string>
</resources>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index 4f7da4f74a71..affa56954001 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Çıxarın"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"İşarələməyin: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Tətbiq haqqında"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Birbaşa paylaşım hədəfləri"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Tətbiq təklifləri"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Tətbiq siyahısı"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Demo başlayır…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Cihaz sıfırlanır…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad Sola"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad Sağa"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad Mərkəzə"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Avtomatik klikləmə növü üzrə ayarlar paneli"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Sola klik"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Durdurun"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Mövqe"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> MƏHDUDLAŞDIRILMIŞ səbətinə yerləşdirilib"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"şəkil göndərdi"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Xəritə"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Tətbiqlər"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Barmaq izlərinizi artıq tanımaq mümkün deyil. Barmaqla Kilidaçmanı yenidən ayarlayın."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Kilidli olduqda USB cihazı qoşulu olur"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android kilidləndikdə USB cihazı qoşulu olur. Cihazdan istifadə etmək üçün əvvəlcə Android-i kiliddən çıxarın və sonra USB cihazını yenidən taxaraq ondan istifadə edin."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Şübhəli USB fəaliyyəti"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB data siqnalı deaktiv edilib."</string>
</resources>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 049359b85a1e..3acc8df73a83 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Otkači"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Otkači aplikaciju <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Informacije o aplikaciji"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Ciljevi direktnog deljenja"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Predlozi aplikacija"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Lista aplikacija"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Pokrećemo demonstraciju..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Resetujemo uređaj..."</string>
@@ -2251,6 +2248,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"centar na D-pad-u"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Okno sa podešavanjima tipa automatskog klika"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Levi klik"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Kliknite desnim tasterom"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Dvaput kliknite"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Prevucite"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Skrolujte"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pauziraj"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozicija"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> je dodat u segment OGRANIČENO"</string>
@@ -2527,12 +2528,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Mape"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplikacije"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Otisci prstiju više ne mogu da se prepoznaju. Ponovo podesite otključavanje otiskom prsta."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB uređaj je priključen kada je Android zaključan"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB uređaj je priključen kada je Android zaključan. Da biste koristili uređaj, prvo otključajte Android, pa ponovo ubacite USB uređaj da biste ga koristili."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Sumnjiva USB aktivnost"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Signal za prenos podataka sa USB-a je onemogućen."</string>
</resources>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 02cc889e9ecc..7c827bbecaab 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -2090,12 +2090,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Адмацаваць"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Адмацаваць праграму \"<xliff:g id="LABEL">%1$s</xliff:g>\""</string>
<string name="app_info" msgid="6113278084877079851">"Звесткі аб праграме"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Адрасаты для прамога абагульвання"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Прапановы праграм"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Спіс праграм"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Ідзе запуск дэманстрацыі…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Ідзе скід налад прылады…"</string>
@@ -2250,14 +2247,14 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Улева на панэлі кіравання"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Управа на панэлі кіравання"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"У цэнтр на панэлі кіравання"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
- <skip />
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Панэль налад тыпу аўтаматычнага націскання"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Націсканне левай клавішай мышы"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Націсканне правай кнопкай мышы"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Двайное націсканне"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Перацягванне"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Гартанне"</string>
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Прыпыніць"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Пазіцыя"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакет \"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>\" дададзены ў АБМЕЖАВАНУЮ групу"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"адпраўлены відарыс"</string>
@@ -2532,12 +2529,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Карты"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Праграмы"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Вашы адбіткі пальцаў больш не распазнаюцца. Паўторна наладзьце разблакіроўку адбіткам пальца."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB-прылада падключана, калі прылада заблакіравана"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB-прылада падключана, калі прылада Android заблакіравана. Каб выкарыстоўваць прыладу, разблакіруйце прыладу Android і паўторна ўстаўце USB-прыладу."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Падазроная актыўнасць на USB-прыладзе"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Сігнал даных USB адключаны."</string>
</resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index d85e319edaaa..c3a271267a36 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Освобождаване"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Премахване на фиксирането на <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Информация за приложението"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Цели за директно споделяне"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Предложения за приложения"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Списък с приложения"</string>
<string name="negative_duration" msgid="1938335096972945232">"-<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Демонстрацията се стартира…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Устройството се нулира…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Контролен пад – ляво"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Контролен пад – дясно"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Контролен пад – център"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Панел с настройки за типа на автоматичното кликване"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Кликване с ляв бутон"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Пауза"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Позиция"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакетът <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> е поставен в ОГРАНИЧЕНИЯ контейнер"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"изпратено изображение"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Карти"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Приложения"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Отпечатъците ви вече не могат да бъдат разпознати. Настройте отново „Отключване с отпечатък“."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB устройството е свързано, когато устройството е заключено"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB устройството е включено, когато устройството с Android е заключено. За да използвате устройството, първо отключете Android и след това поставете отново USB устройството."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Подозрителна активност на USB"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Сигналът за данни през USB е деактивиран."</string>
</resources>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index 19d4962175b1..f6492c5b9ef3 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"আনপিন করুন"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> অ্যাপ আনপিন করুন"</string>
<string name="app_info" msgid="6113278084877079851">"অ্যাপের তথ্য"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"সরাসরি টার্গেট শেয়ার করুন"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"অ্যাপ সাজেশন"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"অ্যাপ তালিকা"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"ডেমো শুরু করা হচ্ছে…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"ডিভাইস আবার সেট করা হচ্ছে…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"ডিপ্যাড (Dpad)-এর বাঁদিকে"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"ডিপ্যাড (Dpad)-এর ডানদিকে"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"ডিপ্যাড (Dpad)-এর মাঝখানে"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"অটোক্লিক টাইপ সেটিংস প্যানেল"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"বাঁদিকের বোতামে ক্লিক করুন"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"পজ করুন"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"পজিশন"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> সীমাবদ্ধ গ্রুপে অন্তর্ভুক্ত করা হয়েছে"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"একটি ছবি পাঠানো হয়েছে"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"ম্যাপ"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"অ্যাপ্লিকেশন"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"আপনার ফিঙ্গারপ্রিন্ট আর শনাক্ত করা যাবে না। \'ফিঙ্গারপ্রিন্ট আনলক\' ফিচার আবার সেট-আপ করুন।"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"লক থাকাকালীন USB ডিভাইস প্লাগ-ইন করা হয়েছে"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android লক থাকাকালীন USB ডিভাইস প্লাগ-ইন করা হয়েছে। ডিভাইস ব্যবহার করতে, প্রথমে Android আনলক করুন এবং তারপর সেটি ব্যবহার করতে USB ডিভাইস আবার যোগ করুন।"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"সন্দেহজনক USB অ্যাক্টিভিটি"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB ডেটা সিগন্যাল বন্ধ করা হয়েছে।"</string>
</resources>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index e95bedf3dcd3..3ff85acf48a0 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Otkači"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Otkači aplikaciju <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Informacije o aplikaciji"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Ciljevi direktnog dijeljenja"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Prijedlozi aplikacija"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Lista aplikacija"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Pokretanje demonstracije…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Vraćanje uređaja na početne postavke…"</string>
@@ -2251,8 +2248,12 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Upravljač sredina"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Ploča postavki vrste automatskog klika"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Lijevi klik"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Desni klik"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Dvostruki klik"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Povuci"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Pomakni se"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pauziraj"</string>
- <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozicija"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Položaj"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> je stavljen u odjeljak OGRANIČENO"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"je poslao/la sliku"</string>
@@ -2266,7 +2267,7 @@
<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_share_with_personal_apps_explanation" msgid="6349766201904601544">"Ovaj sadržaj nije moguće dijeliti s ličnim aplikacijama"</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="1535946298236678122">"Poslovne aplikacije su pauzirane"</string>
<string name="resolver_switch_on_work" msgid="4527096360772311894">"Ponovo pokreni"</string>
@@ -2527,12 +2528,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Mape"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplikacije"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Vaši otisci prstiju se više ne mogu prepoznavati. Ponovo postavite otključavanje otiskom prsta."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB uređaj je priključen dok je uređaj bio zaključan"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB uređaj je priključen dok je Android bio zaključan. Da koristite uređaj, prvo otključajte Android, a zatim ponovo umetnite USB uređaj da ga koristite."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Sumnjiva aktivnost USB-a"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Podatkovni signal USB-a je onemogućen."</string>
</resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 9b67f28bbfb2..9b61887da0bd 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"No fixis"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"No fixis <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Informació de l\'app"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Destinataris de la compartició directa"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Suggeriments d\'aplicacions"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Llista d\'aplicacions"</string>
<string name="negative_duration" msgid="1938335096972945232">"-<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"S\'està iniciant la demostració…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"S\'està restablint el dispositiu…"</string>
@@ -2249,14 +2246,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Creu direccional: esquerra"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Creu direccional: dreta"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Creu direccional: centre"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Tauler de configuració del tipus de clic automàtic"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Clic esquerre"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Posa en pausa"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posició"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> s\'ha transferit al segment RESTRINGIT"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ha enviat una imatge"</string>
@@ -2531,12 +2532,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplicacions"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Les teves empremtes digitals ja no es poden reconèixer. Torna a configurar Desbloqueig amb empremta digital."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"S\'ha connectat un dispositiu USB quan el dispositiu estava bloquejat"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"El dispositiu USB està connectat quan Android està bloquejat. Per utilitzar el dispositiu, primer desbloqueja Android i, a continuació, torna a inserir el dispositiu USB per utilitzar-lo."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Activitat USB sospitosa"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"El senyal de dades per USB s\'ha desactivat."</string>
</resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index f4eef972c0d1..9c8cc9a17878 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -2252,6 +2252,14 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad střed"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Panel nastavení typu automatického kliknutí"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Kliknutí levým"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
+ <skip />
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pozastavit"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozice"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Balíček <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> byl vložen do sekce OMEZENO"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index bcdb691eaf86..1b96dbbe07f7 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Frigør"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Frigør <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Appinfo"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Personer/grupper, der skal deles direkte med"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Appforslag"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Appliste"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Starter demoen…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Nulstiller enheden…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"D-pad, venstre"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"D-pad, højre"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"D-pad, midten"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Panel med indstillinger for type af automatisk klik"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Venstreklik"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Sæt på pause"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Placering"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> er blevet placeret i samlingen BEGRÆNSET"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sendte et billede"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Kort"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Apps"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Dine fingeraftryk kan ikke længere genkendes. Konfigurer fingeroplåsning igen."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB-enheden er tilsluttet, når Android er låst"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB-enheden er tilsluttet, når Android er låst. Hvis du vil bruge enheden, skal du først låse Android op og derefter tilslutte USB-enheden."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Mistænkelig USB-aktivitet"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB-datasignalet er blevet deaktiveret."</string>
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 4191512fd018..73e7b9a9c0c8 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -2042,7 +2042,7 @@
<string name="app_suspended_title" msgid="888873445010322650">"App nicht verfügbar"</string>
<string name="app_suspended_default_message" msgid="6451215678552004172">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ist momentan nicht verfügbar. Dies wird über die App \"<xliff:g id="APP_NAME_1">%2$s</xliff:g>\" verwaltet."</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"Weitere Informationen"</string>
- <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"App-Pausierung aufheben"</string>
+ <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"Pausierung der App aufheben"</string>
<string name="work_mode_off_title" msgid="6367463960165135829">"Geschäftliche Apps nicht mehr pausieren?"</string>
<string name="work_mode_turn_on" msgid="5316648862401307800">"Nicht mehr pausieren"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Notruf"</string>
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Markierung entfernen"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> loslösen"</string>
<string name="app_info" msgid="6113278084877079851">"App-Informationen"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"„Direct Share“-Ziele"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"App-Vorschläge"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"App-Liste"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Demo wird gestartet…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Gerät wird zurückgesetzt…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Steuerkreuz nach links"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Steuerkreuz nach rechts"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Steuerkreuz Mitte"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Bereich mit Einstellungen für automatische Klicks"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Linksklick"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausieren"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> wurde in den BESCHRÄNKT-Bucket gelegt"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"hat ein Bild gesendet"</string>
@@ -2267,9 +2268,9 @@
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Private Ansicht"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Geschäftliche Ansicht"</string>
<string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Von deinem IT-Administrator blockiert"</string>
- <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Diese Art von Inhalt kann nicht über geschäftliche Apps geteilt werden"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Dieser Inhalt kann nicht über geschäftliche Apps geteilt werden"</string>
<string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Diese Art von Inhalt kann nicht mit geschäftlichen Apps geöffnet werden"</string>
- <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Diese Art von Inhalt kann nicht über private Apps geteilt werden"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Dieser Inhalt kann nicht über private Apps geteilt werden"</string>
<string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Diese Art von Inhalt kann nicht mit privaten Apps geöffnet werden"</string>
<string name="resolver_turn_on_work_apps" msgid="1535946298236678122">"Geschäftliche Apps sind pausiert"</string>
<string name="resolver_switch_on_work" msgid="4527096360772311894">"Nicht mehr pausieren"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Anwendungen"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Deine Fingerabdrücke können nicht mehr erkannt werden. Bitte richte die Entsperrung per Fingerabdruck neu ein."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB-Gerät wurde angeschlossen, als das Android-Gerät gesperrt war"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Das USB-Gerät wurde angeschlossen, als das Android-Gerät gesperrt war. Du musst erst das Android-Gerät entsperren und dann das USB-Gerät noch einmal anschließen, damit du es verwenden kannst."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Verdächtige USB-Aktivitäten"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB-Datensignal wurde deaktiviert."</string>
</resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 332fb1b47585..25a787c5d06b 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Ξεκαρφίτσωμα"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Ξεκαρφίτσωμα <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Πληροφορίες εφαρμογής"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Στοχευόμενοι χρήστες για Άμεση κοινή χρήση"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Προτεινόμενες εφαρμογές"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Λίστα εφαρμογών"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Έναρξη επίδειξης…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Επαναφορά συσκευής…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad αριστερά"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad δεξιά"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad κέντρο"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Πλαίσιο ρυθμίσεων τύπου αυτόματου κλικ"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Αριστερό κλικ"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Παύση"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Θέση"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Το πακέτο <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> τοποθετήθηκε στον κάδο ΠΕΡΙΟΡΙΣΜΕΝΗΣ ΠΡΟΣΒΑΣΗΣ."</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"έστειλε μια εικόνα"</string>
@@ -2269,7 +2270,7 @@
<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_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="1535946298236678122">"Οι εφαρμογές εργασιών τέθηκαν σε παύση"</string>
<string name="resolver_switch_on_work" msgid="4527096360772311894">"Αναίρεση παύσης"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Χάρτες"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Εφαρμογές"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Δεν είναι δυνατή πλέον η αναγνώριση των δακτυλικών αποτυπωμάτων σας. Ρυθμίστε ξανά τη λειτουργία Ξεκλείδωμα με δακτυλικό αποτύπωμα."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Σύνδεση συσκευής USB σε κατάσταση κλειδώματος"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Η συσκευή USB είναι συνδεδεμένη, όταν το Android είναι κλειδωμένο. Για να χρησιμοποιήσετε τη συσκευή, ξεκλειδώστε πρώτα το Android και, στη συνέχεια, επανατοποθετήστε τη συσκευή USB για να τη χρησιμοποιήσετε."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Ύποπτη δραστηριότητα USB"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Το σήμα δεδομένων USB έχει απενεργοποιηθεί."</string>
</resources>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 74feb323b4dc..886befff643f 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Unpin"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Unpin <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"App info"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Direct share targets"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"App suggestions"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"App list"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Starting demo…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Resetting device…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad left"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad right"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad centre"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Autoclick type settings panel"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Left-click"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pause"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sent an image"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Applications"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Your fingerprints can no longer be recognised. Set up Fingerprint Unlock again."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB device plugged in when locked"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB device is plugged in when Android is locked. To use the device, please unlock Android first and then reinsert the USB device to use it."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Suspicious USB activity"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB data signal has been disabled."</string>
</resources>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 9b7764ef0475..33bbc6faba3f 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Unpin"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Unpin <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"App info"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Direct share targets"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"App suggestions"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"App list"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Starting demo…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Resetting device…"</string>
@@ -2250,6 +2247,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad Center"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Autoclick type settings panel"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Left click"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Right click"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Double click"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Drag"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Scroll"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pause"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string>
@@ -2526,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Applications"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Your fingerprints can no longer be recognized. Set up Fingerprint Unlock again."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB device plugged in when locked"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB device is plugged in when Android is locked. To use device, please unlock Android first and then reinsert USB device to use it."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Suspicious USB activity"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB data signal has been disabled."</string>
</resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 51148ae3be1d..f0a9c2a27ddc 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Unpin"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Unpin <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"App info"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Direct share targets"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"App suggestions"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"App list"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Starting demo…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Resetting device…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad left"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad right"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad centre"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Autoclick type settings panel"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Left-click"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pause"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sent an image"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Applications"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Your fingerprints can no longer be recognised. Set up Fingerprint Unlock again."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB device plugged in when locked"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB device is plugged in when Android is locked. To use the device, please unlock Android first and then reinsert the USB device to use it."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Suspicious USB activity"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB data signal has been disabled."</string>
</resources>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 0b9bb83b6a4a..8fcb412154cc 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Unpin"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Unpin <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"App info"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Direct share targets"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"App suggestions"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"App list"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Starting demo…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Resetting device…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad left"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad right"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad centre"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Autoclick type settings panel"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Left-click"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pause"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> has been put into the RESTRICTED bucket"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sent an image"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Applications"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Your fingerprints can no longer be recognised. Set up Fingerprint Unlock again."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB device plugged in when locked"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB device is plugged in when Android is locked. To use the device, please unlock Android first and then reinsert the USB device to use it."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Suspicious USB activity"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB data signal has been disabled."</string>
</resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 07c66ead87df..f46a4d4abb40 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Dejar de fijar"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Dejar de fijar <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Información de apps"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Objetivos de uso compartido directo"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Sugerencias de aplicaciones"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Lista de apps"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Iniciando demostración…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Restableciendo dispositivo…"</string>
@@ -2251,6 +2248,14 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Pad direccional: centro"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Panel de configuración del tipo de clic automático"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Clic izquierdo"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
+ <skip />
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausar"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posición"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Se colocó <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> en el bucket RESTRICTED"</string>
@@ -2527,12 +2532,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplicaciones"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Ya no se pueden reconocer tus huellas dactilares. Vuelve a configurar el Desbloqueo con huellas dactilares."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Dispositivo USB conectado cuando el dispositivo está bloqueado"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"El dispositivo USB está conectado cuando Android está bloqueado. Para usar el dispositivo, primero desbloquea Android y, luego, vuelve a insertar el dispositivo USB."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Actividad de USB sospechosa"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Se inhabilitó la señal de datos por USB."</string>
</resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index f035d5bbceaf..d5948972ec9c 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"No fijar"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"No fijar <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Información de la app"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Objetivos de compartición directa"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Sugerencias de aplicaciones"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Lista de aplicaciones"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Iniciando demostración…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Restableciendo dispositivo…"</string>
@@ -2249,14 +2246,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Cruceta: izquierda"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Cruceta: derecha"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Cruceta: centro"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Panel de ajustes del tipo de clic automático"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Clic izquierdo"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausar"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posición"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> se ha incluido en el grupo de restringidos"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ha enviado una imagen"</string>
@@ -2531,12 +2532,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplicaciones"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Tus huellas digitales ya no pueden reconocerse. Vuelve a configurar Desbloqueo con huella digital."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Dispositivo USB conectado con el dispositivo bloqueado"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"El dispositivo USB está conectado cuando Android está bloqueado. Para usar el dispositivo, desbloquea Android primero y, a continuación, vuelve a insertar el dispositivo USB para usarlo."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Actividad USB sospechosa"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"La señal de datos USB se ha inhabilitado."</string>
</resources>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 1e299a609bd2..5e961f4fcae8 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -318,7 +318,7 @@
<string name="foreground_service_tap_for_details" msgid="9078123626015586751">"Aku ja andmekasutuse üksikasjade nägemiseks puudutage"</string>
<string name="foreground_service_multiple_separator" msgid="5002287361849863168">"<xliff:g id="LEFT_SIDE">%1$s</xliff:g>, <xliff:g id="RIGHT_SIDE">%2$s</xliff:g>"</string>
<string name="safeMode" msgid="8974401416068943888">"Turvarežiim"</string>
- <string name="android_system_label" msgid="5974767339591067210">"Android-süsteem"</string>
+ <string name="android_system_label" msgid="5974767339591067210">"Androidi süsteem"</string>
<string name="user_owner_label" msgid="8628726904184471211">"Lülitu isiklikule profiilile"</string>
<string name="managed_profile_label" msgid="7316778766973512382">"Lülitu tööprofiilile"</string>
<string name="user_owner_app_label" msgid="1553595155465750298">"Lülita <xliff:g id="APP_NAME">%1$s</xliff:g> isiklikule profiilile"</string>
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Vabasta"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Vabasta <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Rakenduse teave"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Otsejagamise sihtmärgid"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Rakenduste soovitused"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Rakenduste loend"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Demo käivitamine …"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Seadme lähtestamine …"</string>
@@ -2250,6 +2247,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Suunaklahvistiku keskmine nupp"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Automaatkliki tüübi seadete paneel"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Vasakklikk"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Paremklikk"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Topeltklikk"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Lohista"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Keri"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Peata"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Asukoht"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> on lisatud salve PIIRANGUTEGA"</string>
@@ -2526,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Rakendused"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Teie sõrmejälgi ei saa enam tuvastada. Seadistage sõrmejäljega avamine uuesti."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB-seade ühendati, kui seade oli lukus"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB-seade ühendati, kui Android oli lukustatud. Seadme kasutamiseks avage esmalt Android ja ühendage siis USB-seade uuesti, et seda kasutada."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Kahtlane tegevus USB-ga"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB andmesignaal on keelatud."</string>
</resources>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index 177449ccb494..0e450d1a0a4e 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Kendu aingura"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Kendu aingura <xliff:g id="LABEL">%1$s</xliff:g> aplikazioari"</string>
<string name="app_info" msgid="6113278084877079851">"Aplikazioari buruzko informazioa"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Partekatze zuzenen helburuak"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Aplikazioen iradokizunak"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Aplikazioen zerrenda"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Demoa abiarazten…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Gailua berrezartzen…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Norabide-kontrolagailuko ezkerreko botoia"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Norabide-kontrolagailuko eskuineko botoia"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Norabide-kontrolagailuko erdiko botoia"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Automatikoki klik egiteko eginbide motaren ezarpenen panela"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Egin klik ezkerreko botoiarekin"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausatu"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Ezarri posizioan"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Murriztuen edukiontzian ezarri da <xliff:g id="PACKAGE_NAME">%1$s</xliff:g>"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"erabiltzaileak irudi bat bidali du"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplikazioak"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Zure hatz-markak ez dira ezagutzen jada. Konfiguratu berriro hatz-marka bidez desblokeatzeko eginbidea."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB bidezko gailua blokeatuta zegoen bitartean entxufatu da"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB bidezko gailua entxufatuta dago Android blokeatuta dagoenean. Gailua erabiltzeko, desblokeatu Android eta entxufatu berriro USB bidezko gailua hura erabiltzeko."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"USB bidezko jarduera susmagarriak"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB bidezko datu-seinalea desgaitu da."</string>
</resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index e0a8c1b67cb5..4334713515d9 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"برداشتن سنجاق"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"برداشتن سنجاق <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"اطلاعات برنامه"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"هدف‌های هم‌رسانی مستقیم"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"پیشنهادهای برنامه"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"فهرست برنامه"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"در حال شروع نسخه نمایشی…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"در حال بازنشانی دستگاه…"</string>
@@ -2248,14 +2245,14 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"پد کنترل چپ"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"پد کنترل راست"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"پد کنترل وسط"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
- <skip />
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"پانل تنظیمات نوع کلیک خودکار"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"کلیک چپ"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"کلیک راست"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"دوکلیک کردن"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"کشیدن"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"پیمایش"</string>
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"توقف موقت"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"موقعیت"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> در سطل «محدودشده» قرار گرفت"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"تصویری ارسال کرد"</string>
@@ -2530,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"نقشه"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"برنامه‌ها"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"اثر انگشتانتان دیگر قابل‌شناسایی نیست. «قفل‌گشایی با اثر انگشت» را دوباره راه‌اندازی کنید."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"‏دستگاه USB هنگام قفل بودن وصل شده است"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"‏دستگاه USB هنگام قفل بودن Android متصل شده است. برای استفاده از دستگاه، لطفاً ابتدا قفل Android را باز کنید و سپس دستگاه USB را دوباره وارد کنید."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"‏فعالیت مشکوک USB"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"‏نشانِ داده USB غیرفعال شده است."</string>
</resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 1b53196c9808..5e3913e86d8b 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Irrota"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Irrota <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Sovellustiedot"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Suorajaon vastaanottajat"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Sovellusehdotukset"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Sovelluslista"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Aloitetaan esittelyä…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Palautetaan asetuksia…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Suuntanäppäimistö: vasen painike"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Suuntanäppäimistö: oikea painike"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Suuntanäppäimistö: keskipainike"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Automaattisen klikkaustyypin asetuspaneeli"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Ykköspainike"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Keskeytä"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Sijainti"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> on nyt rajoitettujen ryhmässä"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"lähetti kuvan"</string>
@@ -2484,7 +2485,7 @@
<string name="satellite_manual_selection_state_popup_cancel" msgid="973605633339469252">"Takaisin"</string>
<string name="unarchival_session_app_label" msgid="6811856981546348205">"Odottaa…"</string>
<string name="satellite_sos_available_notification_title" msgid="5396708154268096124">"Satellite SOS on nyt käytettävissä"</string>
- <string name="satellite_sos_available_notification_summary" msgid="1727088812951848330">"Voit lähettää viestin hätäkeskukseen, jos sinulla ei ole mobiili‑ tai Wi-Fi-verkkoyhteyttä. Google Messages täytyy valita oletusviestisovellukseksi."</string>
+ <string name="satellite_sos_available_notification_summary" msgid="1727088812951848330">"Voit lähettää viestin hätäkeskukseen, jos sinulla ei ole mobiili‑ tai Wi-Fi-verkkoyhteyttä. Google Messagesin on oltava oletustekstiviestisovelluksesi."</string>
<string name="satellite_sos_not_supported_notification_title" msgid="2659100983227637285">"Satellite SOS ei tueta"</string>
<string name="satellite_sos_not_supported_notification_summary" msgid="1071762454665310549">"Satellite SOS ei tueta tällä laitteella"</string>
<string name="satellite_sos_not_provisioned_notification_title" msgid="8564738683795406715">"Satellite SOS ei ole otettu käyttöön"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Sovellukset"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Sormenjälkiäsi ei voi enää tunnistaa. Ota sormenjälkiavaus uudelleen käyttöön."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB-laite kytkettynä, kun lukitus on päällä"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB-laite on kytkettynä, kun Android on lukittu. Jos haluat käyttää laitetta, avaa ensin Androidin lukitus ja kytke USB-laite uudelleen."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Epäilyttävää USB-toimintaa"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB-datasignaali on poistettu käytöstä."</string>
</resources>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index d742d87f7ed7..6ef3e21c6a63 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Annuler l\'épinglage"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Annuler l\'épinglage de <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Détails de l\'appli"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Cibles du partage direct"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Applis suggérées"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Liste d\'applis"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Démarrage de la démonstration en cours…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Réinitialisation de l\'appareil en cours…"</string>
@@ -2249,14 +2246,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Pavé directionnel – gauche"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Pavé directionnel – droite"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Pavé directionnel – centre"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Panneau de configuration des paramètres de type clic automatique"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Clic gauche"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pause"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> a été placé dans le compartiment RESTREINT"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g> :"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"a envoyé une image"</string>
@@ -2531,12 +2532,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Applications"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Vos empreintes digitales ne peuvent plus être reconnues. Reconfigurez le Déverrouillage par empreinte digitale."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"L\'appareil USB est branché quand Android est verrouillé"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"L\'appareil USB est branché quand Android est verrouillé. Pour utiliser l\'appareil, veuillez d\'abord déverrouiller Android, puis réinsérer l\'appareil USB."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Activité USB suspecte"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Le signal de données USB a été désactivé."</string>
</resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index f0727d69c325..4fd8601a1d8a 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Retirer"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Retirer <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Infos sur l\'appli"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Cibles de partage direct"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Suggestions d\'applications"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Liste des applications"</string>
<string name="negative_duration" msgid="1938335096972945232">"− <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Lancement de la démo…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Réinitialisation…"</string>
@@ -2249,14 +2246,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Pavé directionnel - Gauche"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Pavé directionnel - Droite"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Pavé directionnel - Centre"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Panneau des paramètres du type de clic automatique"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Clic gauche"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pause"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> a été placé dans le bucket RESTRICTED"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g> :"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"a envoyé une image"</string>
@@ -2531,12 +2532,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Applications"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Vos empreintes ne peuvent plus être reconnues. Reconfigurez le déverrouillage par empreinte digitale."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Appareil USB branché alors que l\'appareil Android est verrouillé"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"L\'appareil USB est branché alors que l\'appareil Android est verrouillé. Pour utiliser l\'appareil, veuillez d\'abord déverrouiller Android, puis brancher à nouveau l\'appareil USB."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Activité USB suspecte"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Le signal de données USB a été désactivé."</string>
</resources>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index bb41a4f5fd3d..4ce3fc33b7e9 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Deixar de fixar"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Deixar de fixar a <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Información da app"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Destinatarios da función de compartir directamente"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Suxestións de aplicacións"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Lista de aplicacións"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Iniciando demostración…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Restablecendo dispositivo…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Cruceta: esquerda"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Cruceta: dereita"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Cruceta: centro"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Panel de configuración do tipo de clic automático"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Clic co botón esquerdo do rato"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausa"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posición"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> incluíuse no grupo RESTRINXIDO"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"enviouse unha imaxe"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Mapas"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplicacións"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Xa non se recoñecen as túas impresións dixitais. Configura de novo o desbloqueo dactilar."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Dispositivo USB conectado cando Android está bloqueado"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"O dispositivo USB está conectado cando Android está bloqueado. Para usalo, primeiro desbloquea Android e despois volve inserir o dispositivo USB."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Actividade USB sospeitosa"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Desactivouse o indicador de datos USB."</string>
</resources>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index ff32df0b26fe..fcba3feb7819 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"અનપિન કરો"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g>ને અનપિન કરો"</string>
<string name="app_info" msgid="6113278084877079851">"ઍપની માહિતી"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"સીધા શેર કરવાના લક્ષ્યો"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"ઍપના સૂચનો"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"ઍપની સૂચિ"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"ડેમો પ્રારંભ કરી રહ્યાં છે…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"ઉપકરણ ફરીથી સેટ કરી રહ્યાં છે…"</string>
@@ -2248,14 +2245,14 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"ડી-પૅડ ડાબે"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"ડી-પૅડ જમણે"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"ડી-પૅડ મધ્યમાં"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
- <skip />
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"ઑટોક્લિક પ્રકારના સેટિંગની પૅનલ"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"ડાબું ક્લિક કરો"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"રાઇટ ક્લિક કરો"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"બે વાર ક્લિક કરો"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"ખેંચો"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"સ્ક્રોલ કરો"</string>
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"થોભાવો"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"સ્થિતિ"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>ને પ્રતિબંધિત સમૂહમાં મૂકવામાં આવ્યું છે"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"છબી મોકલી"</string>
@@ -2530,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"ઍપ્લિકેશનો"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"તમારી ફિંગરપ્રિન્ટને હવેથી ઓળખી શકાશે નહીં. ફિંગરપ્રિન્ટ અનલૉક સુવિધાનું ફરી સેટઅપ કરો."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"લૉક કરેલું હોય ત્યારે USB ડિવાઇસ પ્લગ-ઇન હોય છે"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android લૉક હોય ત્યારે USB ડિવાઇસ પ્લગ-ઇન હોય છે. ડિવાઇસનો ઉપયોગ કરવા માટે, કૃપા કરીને પહેલા Android અનલૉક કરો અને પછી USB ડિવાઇસનો ઉપયોગ કરવા માટે તેને ફરી શામેલ કરો."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"શંકાસ્પદ USB ઍક્ટિવિટી"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB ડેટા સિગ્નલ બંધ કરવામાં આવ્યું છે."</string>
</resources>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 393316b2386e..66f0ced39df6 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -329,7 +329,7 @@
<string name="permgroupdesc_location" msgid="1995955142118450685">"इस डिवाइस की जगह तक पहुंचने दें"</string>
<string name="permgrouplab_calendar" msgid="6426860926123033230">"कैलेंडर"</string>
<string name="permgroupdesc_calendar" msgid="6762751063361489379">"आपके कैलेंडर को ऐक्सेस करने की अनुमति"</string>
- <string name="permgrouplab_sms" msgid="795737735126084874">"मैसेज (एसएमएस)"</string>
+ <string name="permgrouplab_sms" msgid="795737735126084874">"एसएमएस"</string>
<string name="permgroupdesc_sms" msgid="5726462398070064542">"मैसेज (एसएमएस) भेजें और देखें"</string>
<string name="permgrouplab_storage" msgid="17339216290379241">"फ़ाइल"</string>
<string name="permgroupdesc_storage" msgid="5378659041354582769">"अपने डिवाइस में मौजूद फ़ाइलों का ऐक्सेस दें"</string>
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"अनपिन करें"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> को अनपिन करें"</string>
<string name="app_info" msgid="6113278084877079851">"ऐप्लिकेशन की जानकारी"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"सीधे तौर पर कॉन्टेंट शेयर करने के लिए चुने गए लोग या ग्रुप"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"सुझाए गए ऐप्लिकेशन"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"ऐप्लिकेशन की सूची"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"डेमो प्रारंभ हो रहा है…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"डिवाइस फिर से रीसेट कर रहा है…"</string>
@@ -2248,14 +2245,14 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"डी-पैड का बाईं ओर वाला बटन"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"डी-पैड का दाईं ओर वाला बटन"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"डी-पैड का बीच वाला बटन"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
- <skip />
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"अपने-आप क्लिक होने की सुविधा वाली सेटिंग का पैनल"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"लेफ़्ट क्लिक करें"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"राइट क्लिक करें"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"दो बार क्लिक करें"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"खींचें और छोड़ें"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"स्क्रोल करें"</string>
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"रोकें"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"पोज़िशन"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> को प्रतिबंधित बकेट में रखा गया है"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"एक इमेज भेजी गई"</string>
@@ -2530,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"मैप"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"ऐप्लिकेशन"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"अब आपके फ़िंगरप्रिंट की पहचान नहीं की जा सकती. फ़िंगरप्रिंट अनलॉक की सुविधा को दोबारा सेट अप करें."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"यूएसबी डिवाइस को, Android डिवाइस के लॉक होने के दौरान प्लग इन किया गया"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"यूएसबी डिवाइस को, Android डिवाइस के लॉक होने के दौरान प्लग इन किया गया. यूएसबी डिवाइस का इस्तेमाल करने के लिए, कृपया पहले Android डिवाइस को अनलॉक करें. इसके बाद, यूएसबी को फिर से इंसर्ट करें."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"यूएसबी से कोई संदिग्ध गतिविधि की गई"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"यूएसबी से डेटा सिग्नल भेजने की प्रोसेस बंद कर दी गई है."</string>
</resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index cc4d29689743..aadf1185883b 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Otkvači"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Otkvači sudionika <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Informacije o aplikaciji"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Osoba/skupina za izravno dijeljenje"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Prijedlozi aplikacija"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Popis aplikacija"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Pokretanje demo-načina..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Vraćanje uređaja na zadano…"</string>
@@ -2251,6 +2248,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"U središtu plohe za smjerove"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Ploča postavki vrste automatskog klika"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Lijevi klik"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Desni klik"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Dvostruki klik"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Povuci"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Pomakni se"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pauziraj"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozicija"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> premješten je u spremnik OGRANIČENO"</string>
@@ -2527,12 +2528,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Karte"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplikacije"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Vaši se otisci prstiju više ne prepoznaju. Ponovo postavite otključavanje otiskom prsta."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB uređaj priključen je kada je zaključan"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB uređaj priključen je kad je Android zaključan. Da biste upotrebljavali uređaj, najprije otključajte Android, a zatim ponovno umetnite USB uređaj da biste ga upotrebljavali."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Sumnjiva aktivnost USB-a"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB podatkovni signal je onemogućen."</string>
</resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index ddfef1aae499..39a4cfcbe0c7 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Feloldás"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> rögzítésének feloldása"</string>
<string name="app_info" msgid="6113278084877079851">"Alkalmazásinfó"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Közvetlen megosztási lehetőségek"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Alkalmazásjavaslatok"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Alkalmazáslista"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Bemutató indítása…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Eszköz visszaállítása…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"D-pad – balra"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"D-pad – jobbra"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"D-pad – középre"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Automatikus kattintás típusának beállításai panel"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Kattintás bal egérgombbal"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Szüneteltetés"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozíció"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"A következő csomag a KORLÁTOZOTT csoportba került: <xliff:g id="PACKAGE_NAME">%1$s</xliff:g>"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"képet küldött"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Térkép"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Alkalmazások"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Az ujjlenyomata már nem ismerhető fel. Állítsa be újra a Feloldás ujjlenyomattal funkciót."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB-eszköz zárolt állapotban csatlakoztatva"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Az USB-eszköz csatlakoztatása az Android rendszer zárolt állapotában történt. Az eszköz használatához először oldja fel az Android zárolását, majd helyezze be újra az USB-eszközt."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Gyanús USB-tevékenység"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Az USB-adatjel le lett tiltva."</string>
</resources>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index 92633245988e..f4b83f2a6540 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -2248,14 +2248,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad-ի «Ձախ» կոճակ"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad-ի «Աջ» կոճակ"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad-ի «Կենտրոն» կոճակ"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Ավտոմատ սեղմման տեսակի կարգավորումների վահանակ"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Ձախ սեղմում"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Դադարեցնել"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Դիրքը"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> փաթեթը գցվեց ՍԱՀՄԱՆԱՓԱԿՎԱԾ զամբյուղի մեջ"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>՝"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"օգտատերը պատկեր է ուղարկել"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 86f711483ed1..ce9a7f6c6bea 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Lepas pin"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Lepas sematan <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Info aplikasi"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Target berbagi langsung"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Saran aplikasi"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Daftar aplikasi"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Memulai demo..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Mereset perangkat..."</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad Kiri"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad Kanan"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad Tengah"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Panel setelan jenis klik otomatis"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Klik kiri"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Jeda"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posisi"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> telah dimasukkan ke dalam bucket DIBATASI"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"mengirim gambar"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplikasi"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Sidik jari Anda tidak dapat dikenali lagi. Siapkan Buka dengan Sidik Jari lagi."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Perangkat USB dicolokkan saat terkunci"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Perangkat USB dicolokkan saat Android terkunci. Untuk menggunakan perangkat, buka kunci Android terlebih dahulu, lalu pasang kembali perangkat USB untuk menggunakannya."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Aktivitas USB yang mencurigakan"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Sinyal data USB telah dinonaktifkan."</string>
</resources>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index 360e3d9815a0..b80efc7878f5 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Losa"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Losa <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Forritsupplýsingar"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Deila beint með"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Tillögð forrit"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Forritalisti"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Byrjar kynningu…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Endurstillir tækið…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Vinstrihnappur stýriflatar"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Hægrihnappur stýriflatar"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Miðjuhnappur stýriflatar"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Stillingasvæði fyrir tegund sjálfvirks smells"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Vinstrismellur"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Hlé"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Staðsetning"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> var sett í flokkinn TAKMARKAÐ"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"sendi mynd"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Kort"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Forrit"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Ekki er lengur hægt að bera kennsl á fingraförin þín. Settu fingrafarskenni upp aftur."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB-tæki stungið í samband á meðan tæki var læst"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB-tæki stungið í samband á meðan Android-tækið var læst. Byrjaðu á því að taka Android-tækið úr lás og stingdu síðan USB-tækinu í samband til að nota það."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Grunsamleg USB-virkni"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Slökkt var á USB-gagnamerki."</string>
</resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 1914ea5ec6b5..3ca9f7f8c7f1 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -333,11 +333,11 @@
<string name="permgrouplab_sms" msgid="795737735126084874">"SMS"</string>
<string name="permgroupdesc_sms" msgid="5726462398070064542">"Possono inviare e visualizzare SMS"</string>
<string name="permgrouplab_storage" msgid="17339216290379241">"File"</string>
- <string name="permgroupdesc_storage" msgid="5378659041354582769">"accedere ai file sul tuo dispositivo"</string>
+ <string name="permgroupdesc_storage" msgid="5378659041354582769">"Possono accedere ai file sul tuo dispositivo"</string>
<string name="permgrouplab_readMediaAural" msgid="1858331312624942053">"Musica e audio"</string>
- <string name="permgroupdesc_readMediaAural" msgid="7565467343667089595">"accedere a musica e audio sul tuo dispositivo"</string>
+ <string name="permgroupdesc_readMediaAural" msgid="7565467343667089595">"Possono accedere a musica e audio sul tuo dispositivo"</string>
<string name="permgrouplab_readMediaVisual" msgid="4724874717811908660">"Foto e video"</string>
- <string name="permgroupdesc_readMediaVisual" msgid="4080463241903508688">"accedere a foto e video sul tuo dispositivo"</string>
+ <string name="permgroupdesc_readMediaVisual" msgid="4080463241903508688">"Possono accedere a foto e video sul tuo dispositivo"</string>
<string name="permgrouplab_microphone" msgid="2480597427667420076">"Microfono"</string>
<string name="permgroupdesc_microphone" msgid="1047786732792487722">"Possono registrare audio"</string>
<string name="permgrouplab_activityRecognition" msgid="3324466667921775766">"Attività fisica"</string>
@@ -345,7 +345,7 @@
<string name="permgrouplab_camera" msgid="9090413408963547706">"Fotocamera"</string>
<string name="permgroupdesc_camera" msgid="7585150538459320326">"Possono scattare foto e registrare video"</string>
<string name="permgrouplab_nearby_devices" msgid="5529147543651181991">"Dispositivi nelle vicinanze"</string>
- <string name="permgroupdesc_nearby_devices" msgid="3213561597116913508">"rilevare e connettersi a dispositivi nelle vicinanze"</string>
+ <string name="permgroupdesc_nearby_devices" msgid="3213561597116913508">"Possono rilevare e connettersi a dispositivi nelle vicinanze"</string>
<string name="permgrouplab_calllog" msgid="7926834372073550288">"Registri chiamate"</string>
<string name="permgroupdesc_calllog" msgid="2026996642917801803">"Possono leggere e modificare il registro chiamate del telefono"</string>
<string name="permgrouplab_phone" msgid="570318944091926620">"Telefono"</string>
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Stacca"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Sblocca <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Informazioni app"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Target di condivisione diretta"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"App suggerite"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Elenco di app"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Avvio della demo…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Reset del dispositivo…"</string>
@@ -2249,14 +2246,14 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"D-pad - Sinistra"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"D-pad - Destra"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"D-pad - Centro"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
- <skip />
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Riquadro impostazioni del tipo di clic automatico"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Clic sinistro"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Clic con il tasto destro del mouse"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Doppio clic"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Trascina"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Scorri"</string>
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Metti in pausa"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posizione"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> è stato inserito nel bucket RESTRICTED"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ha inviato un\'immagine"</string>
@@ -2531,12 +2528,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Applicazioni"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Non è più possibile riconoscere le tue impronte. Riconfigura lo Sblocco con l\'Impronta."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Dispositivo USB collegato quando bloccato"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Il dispositivo USB è collegato quando Android è bloccato. Per usare il dispositivo, sblocca prima Android e poi reinserisci il dispositivo USB."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Attività USB sospetta"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"L\'indicatore di dati USB è stato disattivato."</string>
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 5e0df4708c03..cfa0987c15d4 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1786,7 +1786,7 @@
<string name="hearing_aids_feature_name" msgid="1125892105105852542">"מכשירי שמיעה"</string>
<string name="hearing_device_status_disconnected" msgid="497547752953543832">"מנותק"</string>
<string name="hearing_device_status_connected" msgid="2149385149669918764">"מחובר"</string>
- <string name="hearing_device_status_active" msgid="4770378695482566032">"פעיל"</string>
+ <string name="hearing_device_status_active" msgid="4770378695482566032">"מצב פעיל"</string>
<string name="hearing_device_status_loading" msgid="5717083847663109747">"בטעינה"</string>
<string name="accessibility_shortcut_enabling_service" msgid="5473495203759847687">"לחצני עוצמת הקול נלחצו בלחיצה ארוכה. שירות <xliff:g id="SERVICE_NAME">%1$s</xliff:g> הופעל."</string>
<string name="accessibility_shortcut_disabling_service" msgid="8675244165062700619">"לחצני עוצמת הקול נלחצו בלחיצה ארוכה. שירות <xliff:g id="SERVICE_NAME">%1$s</xliff:g> הושבת."</string>
@@ -2249,14 +2249,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"‏לחצן שמאלי ב-Dpad"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"‏לחצן ימני ב-Dpad"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"‏לחצן אמצעי ב-Dpad"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"חלונית ההגדרות של סוג הקליק האוטומטי"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"לחיצה שמאלית"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"השהיה"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"מיקום"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> התווספה לקטגוריה \'מוגבל\'"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"נשלחה תמונה"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index ac37d558e8bb..ad770aaae3ac 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"固定を解除"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> の固定を解除"</string>
<string name="app_info" msgid="6113278084877079851">"アプリ情報"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"ダイレクト シェア ターゲット"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"アプリの候補"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"アプリリスト"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"デモを開始しています…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"デバイスをリセットしています…"</string>
@@ -2250,6 +2247,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"D-pad: 中央"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"自動クリックの種類の設定パネル"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"左クリック"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"右クリック"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"ダブルクリック"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"ドラッグ"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"スクロール"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"一時停止"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"位置"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> は RESTRICTED バケットに移動しました。"</string>
@@ -2526,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"マップ"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"アプリ"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"指紋を認識できなくなりました。指紋認証をもう一度設定してください。"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"ロック状態で USB デバイスが接続されました"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android がロックされている状態で USB デバイスが接続されています。デバイスを使用するには、まず Android のロックを解除してから、USB デバイスを再挿入してください。"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"不審な USB アクティビティ"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB データシグナルが無効になっています。"</string>
</resources>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index 2dee93b1dc24..481c422ae22c 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"ჩამაგრების მოხსნა"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g>-ის ჩამაგრების მოხსნა"</string>
<string name="app_info" msgid="6113278084877079851">"აპის შესახებ"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"პირდაპირი გაზიარების მიზნები"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"აპის შეთავაზებები"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"აპების სია"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"მიმდინარეობს დემონსტრაციის დაწყება…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"მიმდინარეობს მოწყობილობის გადაყენება…"</string>
@@ -2250,6 +2247,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad ცენტრი"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"ავტოდაწკაპუნების ტიპის პარამეტრების არე"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"მარცხენა დაწკაპუნება"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"მარჯვენა დაწკაპუნება"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"ორმაგი დაწკაპუნება"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"ჩავლება"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"გადაადგილება"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"პაუზა"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"პოზიცია"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> მოთავსდა კალათაში „შეზღუდული“"</string>
@@ -2526,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"აპლიკაციები"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"თქვენი თითის ანაბეჭდის ამოცნობა ვეღარ ხერხდება. ხელახლა დააყენეთ ანაბეჭდით განბლოკვა."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB მოწყობილობა ჩართულია, როდესაც ჩაკეტილია"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB მოწყობილობა ჩართულია, როდესაც Android ჩაკეტილია. მოწყობილობის გამოსაყენებლად ჯერ განბლოკეთ Android და შემდეგ ხელახლა ჩადეთ USB მოწყობილობა მის გამოსაყენებლად."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"საეჭვო USB აქტივობა"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB მონაცემთა სიგნალი გამორთულია."</string>
</resources>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index 6655e5d31590..70412bed6215 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Босату"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> босату"</string>
<string name="app_info" msgid="6113278084877079851">"Қолданба ақпараты"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Тікелей бөлісу опциялары"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Қолданба ұсыныстары"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Қолданбалар тізімі"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Демо нұсқасы іске қосылуда..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Құрылғы бастапқы күйге қайтарылуда..."</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Сол жақ Dpad түймесі"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Оң жақ Dpad түймесі"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Ортаңғы Dpad түймесі"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Автоматты басу түрі параметрлері панелі"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Сол жағын басу"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Кідірту"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Орналастыру"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ШЕКТЕЛГЕН себетке салынды."</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"сурет жіберілді"</string>
@@ -2266,7 +2267,7 @@
<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>
- <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Әкімшіңіз бөгеген"</string>
+ <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>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Қолданбалар"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Саусағыңыздың іздері бұдан былай танылмайды. Саусақ ізімен ашу функциясын қайта реттеу"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB құрылғысы құлыптаулы кезде жалғанған"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB құрылғысы Android құрылғысы құлыптаулы кезде жалғанған. Құрылғыны пайдалану үшін алдымен Android құрылғысының құлпын ашып, содан кейін USB құрылғысын қайта енгізіңіз."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"USB-ге қатысты күдікті әрекет"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB дерек сигналы өшірілді."</string>
</resources>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 3d78797d9a70..fdd522bd0ede 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"មិនខ្ទាស់"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"ដកខ្ទាស់ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"ព័ត៌មាន​កម្មវិធី"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"គោលដៅចែករំលែកដោយផ្ទាល់"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"ការណែនាំកម្មវិធី"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"បញ្ជីកម្មវិធី"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"កំពុងចាប់ផ្តើមការបង្ហាញសាកល្បង…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"កំពុងកំណត់ឧបករណ៍ឡើងវិញ…"</string>
@@ -2250,6 +2247,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad កណ្ដាល"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"ផ្ទាំងការកំណត់ប្រភេទចុចស្វ័យប្រវត្តិ"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"ចុចម៉ៅស៍ខាងឆ្វេង"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"ចុចម៉ៅស៍ខាងស្ដាំ"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"ចុចពីរដង"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"អូស"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"រំកិល"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"ផ្អាក"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"ទីតាំង"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ត្រូវបានដាក់​ទៅក្នុងធុង​ដែលបានដាក់កំហិត"</string>
@@ -2526,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"ផែនទី"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"កម្មវិធី"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"លែងអាចសម្គាល់ស្នាមម្រាមដៃរបស់អ្នកបានទៀតហើយ។ សូមរៀបចំការដោះសោ​ដោយស្កេន​ស្នាមម្រាមដៃម្ដងទៀត។"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"បានដោតឧបករណ៍ USB នៅពេលជាប់សោ"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"ឧបករណ៍ USB ត្រូវបានដោត នៅពេល Android ត្រូវបានចាក់សោ។ ដើម្បីប្រើឧបករណ៍ សូមដោះសោ Android ជាមុនសិន បន្ទាប់មកដោតឧបករណ៍ USB ឡើងវិញ ដើម្បីប្រើប្រាស់វា។"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"សកម្មភាព USB ដែលគួរឱ្យសង្ស័យ"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"សញ្ញាទិន្នន័យ USB ត្រូវបានបិទ។"</string>
</resources>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index 1d89ad7c08e5..887938cce097 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"ಅನ್‌ಪಿನ್"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> ಅನ್ನು ಅನ್‌ಪಿನ್ ಮಾಡಿ"</string>
<string name="app_info" msgid="6113278084877079851">"ಆ್ಯಪ್ ಮಾಹಿತಿ"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"ನೇರ ಹಂಚಿಕೊಳ್ಳುವಿಕೆ ಟಾರ್ಗೆಟ್‌ಗಳು"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"ಆ್ಯಪ್ ಸಲಹೆಗಳು"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"ಆ್ಯಪ್ ಪಟ್ಟಿ"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"ಡೆಮೋ ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"ಸಾಧನ ಮರುಹೊಂದಿಸಲಾಗುತ್ತಿದೆ..."</string>
@@ -2248,14 +2245,14 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad ನ ಎಡಭಾಗದ ಬಟನ್"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad ನ ಬಲಭಾಗದ ಬಟನ್"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad ನ ಮಧ್ಯದ ಬಟನ್"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
- <skip />
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"ಆಟೋಕ್ಲಿಕ್ ಪ್ರಕಾರದ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಪ್ಯಾನೆಲ್"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"ಎಡ-ಕ್ಲಿಕ್"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"ಬಲ-ಕ್ಲಿಕ್"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"ಡಬಲ್‌ ಕ್ಲಿಕ್"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"ವಿರಾಮಗೊಳಿಸಿ"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"ಸ್ಥಾನ"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ಅನ್ನು ನಿರ್ಬಂಧಿತ ಬಕೆಟ್‌ಗೆ ಹಾಕಲಾಗಿದೆ"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ಚಿತ್ರವನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ"</string>
@@ -2530,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"ಆ್ಯಪ್‌ಗಳು"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"ನಿಮ್ಮ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌ಗಳನ್ನು ಇನ್ನು ಮುಂದೆ ಗುರುತಿಸಲಾಗುವುದಿಲ್ಲ. ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಮತ್ತೊಮ್ಮೆ ಸೆಟಪ್ ಮಾಡಿ."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"ಲಾಕ್ ಆಗಿರುವಾಗ USB ಸಾಧನವನ್ನು ಪ್ಲಗ್-ಇನ್ ಮಾಡಲಾಗುತ್ತದೆ"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android ಲಾಕ್ ಆಗಿರುವಾಗ USB ಸಾಧನವನ್ನು ಪ್ಲಗ್-ಇನ್ ಮಾಡಲಾಗುತ್ತದೆ. ಸಾಧನವನ್ನು ಬಳಸಲು, ಮೊದಲು Android ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿ ಮತ್ತು ನಂತರ ಅದನ್ನು ಬಳಸಲು USB ಸಾಧನವನ್ನು ಪುನಃ ಸೇರಿಸಿ."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"ಅನುಮಾನಾಸ್ಪದ USB ಚಟುವಟಿಕೆ"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB ಡೇಟಾ ಸಿಗ್ನಲ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."</string>
</resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index ad1bdae6fc30..fc392711bd57 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"고정 해제"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> 고정 해제"</string>
<string name="app_info" msgid="6113278084877079851">"앱 정보"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"직접 공유 타겟"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"앱 제안"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"앱 목록"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"데모 시작 중..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"기기 초기화 중..."</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"방향 패드 왼쪽"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"방향 패드 오른쪽"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"방향 패드 가운데"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"자동 클릭 유형 설정 패널"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"왼쪽 클릭"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"일시중지"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"위치"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> 항목이 RESTRICTED 버킷으로 이동함"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"이미지 보냄"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"지도"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"애플리케이션"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"지문을 더 이상 인식할 수 없습니다. 지문 잠금 해제를 다시 설정하세요."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"잠금 상태에서 USB 기기가 연결됨"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android가 잠겨 있는 상태에서 USB 기기가 연결되었습니다. 기기를 사용하려면 먼저 Android를 잠금 해제한 다음 USB 기기를 다시 삽입하세요."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"의심스러운 USB 활동"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB 데이터 신호가 사용 중지됨"</string>
</resources>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index cb4edb963c76..f8c0022f0f31 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Кадоодон алып коюу"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> бошотуу"</string>
<string name="app_info" msgid="6113278084877079851">"Колдонмо тууралуу"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Түздөн-түз бөлүшүлгөндөрдү алуучулар"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Сунушталган колдонмолор"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Колдонмолордун тизмеси"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Демо режим башталууда…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Түзмөк баштапкы абалга келтирилүүдө…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad\'дын сол баскычы"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad\'дын оң баскычы"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad\'дын ортоңку баскычы"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Авточыкылдатуу түрүнүн параметрлеринин панели"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Сол баскычын чыкылдатуу"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Тындыруу"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Орду"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ЧЕКТЕЛГЕН чакага коюлган"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"сүрөт жөнөттү"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Карталар"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Колдонмолор"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Манжаңыздын изи мындан ары таанылбайт. Манжа изи менен ачуу функциясын кайрадан тууралаңыз."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB түзмөк Android кулпуланып турганда туташтырылды"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB түзмөк Android кулпуланганда туташтырылды. Түзмөктү колдонуу үчүн алгач Android\'дин кулпусун ачып, USB түзмөктү кайрадан сайыңыз."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"USB\'ге байланыштуу шектүү аракет"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB сигналы өчүрүлдү."</string>
</resources>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index 4b426c818179..429f3f79cf64 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"ຖອນປັກໝຸດ"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"ຖອດປັກມຸດ <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"ຂໍ້ມູນແອັບ"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"ເປົ້າໝາຍການແບ່ງປັນໂດຍກົງ"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"ການແນະນຳແອັບ"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"ລາຍຊື່ແອັບ"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"ກຳລັງເລີ່ມເດໂມ…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"ກຳລັງຣີເຊັດອຸປະກອນ…"</string>
@@ -2250,6 +2247,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad ກາງ"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"ແຜງການຕັ້ງຄ່າປະເພດການຄລິກອັດຕະໂນມັດ"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"ຄລິກຊ້າຍ"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"ຄລິກຂວາ"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"ຄລິກສອງເທື່ອ"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"ລາກ"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"ເລື່ອນ"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"ຢຸດຊົ່ວຄາວ"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"ຕຳແໜ່ງ"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ຖືກວາງໄວ້ໃນກະຕ່າ \"ຈຳກັດ\" ແລ້ວ"</string>
@@ -2526,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"ແຜນທີ່"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"ແອັບພລິເຄຊັນ"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"ລະບົບບໍ່ສາມາດຈຳແນກລາຍນິ້ວມືຂອງທ່ານໄດ້ອີກຕໍ່ໄປ. ກະລຸນາຕັ້ງຄ່າການປົດລັອກດ້ວຍລາຍນິ້ວມືອີກຄັ້ງ."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"ທ່ານສຽບອຸປະກອນ USB ໃນຂະນະທີ່ລັອກຢູ່"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"ທ່ານສຽບອຸປະກອນ USB ໃນຂະນະທີ່ Android ລັອກຢູ່. ເພື່ອໃຊ້ອຸປະກອນ, ກະລຸນາປົດລັອກ Android ກ່ອນແລ້ວຈຶ່ງສຽບອຸປະກອນ USB ອີກຄັ້ງເພື່ອນຳໃຊ້."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"ການເຄື່ອນໄຫວຂອງ USB ທີ່ໜ້າສົງໄສ"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"ສັນຍານຂໍ້ມູນຂອງ USB ຖືກປິດການນຳໃຊ້."</string>
</resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 544cd4108e02..3ca681bffc63 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -2090,12 +2090,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Atsegti"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Atsegti <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Programos informacija"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Tiesioginio bendrinimo paskirties vietos"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Siūlomos programos"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Programų sąrašas"</string>
<string name="negative_duration" msgid="1938335096972945232">"–<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Paleidžiama demonstracinė versija…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Įrenginys nustatomas iš naujo…"</string>
@@ -2250,14 +2247,14 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Valdymo pultas – kairėn"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Valdymo pultas – dešinėn"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Valdymo pultas – centras"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
- <skip />
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Automatinio paspaudimo tipo nustatymų skydelis"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Spustelėti kairiuoju klavišu"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Spustelėti dešiniuoju klavišu"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Dukart spustelėti"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Vilkti"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Slinkti"</string>
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pristabdyti"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozicija"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"„<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>“ įkeltas į grupę APRIBOTA"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"išsiuntė vaizdą"</string>
@@ -2532,12 +2529,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Žemėlapiai"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Programos"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Nebegalima atpažinti jūsų piršto atspaudų. Dar kartą nustatykite atrakinimą piršto atspaudu."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB įrenginys prijungtas, kai užrakintas"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB įrenginys prijungtas, kai „Android“ užrakintas. Jei norite naudoti įrenginį, pirmiausia atrakinkite „Android“, tada vėl įkiškite USB įrenginį, kad galėtumėte jį naudoti."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Įtartina USB veikla"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB duomenų signalas išjungtas."</string>
</resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 02e93395237c..1e7ffd145eac 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Atspraust"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Atspraust lietotni <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Lietotnes informācija"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Tiešās kopīgošanas adresāti"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Ieteicamās lietotnes"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Lietotņu saraksts"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Notiek demonstrācijas palaišana..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Notiek ierīces atiestatīšana..."</string>
@@ -2249,14 +2246,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Virzienu slēdzis — pa kreisi"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Virzienu slēdzis — pa labi"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Virzienu slēdzis — centrs"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Automātiskās klikšķināšanas veida iestatījumu panelis"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Noklikšķināt ar peles kreiso pogu"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pārtraukt"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozīcija"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Pakotne “<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>” ir ievietota ierobežotā kopā."</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"nosūtīts attēls"</string>
@@ -2531,12 +2532,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Lietojumprogrammas"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Jūsu pirkstu nospiedumus vairs nevar atpazīt. Vēlreiz iestatiet autorizāciju ar pirksta nospiedumu."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB ierīce tika pievienota, kad Android ierīce bija bloķēta"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB ierīce tika pievienota, kad Android ierīce bija bloķēta. Lai izmantotu ierīci, vispirms atbloķējiet Android ierīci un pēc tam atkārtoti pievienojiet USB ierīci."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Aizdomīgas darbības ar USB"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB datu signāls ir atspējots."</string>
</resources>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index df101f24f158..c1a7c1dc5739 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Откачете"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Откачи <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Информации за апликација"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Директни цели на споделување"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Предлози за апликации"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Список со апликации"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Се вклучува демонстрацијата…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Се ресетира уредот…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Навигациско копче за налево"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Навигациско копче за надесно"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Навигациско копче за средина"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Табла со поставки за вид автоматско кликнување"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Кликни со лево копче"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Паузирај"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Позиционирај"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> е ставен во корпата ОГРАНИЧЕНИ"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"испрати слика"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Карти"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Апликации"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Вашите отпечатоци веќе не може да се препознаат. Поставете „Отклучување со отпечаток“ повторно."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB-уредот е приклучен кога е заклучен"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB-уредот е приклучен кога Android е заклучен. За да го користите уредот, прво отклучете го Android, па вметнете го USB-уредот повторно за да го користите."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Сомнителна активност на USB-уредот"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Сигналот со податоци преку USB е оневозможен."</string>
</resources>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index b5ded52f10b7..5c31433e9456 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"അൺപിൻ ചെയ്യുക"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> അൺപിൻ ചെയ്യുക"</string>
<string name="app_info" msgid="6113278084877079851">"ആപ്പ് വിവരം"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"നേരിട്ടുള്ള പങ്കിടൽ ടാർഗറ്റുകൾ"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"ആപ്പ് നിർദ്ദേശങ്ങൾ"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"ആപ്പ് ലിസ്റ്റ്"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"ഡെമോ ആരംഭിക്കുന്നു…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"ഉപകരണം പുനക്രമീകരിക്കുന്നു…"</string>
@@ -2250,6 +2247,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad സെന്റർ"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"ഓട്ടോക്ലിക്ക് തരം ക്രമീകരണ പാനല്‍"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"ഇടത് ക്ലിക്ക്"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"വലത്-ക്ലിക്ക്"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"ഡബിൾ ക്ലിക്ക്"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"വലിച്ചിടുക"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"സ്‌ക്രോൾ ചെയ്യുക"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"താൽക്കാലികമായി നിർത്തുക"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"സ്ഥാനം"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> നിയന്ത്രിത ബക്കറ്റിലേക്ക് നീക്കി"</string>
@@ -2526,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"ആപ്പുകൾ"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"നിങ്ങളുടെ ഫിംഗർപ്രിന്റുകൾ ഇനി തിരിച്ചറിയാനാകില്ല. ഫിംഗർപ്രിന്റ് അൺലോക്ക് വീണ്ടും സജ്ജീകരിക്കുക."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"ലോക്കായിരിക്കുമ്പോഴാണ് USB ഉപകരണം പ്ലഗ്-ഇൻ ചെയ്തത്"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android ലോക്കായിരിക്കുമ്പോഴാണ് USB ഉപകരണം പ്ലഗ്-ഇൻ ചെയ്തത്. ഉപകരണം ഉപയോഗിക്കാൻ ആദ്യം Android അൺലോക്ക് ചെയ്യുക, ശേഷം USB ഉപകരണം വീണ്ടും ഇൻസേർട്ട് ചെയ്ത് ഉപയോഗിക്കുക."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"സംശയാസ്പദമായ USB ആക്റ്റിവിറ്റി"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB ഡാറ്റാ സിഗ്‌നൽ പ്രവർത്തനരഹിതമാക്കി."</string>
</resources>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index a61bd7fbf1da..24637fa0b323 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Unpin"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g>-г тогтоосныг болиулах"</string>
<string name="app_info" msgid="6113278084877079851">"Аппын мэдээлэл"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Шууд хуваалцах сонголтууд"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Санал болгож буй аппууд"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Аппын жагсаалт"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Жишээг эхлүүлж байна…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Төхөөрөмжийг шинэчилж байна…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad зүүн"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad баруун"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad гол"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Автомат товшилтын төрлийн тохиргооны түр зуурын самбар"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Зүүн талыг товших"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Түр зогсоох"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Байрлал"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>-г ХЯЗГААРЛАСАН сагс руу орууллаа"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"зураг илгээсэн"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Газрын зураг"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Аппликэйшн"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Таны хурууны хээг цаашид таних боломжгүй. Хурууны хээгээр түгжээ тайлахыг дахин тохируулна уу."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Түгжээтэй үед USB төхөөрөмж залгаатай байна"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android-г түгжсэн үед USB төхөөрөмж залгаатай байна. Төхөөрөмжийг ашиглахын тулд эхлээд Android-н түгжээг тайлж, дараа нь USB төхөөрөмжийг ашиглахын тулд дахин оруулна уу."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"USB-н сэжигтэй үйл ажиллагаа"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB-н өгөгдлийн дохиог идэвхгүй болгосон."</string>
</resources>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index 3f2e57f5163a..0717eb976261 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"अनपिन करा"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> ला अनपिन करा"</string>
<string name="app_info" msgid="6113278084877079851">"अ‍ॅप माहिती"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"थेट शेअर करण्यासंबंधी लक्ष्ये"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"अ‍ॅप सूचना"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"अ‍ॅप सूची"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"डेमो सुरू करत आहे..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"डिव्हाइस रीसेट करत आहे..."</string>
@@ -2248,14 +2245,14 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad डावीकडील"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad चे उजवीकडील"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad चे मधले"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
- <skip />
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"ऑटोक्लिक प्रकाराचे सेटिंग्ज पॅनल"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"लेफ्ट क्लिक करा"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"राइट क्लिक करा"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"डबल क्लिक करा"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"ड्रॅग करा"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"स्क्रोल करा"</string>
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"थांबवा"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"स्थिती"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> हे प्रतिबंधित बादलीमध्ये ठेवण्यात आले आहे"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"इमेज पाठवली आहे"</string>
@@ -2530,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"अ‍ॅप्लिकेशन"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"तुमची फिंगरप्रिंट यापुढे ओळखता येणार नाहीत. फिंगरप्रिंट अनलॉक पुन्हा सेट करा."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"लॉक केलेले असताना USB डिव्हाइस प्लग इन केले आहे"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android लॉक केलेले असताना USB डिव्हाइस प्लग इन केले आहे. डिव्हाइस वापरण्यासाठी, कृपया सर्वप्रथम Android अनलॉक करा आणि त्यानंतर USB डिव्हाइस वापरण्यासाठी ते पुन्हा घाला."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"संशयास्पद USB ॲक्टिव्हिटी"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB डेटा सिग्नल बंद करण्यात आला आहे."</string>
</resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index f9aeec485295..5cac65d3077c 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Nyahsemat"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Nyahsemat <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Maklumat apl"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Sasaran perkongsian langsung"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Cadangan apl"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Senarai apl"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Memulakan tunjuk cara…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Menetapkan semula peranti…"</string>
@@ -2250,6 +2247,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad Tengah"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Panel tetapan jenis autoklik"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Klik kiri"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Klik kanan"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Klik dua kali"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Seret"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Tatal"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Jeda"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Kedudukan"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> telah diletakkan dalam baldi TERHAD"</string>
@@ -2526,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplikasi"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Cap jari anda tidak dapat dicam lagi. Sediakan semula Buka Kunci Cap Jari."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Peranti USB dipalamkan apabila dikunci"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Peranti USB dipalamkan apabila Android dikunci. Untuk menggunakan peranti, sila buka kunci Android dahulu, kemudian masukkan semula peranti USB untuk menggunakan peranti itu."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Aktiviti USB yang mencurigakan"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Isyarat data USB telah dilumpuhkan."</string>
</resources>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 293b316efa00..10bcd1b75d9c 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"ဖြုတ်ပါ"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> ကို ပင်ဖြုတ်ရန်"</string>
<string name="app_info" msgid="6113278084877079851">"အက်ပ်အချက်အလက်"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"တိုက်ရိုက်မျှဝေသည့် ပစ်မှတ်များ"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"အက်ပ်အကြံပြုချက်များ"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"အက်ပ်စာရင်း"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"သရုပ်ပြချက်ကို စတင်နေသည်…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"စက်ပစ္စည်းကို ပြန်လည်သတ်မှတ်နေသည်…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad ဘယ်"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad ညာ"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad အလယ်"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"အော်တိုနှိပ်ခြင်း အမျိုးအစား ဆက်တင်အကန့်"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"ဘယ်ကလစ်"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"ခဏရပ်ရန်"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"နေရာ"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ကို တားမြစ်ထားသော သိမ်းဆည်းမှုအတွင်းသို့ ထည့်ပြီးပါပြီ"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>-"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ပုံပို့ထားသည်"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"အပလီကေးရှင်းများ"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"သင့်လက်ဗွေများကို မသိရှိနိုင်တော့ပါ။ ‘လက်ဗွေသုံး လော့ခ်ဖွင့်ခြင်း’ ထပ်မံစနစ်ထည့်သွင်းပါ။"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"လော့ခ်ချထားချိန်တွင် USB စက်ကို ပလတ်တပ်ထားခြင်း"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android လော့ခ်ချထားချိန်တွင် USB စက်ကို ပလတ်တပ်ထားသည်။ စက်သုံးရန်အတွက် Android ကို အရင်ဖွင့်ပြီး USB စက်ပြန်ထည့်ကာ သုံးပါ။"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"သံသယဖြစ်ဖွယ် USB လုပ်ဆောင်ချက်"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB ဒေတာအချက်ပြမှုကို ပိတ်လိုက်ပါပြီ။"</string>
</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index a79ff1e4d7bf..800f118baea5 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Løsne"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Løsne <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Info om appen"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Direkte delingsmål"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Appforslag"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Appliste"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Starter demo …"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Tilbakestiller enheten …"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Venstre på styrepilene"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Høyre på styrepilene"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Midt på styrepilene"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Innstillingspanel for type autoklikk"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Venstreklikk"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Sett på pause"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Plassér"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> er blitt plassert i TILGANGSBEGRENSET-toppmappen"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"har sendt et bilde"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Apper"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Fingeravtrykkene dine kan ikke gjenkjennes lenger. Konfigurer opplåsing med fingeravtrykk på nytt."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB-enheten er koblet til når den er låst"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB-enheten er koblet til når Android er låst. Før du kan bruke enheten, må du låse opp Android og så sette inn USB-enheten på nytt."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Mistenkelig USB-aktivitet"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB-datasignalet er slått av."</string>
</resources>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index 3f24b2773404..ce0c67ebd8a2 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -351,7 +351,7 @@
<string name="permgroupdesc_phone" msgid="270048070781478204">"फोन कलहरू गर्नुहोस् र व्यवस्थापन गर्नुहोस्"</string>
<string name="permgrouplab_sensors" msgid="9134046949784064495">"बडी सेन्सरहरू"</string>
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"तपाईंको महत्त्वपूर्ण संकेत बारे सेन्सर डेटा पहुँच गर्नुहोस्"</string>
- <string name="permgrouplab_notifications" msgid="5472972361980668884">"सूचनाहरू"</string>
+ <string name="permgrouplab_notifications" msgid="5472972361980668884">"नोटिफिकेसनहरू"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"सूचनाहरू देखाउनुहोस्"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"विन्डो सामग्रीको पुनःबहाली गर्नुहोस्।"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"तपाईँको अन्तरक्रिया भइरहेको विन्डोको सामग्रीको निरीक्षण गर्नुहोस्।"</string>
@@ -877,7 +877,7 @@
<string name="policylab_disableKeyguardFeatures" msgid="5071855750149949741">"स्क्रिन लकका केही सुविधा असक्षम पार्ने"</string>
<string name="policydesc_disableKeyguardFeatures" msgid="6641673177041195957">"स्क्रिन लकका केही सुविधाहरूको प्रयोगमा रोक लगाउन।"</string>
<string-array name="phoneTypes">
- <item msgid="8996339953292723951">"गृह"</item>
+ <item msgid="8996339953292723951">"घर"</item>
<item msgid="7740243458912727194">"मोबाइल"</item>
<item msgid="8526146065496663766">"काम गर्नुहोस्"</item>
<item msgid="8150904584178569699">"कार्य फ्याक्स"</item>
@@ -887,19 +887,19 @@
<item msgid="6216981255272016212">" कस्टम"</item>
</string-array>
<string-array name="emailAddressTypes">
- <item msgid="7786349763648997741">"गृह"</item>
+ <item msgid="7786349763648997741">"घर"</item>
<item msgid="435564470865989199">"काम"</item>
<item msgid="4199433197875490373">"अन्य"</item>
<item msgid="3233938986670468328">" कस्टम"</item>
</string-array>
<string-array name="postalAddressTypes">
- <item msgid="3861463339764243038">"गृह"</item>
+ <item msgid="3861463339764243038">"घर"</item>
<item msgid="5472578890164979109">"काम"</item>
<item msgid="5718921296646594739">"अन्य"</item>
<item msgid="5523122236731783179">" कस्टम"</item>
</string-array>
<string-array name="imAddressTypes">
- <item msgid="588088543406993772">"गृह"</item>
+ <item msgid="588088543406993772">"घर"</item>
<item msgid="5503060422020476757">"काम"</item>
<item msgid="2530391194653760297">"अन्य"</item>
<item msgid="7640927178025203330">" कस्टम"</item>
@@ -920,7 +920,7 @@
<item msgid="8293711853624033835">"Jabber"</item>
</string-array>
<string name="phoneTypeCustom" msgid="5120365721260686814">" कस्टम"</string>
- <string name="phoneTypeHome" msgid="3880132427643623588">"गृह"</string>
+ <string name="phoneTypeHome" msgid="3880132427643623588">"घर"</string>
<string name="phoneTypeMobile" msgid="1178852541462086735">"मोबाइल"</string>
<string name="phoneTypeWork" msgid="6604967163358864607">"काम"</string>
<string name="phoneTypeFaxWork" msgid="6757519896109439123">"कार्य फ्याक्स"</string>
@@ -945,16 +945,16 @@
<string name="eventTypeAnniversary" msgid="4684702412407916888">"वार्षिक समारोह"</string>
<string name="eventTypeOther" msgid="530671238533887997">"अन्य"</string>
<string name="emailTypeCustom" msgid="1809435350482181786">" कस्टम"</string>
- <string name="emailTypeHome" msgid="1597116303154775999">"गृह"</string>
+ <string name="emailTypeHome" msgid="1597116303154775999">"घर"</string>
<string name="emailTypeWork" msgid="2020095414401882111">"काम"</string>
<string name="emailTypeOther" msgid="5131130857030897465">"अन्य"</string>
<string name="emailTypeMobile" msgid="787155077375364230">"मोबाइल"</string>
<string name="postalTypeCustom" msgid="5645590470242939129">" कस्टम"</string>
- <string name="postalTypeHome" msgid="7562272480949727912">"गृह"</string>
+ <string name="postalTypeHome" msgid="7562272480949727912">"घर"</string>
<string name="postalTypeWork" msgid="8553425424652012826">"काम"</string>
<string name="postalTypeOther" msgid="7094245413678857420">"अन्य"</string>
<string name="imTypeCustom" msgid="5653384545085765570">" कस्टम"</string>
- <string name="imTypeHome" msgid="6996507981044278216">"गृह"</string>
+ <string name="imTypeHome" msgid="6996507981044278216">"घर"</string>
<string name="imTypeWork" msgid="2099668940169903123">"काम"</string>
<string name="imTypeOther" msgid="8068447383276219810">"अन्य"</string>
<string name="imProtocolCustom" msgid="4437878287653764692">" कस्टम"</string>
@@ -986,7 +986,7 @@
<string name="relationTypeSister" msgid="3721676005094140671">"बहिनी"</string>
<string name="relationTypeSpouse" msgid="6916682664436031703">"पति-पत्नी"</string>
<string name="sipAddressTypeCustom" msgid="6283889809842649336">" कस्टम"</string>
- <string name="sipAddressTypeHome" msgid="5918441930656878367">"गृह"</string>
+ <string name="sipAddressTypeHome" msgid="5918441930656878367">"घर"</string>
<string name="sipAddressTypeWork" msgid="7873967986701216770">"काम गर्नुहोस्"</string>
<string name="sipAddressTypeOther" msgid="6317012577345187275">"अन्य"</string>
<string name="quick_contacts_not_available" msgid="1262709196045052223">"यो सम्पर्क हेर्न कुनै पनि एप फेला परेन।"</string>
@@ -1408,7 +1408,7 @@
<string name="install_carrier_app_notification_button" msgid="6257740533102594290">"एप डाउनलोड गर्नुहोस्"</string>
<string name="carrier_app_notification_title" msgid="5815477368072060250">"नयाँ SIM घुसाइयो"</string>
<string name="carrier_app_notification_text" msgid="6567057546341958637">"यसलाई सेटअप गर्न ट्याप गर्नुहोस्"</string>
- <string name="time_zone_change_notification_title" msgid="5232503069219193218">"तपाईंको प्रामाणिक समय परिवर्तन गरिएको छ"</string>
+ <string name="time_zone_change_notification_title" msgid="5232503069219193218">"तपाईंको प्रामाणिक समय परिवर्तन भएको छ"</string>
<string name="time_zone_change_notification_body" msgid="6135793674904665585">"तपाईं अहिले <xliff:g id="TIME_ZONE_DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="TIME_ZONE_OFFSET">%2$s</xliff:g>) मा हुनुहुन्छ"</string>
<string name="time_picker_dialog_title" msgid="9053376764985220821">"समय मिलाउनुहोस्"</string>
<string name="date_picker_dialog_title" msgid="5030520449243071926">"मिति मिलाउनुहोस्"</string>
@@ -1758,7 +1758,7 @@
<string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"केही सेकेन्डसम्म दुवै भोल्युम की थिचिराख्नुले <xliff:g id="SERVICE">%1$s</xliff:g> नामक पहुँचसम्बन्धी सुविधा सक्रिय गर्छ। यसले तपाईंको यन्त्रले काम गर्ने तरिका परिवर्तन गर्न सक्छ।\n\nतपाईं सेटिङ &gt; पहुँचमा गई यो सर्टकटमार्फत अर्को सुविधा खुल्ने बनाउन सक्नुहुन्छ।"</string>
<string name="accessibility_shortcut_on" msgid="5463618449556111344">"सक्रिय गर्नुहोस्"</string>
<string name="accessibility_shortcut_off" msgid="3651336255403648739">"सक्रिय नगर्नुहोस्"</string>
- <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"सक्रिय"</string>
+ <string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"अन छ"</string>
<string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"निष्क्रिय"</string>
<string name="accessibility_enable_service_title" msgid="3931558336268541484">"<xliff:g id="SERVICE">%1$s</xliff:g> लाई तपाईंको डिभाइस पूर्ण रूपमा नियन्त्रण गर्न दिने हो?"</string>
<string name="accessibility_service_warning_description" msgid="291674995220940133">"एक्सेसिबिलिटीसम्बन्धी आवश्यकतामा सहयोग गर्ने एपको पूर्ण नियन्त्रण गर्न दिनु उपयुक्त हुन्छ तर अधिकांश एपका हकमा यस्तो नियन्त्रण उपयुक्त हुँदैन।"</string>
@@ -2188,12 +2188,12 @@
<string name="notification_feedback_indicator_silenced" msgid="3799442124723177262">"यस सूचनालाई कम महत्त्वपूर्ण ठानी यसका लागि साइलेन्ट मोड सेट गरिएको छ। प्रतिक्रिया दिन ट्याप गर्नुहोस्।"</string>
<string name="notification_feedback_indicator_promoted" msgid="9030204303764698640">"यस सूचनालाई धेरै महत्त्वपूर्ण सूचनाका रूपमा सेट गरिएको छ। प्रतिक्रिया दिन ट्याप गर्नुहोस्।"</string>
<string name="notification_feedback_indicator_demoted" msgid="8880309924296450875">"यस सूचनालाई कम महत्त्वपूर्ण सूचनाका रूपमा सेट गरिएको छ। प्रतिक्रिया दिन ट्याप गर्नुहोस्।"</string>
- <string name="nas_upgrade_notification_title" msgid="8436359459300146555">"परिष्कृत सूचनाहरू"</string>
- <string name="nas_upgrade_notification_content" msgid="5157550369837103337">"अब परिष्कृत सूचनाहरू नामक सुविधाले कारबाही तथा जवाफहरूसम्बन्धी सुझाव देखाउँछ। Android को एड्याप्टिभ सूचनाहरू नामक सुविधाले अब उप्रान्त काम गर्दैन।"</string>
+ <string name="nas_upgrade_notification_title" msgid="8436359459300146555">"परिष्कृत नोटिफिकेसनहरू"</string>
+ <string name="nas_upgrade_notification_content" msgid="5157550369837103337">"अब परिष्कृत नोटिफिकेसनहरू नामक सुविधाले कारबाही तथा जवाफहरूसम्बन्धी सुझाव देखाउँछ। Android को एड्याप्टिभ नोटिफिकेसनहरू नामक सुविधाले अब उप्रान्त काम गर्दैन।"</string>
<string name="nas_upgrade_notification_enable_action" msgid="3046406808378726874">"ठिक छ"</string>
<string name="nas_upgrade_notification_disable_action" msgid="3794833210043497982">"अफ गर्नुहोस्"</string>
<string name="nas_upgrade_notification_learn_more_action" msgid="7011130656195423947">"थप जान्नुहोस्"</string>
- <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Android १२ मा Android को एड्याप्टिभ सूचनाहरू नामक सुविधालाई परिष्कृत सूचनाहरू नामक सुविधाले प्रतिस्थापन गरेको छ। यो सुविधाले कारबाही तथा जवाफसम्बन्धी सुझाव देखाउँछ र तपाईंका सूचनाहरू व्यवस्थित गर्छ।\n\nपरिष्कृत सूचनाहरू नामक सुविधाले सूचनामा उल्लिखित सम्पर्क व्यक्तिको नाम र म्यासेज जस्ता व्यक्तिगत जानकारीलगायतका सामग्री हेर्न तथा प्रयोग गर्न सक्छ। यो सुविधाले फोन उठाउने तथा \'बाधा नपुऱ्याउनुहोस्\' मोड नियन्त्रण गर्ने कार्यसहित सूचनाहरू हटाउने वा सूचनाहरूको जवाफ दिने कार्य पनि गर्न सक्छ।"</string>
+ <string name="nas_upgrade_notification_learn_more_content" msgid="3735480566983530650">"Android १२ मा Android को एड्याप्टिभ नोटिफिकेसनहरू नामक सुविधालाई परिष्कृत नोटिफिकेसनहरू नामक सुविधाले प्रतिस्थापन गरेको छ। यो सुविधाले कारबाही तथा जवाफसम्बन्धी सुझाव देखाउँछ र तपाईंका नोटिफिकेसनहरू व्यवस्थित गर्छ।\n\nपरिष्कृत नोटिफिकेसनहरू नामक सुविधाले नोटिफिकेसनमा उल्लिखित सम्पर्क व्यक्तिको नाम र म्यासेज जस्ता व्यक्तिगत जानकारीलगायतका सामग्री हेर्न तथा प्रयोग गर्न सक्छ। यो सुविधाले फोन उठाउने तथा \'बाधा नपुऱ्याउनुहोस्\' मोड नियन्त्रण गर्ने कार्यसहित नोटिफिकेसनहरू हटाउने वा नोटिफिकेसनहरूको जवाफ दिने कार्य पनि गर्न सक्छ।"</string>
<string name="dynamic_mode_notification_channel_name" msgid="2986926422100223328">"दिनचर्या मोडको जानकारीमूलक सूचना"</string>
<string name="dynamic_mode_notification_title" msgid="1388718452788985481">"ब्याट्री सेभर अन गरिएको छ"</string>
<string name="dynamic_mode_notification_summary" msgid="1639031262484979689">"ब्याट्रीको आयु बढाउन ब्याट्रीको खपत कम गरिँदै छ"</string>
@@ -2231,7 +2231,7 @@
<string name="accessibility_system_action_home_label" msgid="3234748160850301870">"होम"</string>
<string name="accessibility_system_action_back_label" msgid="4205361367345537608">"पछाडि फर्कनुहोस्"</string>
<string name="accessibility_system_action_recents_label" msgid="4782875610281649728">"हालसालैका एपहरू"</string>
- <string name="accessibility_system_action_notifications_label" msgid="6083767351772162010">"सूचनाहरू"</string>
+ <string name="accessibility_system_action_notifications_label" msgid="6083767351772162010">"नोटिफिकेसनहरू"</string>
<string name="accessibility_system_action_quick_settings_label" msgid="4583900123506773783">"द्रुत सेटिङहरू"</string>
<string name="accessibility_system_action_power_dialog_label" msgid="8095341821683910781">"पावर संवाद"</string>
<string name="accessibility_system_action_lock_screen_label" msgid="5484190691945563838">"लक स्क्रिन"</string>
@@ -2248,14 +2248,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad को बायाँको बटन"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad को दायाँको बटन"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad को बिचको बटन"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"अटोक्लिकको प्रकारसम्बन्धी सेटिङको प्यानल"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"बायाँ क्लिक गर्नुहोस्"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"पज गर्नुहोस्"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"स्थिति"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> लाई प्रतिबन्धित बाल्टीमा राखियो"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"फोटो पठाइयो"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 38bcffab7c33..34666415d87a 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Losmaken"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> losmaken"</string>
<string name="app_info" msgid="6113278084877079851">"App-info"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Doelen voor direct delen"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"App-suggesties"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"App-lijst"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Demo starten…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Apparaat resetten…"</string>
@@ -2250,6 +2247,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"D-pad midden"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Deelvenster met instellingen voor het type automatisch klikken"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Klikken met de linkermuisknop"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Klikken met de rechtermuisknop"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Dubbelklikken"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Slepen"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Scrollen"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pauzeren"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Positie"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> is in de bucket RESTRICTED geplaatst"</string>
@@ -2526,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Kaarten"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Apps"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Je vingerafdrukken worden niet meer herkend. Stel Ontgrendelen met vingerafdruk opnieuw in."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB-apparaat aangesloten terwijl vergrendeld"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Het USB-apparaat is aangesloten terwijl Android is vergrendeld. Als je het apparaat wilt gebruiken, ontgrendel je eerst Android en plaats je het USB-apparaat opnieuw om het te gebruiken."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Verdachte USB-activiteit"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB-gegevenssignaal is uitgezet."</string>
</resources>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index e99010f02be0..418231f5e9b2 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -2042,7 +2042,7 @@
<string name="app_suspended_title" msgid="888873445010322650">"ଆପ୍‌ ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="app_suspended_default_message" msgid="6451215678552004172">"ବର୍ତ୍ତମାନ <xliff:g id="APP_NAME_0">%1$s</xliff:g> ଉପଲବ୍ଧ ନାହିଁ। ଏହା <xliff:g id="APP_NAME_1">%2$s</xliff:g> ଦ୍ଵାରା ପରିଚାଳିତ ହେଉଛି।"</string>
<string name="app_suspended_more_details" msgid="211260942831587014">"ଅଧିକ ଜାଣନ୍ତୁ"</string>
- <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ଆପ୍ ଅନପଜ୍ କରନ୍ତୁ"</string>
+ <string name="app_suspended_unsuspend_message" msgid="1665438589450555459">"ଆପ ପୁଣି ଆରମ୍ଭ କରନ୍ତୁ"</string>
<string name="work_mode_off_title" msgid="6367463960165135829">"ୱାର୍କ ଆପ୍ସକୁ ପୁଣି ଚାଲୁ କରିବେ?"</string>
<string name="work_mode_turn_on" msgid="5316648862401307800">"ପୁଣି ଚାଲୁ କରନ୍ତୁ"</string>
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"ଜରୁରୀକାଳୀନ"</string>
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"ଅନପିନ୍ କରନ୍ତୁ"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g>ରେ ଅନ୍‌ପିନ୍ କରନ୍ତୁ"</string>
<string name="app_info" msgid="6113278084877079851">"ଆପ୍‍ ସୂଚନା"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"ଡାଇରେକ୍ଟ ସେୟାର ଟାର୍ଗେଟ"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"ଆପ ପରାମର୍ଶ"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"ଆପ ତାଲିକା"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"ଡେମୋ ଆରମ୍ଭ କରାଯାଉଛି…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"ଡିଭାଇସ୍‍କୁ ରିସେଟ୍‍ କରାଯାଉଛି…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad ବାମ"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad ଡାହାଣ"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad କେନ୍ଦ୍ର"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"ଅଟୋକ୍ଲିକ ପ୍ରକାର ସେଟିଂସ ପେନେଲ"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"ବାମ ବଟନ କ୍ଲିକ କରନ୍ତୁ"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"ବିରତ କରନ୍ତୁ"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"ସ୍ଥିତି"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>କୁ ପ୍ରତିବନ୍ଧିତ ବକେଟରେ ରଖାଯାଇଛି"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ଏକ ଛବି ପଠାଯାଇଛି"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"ଆପ୍ଲିକେସନ"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"ଆପଣଙ୍କ ଟିପଚିହ୍ନକୁ ଆଉ ଚିହ୍ନଟ କରାଯାଇପାରିବ ନାହିଁ। ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ଅନଲକ ପୁଣି ସେଟ ଅପ କରନ୍ତୁ।"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"ଲକ ଥିବା ସମୟରେ USB ଡିଭାଇସ ପ୍ଲଗ ଇନ ହୋଇଛି"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android ଲକ ଥିବାବେଳେ USB ଡିଭାଇସ ପ୍ଲଗ ଇନ ହୋଇଥାଏ। ଡିଭାଇସ ବ୍ୟବହାର କରିବାକୁ, ଦୟାକରି ପ୍ରଥମେ Android ଅନଲକ କରନ୍ତୁ ଏବଂ ତାପରେ ଏହାକୁ ବ୍ୟବହାର କରିବାକୁ USB ଡିଭାଇସ ପୁଣି ଭର୍ତ୍ତି କରନ୍ତୁ।"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"ସନ୍ଦେହଜନକ USB କାର୍ଯ୍ୟକଳାପ"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB ଡାଟା ସିଗନାଲକୁ ଅକ୍ଷମ କରାଯାଇଛି।"</string>
</resources>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 63765aa11e78..26769a637388 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"ਅਨਪਿੰਨ ਕਰੋ"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> ਨੂੰ ਅਨਪਿੰਨ ਕਰੋ"</string>
<string name="app_info" msgid="6113278084877079851">"ਐਪ ਜਾਣਕਾਰੀ"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"ਸਿੱਧੇ ਤੌਰ \'ਤੇ ਸਾਂਝਾ ਕਰਨ ਲਈ ਟਾਰਗੇਟ ਗਰੁੱਪ"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"ਐਪ ਸੁਝਾਅ"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"ਐਪ ਸੂਚੀ"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"ਡੈਮੋ ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"ਡੀਵਾਈਸ ਰੀਸੈੱਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
@@ -2250,6 +2247,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad ਦਾ ਵਿਚਕਾਰਲਾ ਬਟਨ"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"ਸਵੈ-ਕਲਿੱਕ ਟਾਈਪ ਸੈਟਿੰਗ ਪੈਨਲ"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"ਖੱਬਾ-ਕਲਿੱਕ ਦਬਾਓ"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"ਸੱਜਾ-ਕਲਿੱਕ ਦਬਾਓ"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"ਡਬਲ ਕਲਿੱਕ ਕਰੋ"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"ਘਸੀਟੋ"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"ਸਕ੍ਰੋਲ ਕਰੋ"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"ਰੋਕੋ"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"ਸਥਿਤੀ"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ਨੂੰ ਪ੍ਰਤਿਬੰਧਿਤ ਖਾਨੇ ਵਿੱਚ ਪਾਇਆ ਗਿਆ ਹੈ"</string>
@@ -2526,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"ਐਪਲੀਕੇਸ਼ਨਾਂ"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"ਤੁਹਾਡੇ ਫਿੰਗਰਪ੍ਰਿੰਟਾਂ ਦੀ ਹੁਣ ਪਛਾਣ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ। ਫਿੰਗਰਪ੍ਰਿੰਟ ਅਣਲਾਕ ਦਾ ਦੁਬਾਰਾ ਸੈੱਟਅੱਪ ਕਰੋ।"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"ਲਾਕ ਹੋਣ \'ਤੇ USB ਡੀਵਾਈਸ ਨੂੰ ਪਲੱਗ-ਇਨ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android ਲਾਕ ਹੋਣ \'ਤੇ USB ਡੀਵਾਈਸ ਨੂੰ ਪਲੱਗ-ਇਨ ਕੀਤਾ ਗਿਆ। ਡੀਵਾਈਸ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ, ਕਿਰਪਾ ਕਰਕੇ ਪਹਿਲਾਂ Android ਨੂੰ ਅਣਲਾਕ ਕਰੋ ਅਤੇ ਫਿਰ USB ਡੀਵਾਈਸ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਉਸਨੂੰ ਦੁਬਾਰਾ ਲਗਾਓ।"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"ਸ਼ੱਕੀ USB ਸਰਗਰਮੀ"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB ਡਾਟਾ ਸਿਗਨਲ ਬੰਦ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ।"</string>
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 372608d3af15..e091700ed9d0 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -2090,12 +2090,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Odepnij"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Odepnij: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"O aplikacji"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Odbiorcy udostępniania bezpośredniego"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Sugestie aplikacji"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Lista aplikacji"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Uruchamiam tryb demo…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Resetuję urządzenie…"</string>
@@ -2250,14 +2247,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad – w lewo"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad – w prawo"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad – środek"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Panel ustawień typu automatycznego kliknięcia"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Kliknięcie lewym przyciskiem"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Wstrzymaj"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozycja"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Umieszczono pakiet <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> w zasobniku danych RESTRICTED"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"wysłano obraz"</string>
@@ -2532,12 +2533,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Mapy"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplikacje"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Nie można już rozpoznać Twoich odcisków palców. Skonfiguruj ponownie odblokowywanie odciskiem palca."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Podłączono urządzenie USB przy zablokowanym urządzeniu"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Podłączono urządzenie USB, gdy Android był zablokowany. Aby używać urządzenia USB, najpierw odblokuj Androida, a potem podłącz je ponownie."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Podejrzana aktywność przez USB"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Sygnał danych z urządzenia USB został wyłączony."</string>
</resources>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index dc5275918233..06b43cbd0699 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Liberar guia"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Liberar <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Informações do app"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Destinos de compartilhamento direto"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Sugestões de apps"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Lista de apps"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Iniciando demonstração…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Redefinindo dispositivo…"</string>
@@ -2249,14 +2246,14 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Botão direcional: para a esquerda"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Botão direcional: para a direita"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Botão direcional: centro"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
- <skip />
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Painel de configurações do tipo de clique automático"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Botão esquerdo"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Clicar com o botão direito do mouse"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Clicar duas vezes"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Arrastar"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Rolar"</string>
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausar"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posição"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> foi colocado no intervalo \"RESTRITO\""</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"enviou uma imagem"</string>
@@ -2531,12 +2528,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Mapas"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Apps"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"As impressões digitais não são mais reconhecidas. Configure o Desbloqueio por impressão digital de novo."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"O dispositivo USB foi conectado com o Android bloqueado"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"O dispositivo USB foi conectado com o Android bloqueado. Para usá-lo, primeiro desbloqueie o Android e, em seguida, reconecte o dispositivo USB."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Atividade suspeita do USB"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"O indicador de dados USB foi desativado."</string>
</resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 1418a0b0aac2..f48c3260534a 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Soltar"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Soltar <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Info. da app"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Segmentações de partilha direta"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Sugestões de apps"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Lista de apps"</string>
<string name="negative_duration" msgid="1938335096972945232">"-<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"A iniciar a demonstração…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"A repor o dispositivo…"</string>
@@ -2251,6 +2248,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Teclado direcional: centrar"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Painel de definições do tipo de clique automático"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Clicar com o botão esquerdo do rato"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Clicar com o botão direito do rato"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Clicar duas vezes"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Arrastar"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Deslocar"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausar"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posição"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> foi colocado no contentor RESTRITO."</string>
@@ -2527,12 +2528,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplicações"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Já não é possível reconhecer as suas impressões digitais. Configure o Desbloqueio por impressão digital novamente."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Dispositivo USB ligado quando bloqueado"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"O dispositivo USB está ligado quando o Android está bloqueado. Para usar o dispositivo, desbloqueie primeiro o Android e, de seguida, volte a inserir o dispositivo USB para o usar."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Atividade USB suspeita"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"O sinal de dados USB foi desativado."</string>
</resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index dc5275918233..06b43cbd0699 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Liberar guia"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Liberar <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Informações do app"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Destinos de compartilhamento direto"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Sugestões de apps"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Lista de apps"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Iniciando demonstração…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Redefinindo dispositivo…"</string>
@@ -2249,14 +2246,14 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Botão direcional: para a esquerda"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Botão direcional: para a direita"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Botão direcional: centro"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
- <skip />
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Painel de configurações do tipo de clique automático"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Botão esquerdo"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Clicar com o botão direito do mouse"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Clicar duas vezes"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Arrastar"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Rolar"</string>
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausar"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posição"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> foi colocado no intervalo \"RESTRITO\""</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"enviou uma imagem"</string>
@@ -2531,12 +2528,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Mapas"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Apps"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"As impressões digitais não são mais reconhecidas. Configure o Desbloqueio por impressão digital de novo."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"O dispositivo USB foi conectado com o Android bloqueado"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"O dispositivo USB foi conectado com o Android bloqueado. Para usá-lo, primeiro desbloqueie o Android e, em seguida, reconecte o dispositivo USB."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Atividade suspeita do USB"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"O indicador de dados USB foi desativado."</string>
</resources>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 75369415e322..73f532a7d633 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Anulează fixarea"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Anulează fixarea pentru <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Informații despre aplicație"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Destinații de distribuire directă"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Sugestii de aplicații"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Lista cu aplicații"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Se pornește demonstrația…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Se resetează dispozitivul…"</string>
@@ -2249,14 +2246,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad stânga"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad dreapta"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad centru"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Panoul de setări pentru clicul automat"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Clic stânga"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Întrerupe"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Poziție"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> a fost adăugat la grupul RESTRICȚIONATE"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"a trimis o imagine"</string>
@@ -2531,12 +2532,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplicații"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"E posibil ca amprentele tale să nu mai fie recunoscute. Configurează din nou Deblocarea cu amprenta."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Dispozitiv USB conectat când Android este blocat"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Dispozitivul USB este conectat când dispozitivul Android este blocat. Pentru a folosi dispozitivul, deblochează mai întâi dispozitivul Android, apoi reconectează dispozitivul USB pentru a-l folosi."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Activitate suspectă a dispozitivului USB"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Semnalul de date USB a fost dezactivat."</string>
</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index f35392f3911a..e0e08072482a 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -2090,12 +2090,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Открепить"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Открепить приложение \"<xliff:g id="LABEL">%1$s</xliff:g>\""</string>
<string name="app_info" msgid="6113278084877079851">"О приложении"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Получатели Direct Share"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Рекомендуемые приложения"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Список приложений"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Запуск деморежима…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Сброс данных…"</string>
@@ -2252,6 +2249,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"D-pad – по центру"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Панель настроек типа автонажатия"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Нажать левую кнопку"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Нажать правую кнопку"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Нажать дважды"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Перетащить"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Прокрутить"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Приостановить"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Положение"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Приложение \"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>\" помещено в категорию с ограниченным доступом."</string>
@@ -2528,12 +2529,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Карты"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Приложения"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Ваши отпечатки больше не распознаются. Настройте разблокировку по отпечатку пальца снова."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Разблокируйте экран"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Устройство Android заблокировано. Чтобы использовать USB-устройство, переподключите его после разблокировки экрана."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Обнаружено подозрительное USB-устройство"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Передача данных по USB отключена."</string>
</resources>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index d21df4a7f702..45dd5df8f83f 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -2248,14 +2248,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad වම"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad දකුණ"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad මැද"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"ස්වයං ක්ලික් ආකාර සැකසීම් පැනලය"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"වම්පස ක්ලිකය"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"විරාම කරන්න"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"ස්ථානය"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> අවහිර කළ බාල්දියට දමා ඇත"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"රූපයක් එව්වා"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 56fa73cba3fd..d67597821b2d 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -75,7 +75,7 @@
<string name="CLIRDefaultOffNextCallOff" msgid="2491576172356463443">"V predvolenom nastavení nie je identifikácia volajúceho obmedzená. Ďalší hovor: Bez obmedzenia"</string>
<string name="page_size_compat_apk_warning" msgid="2982396798449041224">"Táto aplikácia nie je kompatibilná s režimom 16 kB. Nepodarilo sa skontrolovať zarovnanie súboru APK. Táto aplikácia bude spustená v režime kompatibilnom s veľkosťou stránky. Ak chcete dosiahnuť najlepšiu kompatibilitu, znova skompilujte aplikáciu s podporou 16 kB. Viac sa dozviete na &lt;a href=\"https://developer.android.com/16kb-page-size\"&gt;https://developer.android.com/16kb-page-size&lt;/a&gt;."</string>
<string name="page_size_compat_elf_warning" msgid="6753874059564812651">"Táto aplikácia nie je kompatibilná s režimom 16 kB. Nepodarilo sa skontrolovať zarovnanie formátu ELF. Táto aplikácia bude spustená v režime kompatibilnom s veľkosťou stránky. Ak chcete dosiahnuť najlepšiu kompatibilitu, znova skompilujte aplikáciu s podporou 16 kB. Viac sa dozviete na &lt;a href=\"https://developer.android.com/16kb-page-size\"&gt;https://developer.android.com/16kb-page-size&lt;/a&gt;."</string>
- <string name="page_size_compat_apk_and_elf_warning" msgid="7628675779500605390">"Táto aplikácia nie je kompatibilná s režimom 16 kB. Nepodarilo sa skontrolovať zarovnanie súboru APK a formátu ELF. Táto aplikácia bude spustená v režime kompatibilnom s veľkosťou stránky. Ak chcete dosiahnuť najlepšiu kompatibilitu, znova skompilujte aplikáciu s podporou 16 kB. Viac sa dozviete na &lt;a href=\"https://developer.android.com/16kb-page-size\"&gt;https://developer.android.com/16kb-page-size&lt;/a&gt;."</string>
+ <string name="page_size_compat_apk_and_elf_warning" msgid="7628675779500605390">"Táto aplikácia nie je kompatibilná s 16 kB stránkovaním. Kontrola zarovnania v súboroch APK a ELF sa nepodarila. Aplikácia pobeží v režime kompatibility s veľkosťou stránky. Pre optimálnu kompatibilitu aplikáciu prekompilujte s podporou 16 kB stránkovania. Viac sa dozviete na &lt;a href=\"https://developer.android.com/16kb-page-size\"&gt;https://developer.android.com/16kb-page-size&lt;/a&gt;."</string>
<string name="serviceNotProvisioned" msgid="8289333510236766193">"Služba nie je poskytovaná."</string>
<string name="CLIRPermanent" msgid="166443681876381118">"Nemôžete meniť nastavenie identifikácie volajúcich."</string>
<string name="auto_data_switch_title" msgid="3286350716870518297">"Dátové pripojenie bolo prepnuté na operátora <xliff:g id="CARRIERDISPLAY">%s</xliff:g>"</string>
@@ -2090,12 +2090,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Uvoľniť"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Odopnúť <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Informácie o aplikácii"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Ciele priameho zdieľania"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Návrhy aplikácií"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Zoznam aplikácií"</string>
<string name="negative_duration" msgid="1938335096972945232">"-<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Spúšťa sa ukážka…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Resetuje sa zariadenie…"</string>
@@ -2252,6 +2249,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Stlačiť stredné tlačidlo krížového ovládača"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Panel nastavení typu automatického kliknutia"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Kliknutie ľavým tlačidlom"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Kliknúť pravým tlačidlom"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Dvakrát kliknúť"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Presunúť"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Posúvať"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pozastaviť"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozícia"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Balík <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> bol vložený do kontajnera OBMEDZENÉ"</string>
@@ -2528,12 +2529,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Mapy"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplikácie"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Vaše odtlačky prstov sa už nedajú rozpoznať. Znova nastavte odomknutie odtlačkom prsta."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Zariadenie USB bolo pripojené počas uzamknutia"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Zariadenie USB bolo pripojené, keď bolo zariadenie s Androidom uzamknuté. Ak chcete dané zariadenie používať, najprv odomknite zariadenie s Androidom a potom znova vložte zariadenie USB."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Podozrivá aktivita cez USB"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Dátový signál cez USB bol deaktivovaný."</string>
</resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index f44f1e798068..0136f5f8311a 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -278,7 +278,7 @@
<string name="bugreport_option_full_title" msgid="7681035745950045690">"Celotno poročilo"</string>
<string name="bugreport_option_full_summary" msgid="1975130009258435885">"To možnost uporabite za najmanj motenj sistema, če je naprava neodzivna ali prepočasna oziroma ko potrebujete vse razdelke poročila. Ne omogoča vnosa več podrobnosti ali snemanja dodatnih posnetkov zaslona."</string>
<string name="bugreport_countdown" msgid="6418620521782120755">"{count,plural, =1{Posnetek zaslona za poročilo o napakah bo narejen čez # sekundo.}one{Posnetek zaslona za poročilo o napakah bo narejen čez # sekundo.}two{Posnetek zaslona za poročilo o napakah bo narejen čez # sekundi.}few{Posnetek zaslona za poročilo o napakah bo narejen čez # sekunde.}other{Posnetek zaslona za poročilo o napakah bo narejen čez # sekund.}}"</string>
- <string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"Posnetek zaslona s poročilom o napakah je izdelan"</string>
+ <string name="bugreport_screenshot_success_toast" msgid="7986095104151473745">"Posnetek zaslona s poročilom je ustvarjen"</string>
<string name="bugreport_screenshot_failure_toast" msgid="6736320861311294294">"Izdelava posnetka zaslona s poročilom o napakah ni uspela"</string>
<string name="global_action_toggle_silent_mode" msgid="8464352592860372188">"Tihi način"</string>
<string name="global_action_silent_mode_on_status" msgid="2371892537738632013">"Zvok je IZKLOPLJEN"</string>
@@ -2090,12 +2090,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Odpenjanje"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Odpni aplikacijo <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Podatki o aplikacijah"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Naslovniki neposrednega deljenja"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Predlagane aplikacije"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Seznam aplikacij"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Začenjanje predstavitve …"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Ponastavljanje naprave …"</string>
@@ -2252,6 +2249,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Smerni gumb sredina"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Podokno z nastavitvami vrste samodejnega klika"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Levi klik"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Desni klik"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Dvoklik"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Vlečenje"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Drsenje"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Začasna zaustavitev"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Položaj"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Paket <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> je bil dodan v segment OMEJENO"</string>
@@ -2528,12 +2529,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Zemljevidi"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplikacije"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Vaših prstnih odtisov ni več mogoče prepoznati. Znova nastavite odklepanje s prstnim odtisom."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Naprava USB je bila priključena pri zaklenjenem Androidu"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Naprava USB je bila priključena pri zaklenjenem Androidu. Če želite uporabljati napravo, najprej odklenite Android in nato znova vstavite napravo USB, da jo boste lahko uporabljali."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Sumljiva dejavnost USB"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Podatkovni signal USB je bil onemogočen."</string>
</resources>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index 3739b53b32ac..37aa8bf8108f 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Zhgozhdo"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Zhgozhdoje <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Informacioni mbi aplikacionin"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Objektivat e ndarjes së drejtpërdrejtë"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Aplikacionet e sugjeruara"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Lista e aplikacioneve"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Po nis demonstrimin..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Po rivendos pajisjen…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Majtas në bllokun e drejtimit"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Djathtas në bllokun e drejtimit"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Qendra e bllokut të drejtimit"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Paneli i cilësimeve për llojin e klikimit automatik"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Klikimi majtas"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Vendos në pauzë"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Pozicioni"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> është vendosur në grupin E KUFIZUAR"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"dërgoi një imazh"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Aplikacionet"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Gjurmët e tua të gishtave nuk mund të njihen më. Konfiguro përsëri \"Shkyçjen me gjurmën e gishtit\"."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Pajisja USB është e futur kur është e kyçur"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Pajisja USB është e futur kur Android është i kyçur. Për ta përdorur pajisjen, shkyç fillimisht Android dhe më pas fut përsëri pajisjen USB për ta përdorur."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Aktivitet i dyshimtë i USB-së"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Sinjali i të dhënave të USB-së është çaktivizuar."</string>
</resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 009c27bcbb25..a4f0e556a7c7 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -2089,12 +2089,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Откачи"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Откачи апликацију <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Информације о апликацији"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Циљеви директног дељења"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Предлози апликација"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Листа апликација"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Покрећемо демонстрацију..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Ресетујемо уређај..."</string>
@@ -2251,6 +2248,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"центар на D-pad-у"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Окно са подешавањима типа аутоматског клика"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Леви клик"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"Кликните десним тастером"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"Двапут кликните"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"Превуците"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"Скролујте"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Паузирај"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Позиција"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакет <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> је додат у сегмент ОГРАНИЧЕНО"</string>
@@ -2527,12 +2528,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Мапе"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Апликације"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Отисци прстију више не могу да се препознају. Поново подесите откључавање отиском прста."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB уређај је прикључен када је Android закључан"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB уређај је прикључен када је Android закључан. Да бисте користили уређај, прво откључајте Android, па поново убаците USB уређај да бисте га користили."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Сумњива USB активност"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Сигнал за пренос података са USB-а је онемогућен."</string>
</resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 442763ae3188..e56097f06120 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Lossa"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Lossa <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Appinformation"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Personer/grupper att dela direkt med"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Appförslag"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Applista"</string>
<string name="negative_duration" msgid="1938335096972945232">"-<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Demo startas …"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Enheten återställs …"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Styrkors, vänster"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Styrkors, höger"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Styrkors, mitten"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Inställningspanel för typ av automatiskt klick"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Vänsterklick"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pausa"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Position"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> har placerats i hinken RESTRICTED"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"har skickat en bild"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Appar"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Det går inte längre att känna igen dina fingeravtryck. Ställ in fingeravtryckslås igen."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB-enhet ansluten när enheten är låst"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB-enheten är ansluten när Android är låst. Om du vill använda enheten måste du först låsa upp Android och sedan sätta i USB-enheten igen."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Misstänkt USB-aktivitet"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB-datasignalen har inaktiverats."</string>
</resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 8153eb02d625..03a581a362ba 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Bandua"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Bandua <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Maelezo ya programu"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Chaguo za kutuma maudhui moja kwa moja"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Mapendekezo ya programu"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Orodha ya programu"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Inaanzisha onyesho..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Inaweka upya kifaa..."</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Kitufe cha kushoto cha Dpad"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Kitufe cha kulia cha Dpad"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Kitufe cha katikati cha Dpad"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Kidirisha cha mipangilio ya aina ya kubofya kiotomatiki"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Bofya kushoto"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Sitisha"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Nafasi"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> kimewekwa katika kikundi KILICHODHIBITIWA"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"alituma picha"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Ramani"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Programu"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Alama zako za vidole hazitambuliki tena. Weka tena mipangilio ya Kufungua kwa Alama ya Kidole."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Kifaa cha USB kimechomekwa wakati Android imefungwa"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Kifaa cha USB huchomekwa wakati Android imefungwa. Tafadhali fungua kwanza Android kisha uweke upya kifaa cha USB ili ukitumie."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Shughuli za USB za kutilia shaka"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Kiashiria cha data cha USB kimezimwa."</string>
</resources>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 94168418ff4d..16c021e8c807 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"பின்னை அகற்று"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> ஐப் பின் நீக்கு"</string>
<string name="app_info" msgid="6113278084877079851">"ஆப்ஸ் தகவல்"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"நேரடிப் பகிர்வு இலக்குகள்"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"ஆப்ஸ் பரிந்துரைகள்"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"ஆப்ஸ் பட்டியல்"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"டெமோவைத் தொடங்குகிறது…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"சாதனத்தை மீட்டமைக்கிறது…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"இடது திசை காட்டும் பட்டன்"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"வலது திசை காட்டும் பட்டன்"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"மையப் பகுதியைக் காட்டும் பட்டன்"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"ஆட்டோ கிளிக் வகை அமைப்புகள் பேனல்"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"இடது கிளிக்"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"இடைநிறுத்து"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"நிலை"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> என்பதை வரம்பிடப்பட்ட பக்கெட்திற்குள் சேர்க்கப்பட்டது"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"படம் அனுப்பப்பட்டது"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"ஆப்ஸ்"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"உங்கள் கைரேகைகளை இனி அடையாளம் காண முடியாது. கைரேகை அன்லாக் அம்சத்தை மீண்டும் அமையுங்கள்."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"பூட்டப்பட்டிருக்கும்போது USB சாதனம் செருகப்பட்டது"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android பூட்டப்பட்டிருக்கும்போது USB சாதனம் செருகப்பட்டது. சாதனத்தைப் பயன்படுத்த, முதலில் Androidடைத் திறக்கவும், பின்னர் USB சாதனத்தைப் பயன்படுத்த அதை மீண்டும் செருகவும்."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"சந்தேகத்திற்குரிய USB செயல்பாடு"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB தரவு சிக்னல் முடக்கப்பட்டுள்ளது."</string>
</resources>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 4bb85f72c1d8..c5656187776e 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"అన్‌‌పిన్‌ ‌చేయి"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g>ను అన్‌పిన్ చేయి"</string>
<string name="app_info" msgid="6113278084877079851">"యాప్ సమాచారం"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"టార్గెట్‌లను నేరుగా షేర్ చేయడం"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"యాప్ సూచనలు"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"యాప్ లిస్ట్"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"డెమోను ప్రారంభిస్తోంది..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"పరికరాన్ని రీసెట్ చేస్తోంది..."</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad ఎడమవైపున"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad కుడివైపున"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"DPad మధ్యన"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"ఆటో-క్లిక్ టైప్ సెట్టింగ్‌ల ప్యానెల్"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"ఎడమ క్లిక్"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"పాజ్ చేయండి"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"స్థానం"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> పరిమితం చేయబడిన బకెట్‌లో ఉంచబడింది"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ఇమేజ్‌ను పంపారు"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Maps"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"అప్లికేషన్‌లు"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"మీ వేలిముద్రలను ఇకపై గుర్తించడం సాధ్యం కాదు. వేలిముద్ర అన్‌లాక్‌ను మళ్లీ సెటప్ చేయండి."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"లాక్ చేసి ఉన్నప్పుడు USB డివైజ్ ప్లగ్-ఇన్ అయి ఉంది"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android లాక్ అయినప్పుడు USB డివైజ్ ప్లగ్-ఇన్ చేయబడింది. డివైజ్‌ను ఉపయోగించడానికి, దయచేసి ముందుగా Androidను అన్‌లాక్ చేసి, ఆ తర్వాత, USB డివైజ్‌ను ఉపయోగించడానికి దాన్ని మళ్లీ ఇన్‌సర్ట్ చేయండి."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"USB యాక్టివిటీ అనుమానాస్పదంగా ఉంది"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB డేటా సిగ్నల్ డిజేబుల్ అయింది."</string>
</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 26084553817a..f4a3651bc5b7 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"เลิกปักหมุด"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"เลิกปักหมุด <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"ข้อมูลแอป"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"เป้าหมายการแชร์โดยตรง"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"คำแนะนำเกี่ยวกับแอป"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"รายการแอป"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"กำลังเริ่มการสาธิต…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"กำลังรีเซ็ตอุปกรณ์…"</string>
@@ -2250,6 +2247,10 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad กึ่งกลาง"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"แผงการตั้งค่าประเภทการคลิกอัตโนมัติ"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"คลิกซ้าย"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"คลิกขวา"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"ดับเบิลคลิก"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"ลาก"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"เลื่อน"</string>
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"หยุดชั่วคราว"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"วางตำแหน่ง"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"ใส่ <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ในที่เก็บข้อมูลที่ถูกจำกัดแล้ว"</string>
@@ -2526,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"แผนที่"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"แอปพลิเคชัน"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"ระบบจะไม่จดจำลายนิ้วมือของคุณอีกต่อไป ตั้งค่าการปลดล็อกด้วยลายนิ้วมืออีกครั้ง"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"เสียบอุปกรณ์ USB ขณะล็อกอยู่"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"คุณเสียบอุปกรณ์ USB ขณะ Android ล็อกอยู่ หากต้องการใช้อุปกรณ์ โปรดปลดล็อก Android ก่อนแล้วจึงเสียบอุปกรณ์ USB อีกครั้งเพื่อใช้งาน"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"กิจกรรม USB ที่น่าสงสัย"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"สัญญาณข้อมูล USB ปิดอยู่"</string>
</resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 482d7fdbb621..8782970c0aed 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"I-unpin"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"I-unpin ang <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Impormasyon ng app"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Mga target ng direktang pagbabahagi"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Mga iminumungkahing app"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Listahan ng app"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Sinisimulan ang demo…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Nire-reset ang device…"</string>
@@ -2250,6 +2247,14 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad Center"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Panel ng mga setting ng uri ng autoclick"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Mag-left click"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
+ <skip />
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"I-pause"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Posisyon"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Inilagay ang <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> sa PINAGHIHIGPITANG bucket"</string>
@@ -2526,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Mga Mapa"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Mga Application"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Hindi na makikilala ang iyong mga fingerprint. I-set up ulit ang Pag-unlock Gamit ang Fingerprint."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Nakasaksak ang USB device kapag naka-lock"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Nakasaksak ang USB device kapag naka-lock ang Android. Para magamit ang device, paki-unlock muna ang Android at pagkatapos ay isaksak ulit ang USB device para magamit ito."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Kahina-hinalang aktibidad sa USB"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Na-disable ang data signal ng USB."</string>
</resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index cb65ad72782d..7048a83b24b2 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Sabitlemeyi kaldır"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> uygulamasının sabitlemesini kaldır"</string>
<string name="app_info" msgid="6113278084877079851">"Uygulama bilgileri"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Doğrudan paylaşım hedefleri"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Önerilen uygulamalar"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Uygulama listesi"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Demo başlatılıyor…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Cihaz sıfırlanıyor…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad Sol"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad Sağ"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad Orta"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Otomatik tıklama türü ayarları paneli"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Sol tıklama"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Duraklatma"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Konum"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> KISITLANMIŞ gruba yerleştirildi"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"bir resim gönderildi"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Haritalar"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Uygulamalar"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Parmak izleriniz artık tanınamıyor. Parmak İzi Kilidi\'ni tekrar kurun."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB cihazı, Android kilitliyken takıldı"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB cihazı, Android kilitliyken takıldı. Cihazı kullanmak için lütfen önce Android\'in kilidini açın, ardından USB cihazını yeniden takın."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Şüpheli USB etkinliği"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB veri sinyali devre dışı bırakıldı."</string>
</resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 341aff5d70b8..a36699013b33 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -2250,14 +2250,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Кнопка \"вліво\" панелі керування"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Кнопка \"вправо\" панелі керування"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Центральна кнопка панелі керування"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Панель налаштувань типу автоматичного натискання"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Натиснути лівою кнопкою миші"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Призупинити"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Змінити позицію"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Пакет \"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>\" додано в сегмент з обмеженнями"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"надіслано зображення"</string>
@@ -2449,7 +2453,7 @@
<string name="concurrent_display_notification_thermal_content" msgid="2075484836527609319">"Функція Dual Screen недоступна, оскільки телефон сильно нагрівається"</string>
<string name="concurrent_display_notification_power_save_title" msgid="1794569070730736281">"Функція Dual Screen недоступна"</string>
<string name="concurrent_display_notification_power_save_content" msgid="2198116070583851493">"Функція Dual Screen недоступна, оскільки ввімкнено режим енергозбереження. Її можна вимкнути в налаштуваннях."</string>
- <string name="device_state_notification_settings_button" msgid="691937505741872749">"Перейти до налаштувань"</string>
+ <string name="device_state_notification_settings_button" msgid="691937505741872749">"Відкрити налаштування"</string>
<string name="device_state_notification_turn_off_button" msgid="6327161707661689232">"Вимкнути"</string>
<string name="keyboard_layout_notification_selected_title" msgid="1202560174252421219">"Клавіатуру \"<xliff:g id="DEVICE_NAME">%s</xliff:g>\" налаштовано"</string>
<string name="keyboard_layout_notification_one_selected_message" msgid="4314216053129257197">"Вибрано розкладку клавіатури \"<xliff:g id="LAYOUT_1">%s</xliff:g>\". Натисніть, щоб змінити."</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index ec832e67aa2f..b725a126e7cd 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"پن ہٹائیں"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"<xliff:g id="LABEL">%1$s</xliff:g> سے پن ہٹائیں"</string>
<string name="app_info" msgid="6113278084877079851">"ایپ کی معلومات"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"براہ راست اشتراک کے اہداف"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"ایپ کی تجاویز"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"ایپ کی فہرست"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"ڈیمو شروع ہو رہا ہے…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"آلہ ری سیٹ ہو رہا ہے…"</string>
@@ -2248,14 +2245,14 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"‏Dpad بائیں کریں"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"‏Dpad دائیں کریں"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"‏Dpad سینٹر"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
- <skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
- <skip />
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"خودکار کلک کی قسم کی ترتیبات کا پینل"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"بایاں کلک کریں"</string>
+ <string name="accessibility_autoclick_right_click" msgid="4353495816526181293">"دایاں کلک کریں"</string>
+ <string name="accessibility_autoclick_double_click" msgid="2103826849116176478">"دو بار کلک کریں"</string>
+ <string name="accessibility_autoclick_drag" msgid="1499559489796843224">"گھسیٹیں"</string>
+ <string name="accessibility_autoclick_scroll" msgid="3499385943728726933">"اسکرول کریں"</string>
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"موقوف کریں"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"پوزیشن"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> کو پابند کردہ بکٹ میں رکھ دیا گیا ہے"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"ایک تصویر بھیجی"</string>
@@ -2530,12 +2527,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"نقشے"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"ایپلیکیشنز"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"آپ کے فنگر پرنٹس کو مزید پہچانا نہیں جا سکتا۔ فنگر پرنٹ اَن لاک کو دوبارہ سیٹ اپ کریں۔"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"‏مقفل ہونے پر USB آلہ پلگ ان ہوتا ہے"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"‏‫Android کے مقفل ہونے پر USB آلہ پلگ ان ہوتا ہے۔ آلہ استعمال کرنے کے لیے، براہ کرم پہلے Android کو غیر مقفل کریں اور پھر اسے استعمال کرنے کے لیے USB آلہ کو دوبارہ داخل کریں۔"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"‏‫USB کی مشکوک سرگرمی"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"‏‫USB ڈیٹا سگنل کو غیر فعال کر دیا گیا ہے۔"</string>
</resources>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index e764fc293124..a83466937016 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Yechib olish"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Yechib olish: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Ilova haqida"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Direct Share nishonlari"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Ilova takliflari"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Ilovalar roʻyxati"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Demo boshlanmoqda…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Qurilma asl holatga qaytarilmoqda…"</string>
@@ -2250,6 +2247,14 @@
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad – markazga"</string>
<string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Avtomatik klik turi sozlamalari paneli"</string>
<string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Chap klik"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
+ <skip />
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
+ <skip />
<string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Pauza"</string>
<string name="accessibility_autoclick_position" msgid="2933660969907663545">"Joylashuvi"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> cheklangan turkumga joylandi"</string>
@@ -2526,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Xaritalar"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Ilovalar"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Barmoq izlaringiz endi tanilmaydi. Barmoq izi bilan ochishni qayta sozlang."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Qulflanganida USB qurilma quvvat manbasiga ulandi"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Android qulflanganda USB qurilma quvvat manbasiga ulandi. Qurilmani ishlatish uchun avval Android qulfini oching va keyin uni ishlatish uchun USB qurilmani qayta kiriting."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Shubhali USB faoliyati"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB maʼlumotlar signali faolsizlantirilgan."</string>
</resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index cd89cfdaa017..c07ff1d0e040 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Bỏ ghim"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Bỏ ghim <xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Thông tin ứng dụng"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Mục tiêu chia sẻ trực tiếp"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Ứng dụng đề xuất"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Danh sách ứng dụng"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Đang bắt đầu bản trình diễn..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Đang đặt lại thiết bị..."</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Chuyển sang trái bằng bàn phím di chuyển"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Chuyển sang phải bằng bàn phím di chuyển"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Căn giữa bằng bàn phím di chuyển"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Bảng cài đặt loại tự động nhấp"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Nhấp chuột trái"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Tạm dừng"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Vị trí"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"Đã đưa <xliff:g id="PACKAGE_NAME">%1$s</xliff:g> vào bộ chứa BỊ HẠN CHẾ"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"đã gửi hình ảnh"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Bản đồ"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Ứng dụng"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Hệ thống không nhận dạng được vân tay của bạn. Hãy thiết lập lại tính năng Mở khoá bằng vân tay."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Thiết bị USB được cắm khi thiết bị Android đang khoá"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Thiết bị USB đã được cắm khi thiết bị Android đang khoá. Để sử dụng thiết bị USB, trước tiên, hãy mở khoá thiết bị Android rồi cắm lại thiết bị USB."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Hoạt động đáng ngờ liên quan đến USB"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Tín hiệu dữ liệu qua USB đã bị tắt."</string>
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index d5aa069c6e8b..c746d3c61e33 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -1409,7 +1409,7 @@
<string name="carrier_app_notification_title" msgid="5815477368072060250">"已插入新 SIM 卡"</string>
<string name="carrier_app_notification_text" msgid="6567057546341958637">"点按即可进行设置"</string>
<string name="time_zone_change_notification_title" msgid="5232503069219193218">"您的时区已更改"</string>
- <string name="time_zone_change_notification_body" msgid="6135793674904665585">"您现在位于<xliff:g id="TIME_ZONE_DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="TIME_ZONE_OFFSET">%2$s</xliff:g>)"</string>
+ <string name="time_zone_change_notification_body" msgid="6135793674904665585">"您当前所处的时区是<xliff:g id="TIME_ZONE_DISPLAY_NAME">%1$s</xliff:g> (<xliff:g id="TIME_ZONE_OFFSET">%2$s</xliff:g>)"</string>
<string name="time_picker_dialog_title" msgid="9053376764985220821">"设置时间"</string>
<string name="date_picker_dialog_title" msgid="5030520449243071926">"设置日期"</string>
<string name="date_time_set" msgid="4603445265164486816">"设置"</string>
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"取消置顶"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"取消置顶<xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"应用信息"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"直接分享目标"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"应用建议"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"应用列表"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"正在启动演示模式…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"正在重置设备…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"向左方向键"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"向右方向键"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"方向键中心"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"自动点击类型设置面板"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"点击鼠标左键"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"暂停"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"位置"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> 已被放入受限存储分区"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"发送了一张图片"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"地图"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"应用"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"系统无法再识别您的指纹。请重新设置“指纹解锁”功能。"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"锁定时插入了 USB 设备"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"在 Android 设备锁定时插入了 USB 设备。如需使用 USB 设备,请先解锁 Android 设备,然后重新插入 USB 设备才能使用 USB 设备。"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"可疑的 USB 活动"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB 数据信号已停用。"</string>
</resources>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 91c852146be7..c6b952c99b50 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"取消固定"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"取消將<xliff:g id="LABEL">%1$s</xliff:g>置頂"</string>
<string name="app_info" msgid="6113278084877079851">"應用程式資料"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"直接分享對象"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"應用程式建議"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"應用程式清單"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"正在開始示範…"</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"正在重設裝置…"</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"十字鍵向左鍵"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"十字鍵向右鍵"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"十字鍵中心鍵"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"自動點擊類型設定面板"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"按一下左鍵"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"暫停"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"位置"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> 已納入受限制的儲存區"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"已傳送圖片"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"地圖"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"應用程式"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"無法再辨識你的指紋。請重新設定「指紋解鎖」功能。"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"USB 裝置插入時已鎖定"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"USB 裝置插入時,Android 已鎖定。如要使用裝置,請先解鎖 Android,然後重新插入 USB 裝置,才能使用。"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"可疑的 USB 活動"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB 資料訊號已停用。"</string>
</resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 1a71fedeef65..ca0402a1fe2c 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"取消固定"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"將「<xliff:g id="LABEL">%1$s</xliff:g>」取消固定"</string>
<string name="app_info" msgid="6113278084877079851">"應用程式資訊"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"直接分享目標"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"應用程式建議"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"應用程式清單"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"正在啟動示範模式..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"正在重設裝置..."</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Dpad 向左移"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Dpad 向右移"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Dpad 置中"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"自動點選類型設定面板"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"按滑鼠左鍵"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"暫停"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"位置"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"已將「<xliff:g id="PACKAGE_NAME">%1$s</xliff:g>」移入受限制的值區"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"傳送了一張圖片"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"地圖"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"應用程式"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"系統無法再辨識你的指紋,請重新設定「指紋解鎖」。"</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"在鎖定時插入 USB 裝置"</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"在 Android 裝置鎖定時插入 USB 裝置。如要使用 USB 裝置,請先解鎖 Android 裝置再重新插入。"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"可疑的 USB 活動"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"USB 資料信號已停用。"</string>
</resources>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 3eb20d6da55b..96d6b57ffb4e 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -2088,12 +2088,9 @@
<string name="unpin_target" msgid="3963318576590204447">"Susa ukuphina"</string>
<string name="unpin_specific_target" msgid="3859828252160908146">"Susa ukuphina ku-<xliff:g id="LABEL">%1$s</xliff:g>"</string>
<string name="app_info" msgid="6113278084877079851">"Ulwazi nge-app"</string>
- <!-- no translation found for shortcut_group_a11y_title (2992150163811583865) -->
- <skip />
- <!-- no translation found for suggested_apps_group_a11y_title (2804876567839501831) -->
- <skip />
- <!-- no translation found for all_apps_group_a11y_title (7020352520224108745) -->
- <skip />
+ <string name="shortcut_group_a11y_title" msgid="2992150163811583865">"Qondisa ofuna ukwabelana nabo"</string>
+ <string name="suggested_apps_group_a11y_title" msgid="2804876567839501831">"Iziphakamiso ze-app"</string>
+ <string name="all_apps_group_a11y_title" msgid="7020352520224108745">"Uhlu lwama-app"</string>
<string name="negative_duration" msgid="1938335096972945232">"−<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="demo_starting_message" msgid="6577581216125805905">"Iqalisa i-demo..."</string>
<string name="demo_restarting_message" msgid="1160053183701746766">"Isetha kabusha idivayisi..."</string>
@@ -2248,14 +2245,18 @@
<string name="accessibility_system_action_dpad_left_label" msgid="6557647179116479152">"Ngakwesokunxele se-Dpad"</string>
<string name="accessibility_system_action_dpad_right_label" msgid="9180196950365804081">"Ngakwesokudla se-Dpad"</string>
<string name="accessibility_system_action_dpad_center_label" msgid="8149791419358224893">"Isikhungo se-Dpad"</string>
- <!-- no translation found for accessibility_autoclick_type_settings_panel_title (7354373370578758696) -->
+ <string name="accessibility_autoclick_type_settings_panel_title" msgid="7354373370578758696">"Iphaneli yamasethingi ohlobo lokuchofoza ngokuzenzekelayo"</string>
+ <string name="accessibility_autoclick_left_click" msgid="2301793352260551080">"Chofoza kwesokunxele"</string>
+ <!-- no translation found for accessibility_autoclick_right_click (4353495816526181293) -->
<skip />
- <!-- no translation found for accessibility_autoclick_left_click (2301793352260551080) -->
+ <!-- no translation found for accessibility_autoclick_double_click (2103826849116176478) -->
<skip />
- <!-- no translation found for accessibility_autoclick_pause (3272200156172573568) -->
+ <!-- no translation found for accessibility_autoclick_drag (1499559489796843224) -->
<skip />
- <!-- no translation found for accessibility_autoclick_position (2933660969907663545) -->
+ <!-- no translation found for accessibility_autoclick_scroll (3499385943728726933) -->
<skip />
+ <string name="accessibility_autoclick_pause" msgid="3272200156172573568">"Misa"</string>
+ <string name="accessibility_autoclick_position" msgid="2933660969907663545">"Indawo"</string>
<string name="as_app_forced_to_restricted_bucket" msgid="8233871289353898964">"I-<xliff:g id="PACKAGE_NAME">%1$s</xliff:g> ifakwe kubhakede LOKUKHAWULELWE"</string>
<string name="conversation_single_line_name_display" msgid="8958948312915255999">"<xliff:g id="SENDER_NAME">%1$s</xliff:g>:"</string>
<string name="conversation_single_line_image_placeholder" msgid="6983271082911936900">"uthumele isithombe"</string>
@@ -2530,12 +2531,8 @@
<string name="keyboard_shortcut_group_applications_maps" msgid="7950000659522589471">"Amamephu"</string>
<string name="keyboard_shortcut_group_applications" msgid="3010389163951364798">"Ama-application"</string>
<string name="fingerprint_loe_notification_msg" msgid="3927447270148854546">"Isigxivizo somunwe wakho ngeke zisakwazi ukubonwa. Setha Ukuvula Ngesigxivizo Somunwe futhi."</string>
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_title (468577168569874967) -->
- <skip />
- <!-- no translation found for usb_apm_usb_plugged_in_when_locked_notification_text (6695268246267993166) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_title (3461195995882871461) -->
- <skip />
- <!-- no translation found for usb_apm_usb_suspicious_activity_notification_text (6537085605929303187) -->
- <skip />
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_title" msgid="468577168569874967">"Idivayisi ye-USB iyapulagwa uma i-Android ikhiyiwe."</string>
+ <string name="usb_apm_usb_plugged_in_when_locked_notification_text" msgid="6695268246267993166">"Idivayisi ye-USB iyapulagwa uma i-Android ikhiyiwe. Ukuze usebenzisa idivayisi, sicela uvule i-Android kuqala bese uphinde ufake idivayisi ye-USB ukuze uyisebenzise."</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_title" msgid="3461195995882871461">"Umsebenzi we-USB osolisayo"</string>
+ <string name="usb_apm_usb_suspicious_activity_notification_text" msgid="6537085605929303187">"Isignali yedatha ye-USB ivaliwe."</string>
</resources>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index a1f85c380a95..66111785af4f 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -3313,7 +3313,6 @@
<!-- Provides brief supplemental information for the view, such as the purpose of
the view when that purpose is not conveyed within its textual representation.
This property is used primarily for accessibility. -->
- <!-- @FlaggedApi("android.view.accessibility.supplemental_description") -->
<attr name="supplementalDescription" format="string" localization="suggested" />
<!-- Sets the id of a view that screen readers are requested to visit after this view.
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 17acf9aed278..1a311d572e0b 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -60,6 +60,7 @@
<item><xliff:g id="id">@string/status_bar_oem_satellite</xliff:g></item>
<item><xliff:g id="id">@string/status_bar_wifi</xliff:g></item>
<item><xliff:g id="id">@string/status_bar_hotspot</xliff:g></item>
+ <item><xliff:g id="id">@string/status_bar_stacked_mobile</xliff:g></item>
<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_battery</xliff:g></item>
@@ -94,6 +95,7 @@
<string translatable="false" name="status_bar_secure">secure</string>
<string translatable="false" name="status_bar_clock">clock</string>
<string translatable="false" name="status_bar_mobile">mobile</string>
+ <string translatable="false" name="status_bar_stacked_mobile">stacked_mobile</string>
<string translatable="false" name="status_bar_vpn">vpn</string>
<string translatable="false" name="status_bar_ethernet">ethernet</string>
<string translatable="false" name="status_bar_microphone">microphone</string>
diff --git a/core/res/res/values/public-final.xml b/core/res/res/values/public-final.xml
index af1e5123096d..61e2a28562d2 100644
--- a/core/res/res/values/public-final.xml
+++ b/core/res/res/values/public-final.xml
@@ -3941,7 +3941,7 @@
<!-- @FlaggedApi("android.permission.flags.replace_body_sensor_permission_enabled")
@hide @SystemApi -->
<public name="backgroundPermission"/>
- <!-- @FlaggedApi(android.view.accessibility.supplemental_description) -->
+ <!-- @FlaggedApi("android.view.accessibility.supplemental_description") -->
<public name="supplementalDescription"/>
<!-- @FlaggedApi("android.security.enable_intent_matching_flags") -->
<public name="intentMatchingFlags"/>
@@ -3969,7 +3969,7 @@
<!-- @FlaggedApi("android.permission.flags.replace_body_sensor_permission_enabled")
@hide @SystemApi -->
<public type="attr" name="backgroundPermission" id="0x010106a7" />
- <!-- @FlaggedApi(android.view.accessibility.supplemental_description) -->
+ <!-- @FlaggedApi("android.view.accessibility.supplemental_description") -->
<public type="attr" name="supplementalDescription" id="0x010106a8" />
<!-- @FlaggedApi("android.security.enable_intent_matching_flags") -->
<public type="attr" name="intentMatchingFlags" id="0x010106a9" />
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index da6fb3b58f21..c62732d36038 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -3235,6 +3235,8 @@
<java-symbol type="id" name="header_text" />
<java-symbol type="id" name="header_text_secondary" />
<java-symbol type="id" name="expand_button" />
+ <java-symbol type="id" name="expand_button_spacer" />
+ <java-symbol type="id" name="expand_button_container" />
<java-symbol type="id" name="expand_button_pill" />
<java-symbol type="id" name="expand_button_pill_colorized_layer" />
<java-symbol type="id" name="expand_button_number" />
@@ -3318,6 +3320,7 @@
<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_stacked_mobile" />
<java-symbol type="string" name="status_bar_ethernet" />
<java-symbol type="string" name="status_bar_vpn" />
<java-symbol type="string" name="status_bar_microphone" />
diff --git a/core/tests/coretests/src/com/android/internal/util/RateLimitingCacheTest.java b/core/tests/coretests/src/com/android/internal/util/RateLimitingCacheTest.java
index 2edab6268bec..82d90fc71cb3 100644
--- a/core/tests/coretests/src/com/android/internal/util/RateLimitingCacheTest.java
+++ b/core/tests/coretests/src/com/android/internal/util/RateLimitingCacheTest.java
@@ -21,8 +21,7 @@ import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import android.os.SystemClock;
-
-import android.os.SystemClock;
+import android.platform.test.annotations.Presubmit;
import androidx.test.runner.AndroidJUnit4;
@@ -36,6 +35,7 @@ import org.junit.runner.RunWith;
/**
* Test the RateLimitingCache class.
*/
+@Presubmit
@RunWith(AndroidJUnit4.class)
public class RateLimitingCacheTest {
@@ -56,13 +56,13 @@ public class RateLimitingCacheTest {
*/
@Test
public void testTtl_Zero() {
- RateLimitingCache<Integer> s = new RateLimitingCache<>(0);
+ TestRateLimitingCache<Integer> s = new TestRateLimitingCache<>(0);
int first = s.get(mFetcher);
assertEquals(first, 0);
int second = s.get(mFetcher);
assertEquals(second, 1);
- SystemClock.sleep(20);
+ s.advanceTime(20);
int third = s.get(mFetcher);
assertEquals(third, 2);
}
@@ -73,14 +73,14 @@ public class RateLimitingCacheTest {
*/
@Test
public void testTtl_100() {
- RateLimitingCache<Integer> s = new RateLimitingCache<>(100);
+ TestRateLimitingCache<Integer> s = new TestRateLimitingCache<>(100);
int first = s.get(mFetcher);
assertEquals(first, 0);
int second = s.get(mFetcher);
// Too early to change
assertEquals(second, 0);
- SystemClock.sleep(150);
+ s.advanceTime(150);
int third = s.get(mFetcher);
// Changed by now
assertEquals(third, 1);
@@ -95,11 +95,11 @@ public class RateLimitingCacheTest {
*/
@Test
public void testTtl_Negative() {
- RateLimitingCache<Integer> s = new RateLimitingCache<>(-1);
+ TestRateLimitingCache<Integer> s = new TestRateLimitingCache<>(-1);
int first = s.get(mFetcher);
assertEquals(first, 0);
- SystemClock.sleep(200);
+ s.advanceTime(200);
// Should return the original value every time
int second = s.get(mFetcher);
assertEquals(second, 0);
@@ -111,7 +111,7 @@ public class RateLimitingCacheTest {
*/
@Test
public void testTtl_Spam() {
- RateLimitingCache<Integer> s = new RateLimitingCache<>(100);
+ TestRateLimitingCache<Integer> s = new TestRateLimitingCache<>(100);
assertCount(s, 1000, 7, 15);
}
@@ -121,28 +121,13 @@ public class RateLimitingCacheTest {
*/
@Test
public void testRate_10hz() {
- RateLimitingCache<Integer> s = new RateLimitingCache<>(1000, 10);
+ TestRateLimitingCache<Integer> s = new TestRateLimitingCache<>(1000, 10);
// At 10 per second, 2 seconds should not exceed about 30, assuming overlap into left and
// right windows that allow 10 each
assertCount(s, 2000, 20, 33);
}
/**
- * Test that using a different timebase works correctly.
- */
- @Test
- public void testTimebase() {
- RateLimitingCache<Integer> s = new RateLimitingCache<>(1000, 10) {
- @Override
- protected long getTime() {
- return SystemClock.elapsedRealtime() / 2;
- }
- };
- // Timebase is moving at half the speed, so only allows for 1 second worth in 2 seconds.
- assertCount(s, 2000, 10, 22);
- }
-
- /**
* Exercises concurrent access to the cache.
*/
@Test
@@ -287,15 +272,37 @@ public class RateLimitingCacheTest {
* @param minCount the lower end of the expected number of fetches, with a margin for error
* @param maxCount the higher end of the expected number of fetches, with a margin for error
*/
- private void assertCount(RateLimitingCache<Integer> cache, long period,
+ private void assertCount(TestRateLimitingCache<Integer> cache, long period,
int minCount, int maxCount) {
- long startTime = SystemClock.elapsedRealtime();
- while (SystemClock.elapsedRealtime() < startTime + period) {
+ long startTime = cache.getTime();
+ while (cache.getTime() < startTime + period) {
int value = cache.get(mFetcher);
- SystemClock.sleep(5);
+ cache.advanceTime(5);
}
int latest = cache.get(mFetcher);
assertTrue("Latest should be between " + minCount + " and " + maxCount
+ " but is " + latest, latest <= maxCount && latest >= minCount);
}
+
+ private static class TestRateLimitingCache<Value> extends RateLimitingCache<Value> {
+ // Start at a non-zero time to avoid confusion with uninitialized state.
+ private long mTime = 1;
+
+ public TestRateLimitingCache(long periodMillis) {
+ super(periodMillis);
+ }
+
+ public TestRateLimitingCache(long periodMillis, int count) {
+ super(periodMillis, count);
+ }
+
+ public void advanceTime(long time) {
+ mTime += time;
+ }
+
+ @Override
+ public long getTime() {
+ return mTime;
+ }
+ }
}
diff --git a/data/etc/platform.xml b/data/etc/platform.xml
index baaec86828eb..ca20aebf95d8 100644
--- a/data/etc/platform.xml
+++ b/data/etc/platform.xml
@@ -210,6 +210,7 @@
<assign-permission name="android.permission.STATSCOMPANION" uid="statsd" />
<assign-permission name="android.permission.UPDATE_APP_OPS_STATS" uid="statsd" />
+ <assign-permission name="android.permission.REGISTER_STATS_PULL_ATOM" uid="mmd" />
<assign-permission name="android.permission.REGISTER_STATS_PULL_ATOM" uid="gpu_service" />
<assign-permission name="android.permission.REGISTER_STATS_PULL_ATOM" uid="keystore" />
diff --git a/data/fonts/script/test/test_commandline.py b/data/fonts/script/test/test_commandline.py
index 75318cc10e68..dbcba417c5e1 100755
--- a/data/fonts/script/test/test_commandline.py
+++ b/data/fonts/script/test/test_commandline.py
@@ -75,20 +75,20 @@ class CommandlineTest(unittest.TestCase):
functools.partial(CommandlineTest.fileread, filemap),
)
- self.assertEquals("output.xml", args.outfile)
+ self.assertEqual("output.xml", args.outfile)
- self.assertEquals(1, len(args.aliases))
- self.assertEquals("sans-serif-thin", args.aliases[0].name)
- self.assertEquals("sans-serif", args.aliases[0].to)
- self.assertEquals(100, args.aliases[0].weight)
+ self.assertEqual(1, len(args.aliases))
+ self.assertEqual("sans-serif-thin", args.aliases[0].name)
+ self.assertEqual("sans-serif", args.aliases[0].to)
+ self.assertEqual(100, args.aliases[0].weight)
- self.assertEquals(2, len(args.fallback))
+ self.assertEqual(2, len(args.fallback))
# Order is not a part of expectation. Check the expected lang is included.
langs = set(["und-Arab", "und-Ethi"])
self.assertTrue(args.fallback[0].lang in langs)
self.assertTrue(args.fallback[1].lang in langs)
- self.assertEquals(3, len(args.families))
+ self.assertEqual(3, len(args.families))
# Order is not a part of expectation. Check the expected name is included.
names = set(["sans-serif", "sans-serif-condensed", "roboto-flex"])
self.assertTrue(args.families[0].name in names)
diff --git a/data/fonts/script/test/test_xml_builder.py b/data/fonts/script/test/test_xml_builder.py
index 24a033b43cbc..f15c51379b46 100755
--- a/data/fonts/script/test/test_xml_builder.py
+++ b/data/fonts/script/test/test_xml_builder.py
@@ -328,16 +328,16 @@ class XmlBuilderTest(unittest.TestCase):
self.expect_xml(xml)
def expect_xml(self, xml):
- self.assertEquals("sans-serif", xml.families[0].name) # _SANS_SERIF
- self.assertEquals("serif", xml.families[1].name) # _SERIF
- self.assertEquals("und-Arab", xml.families[2].lang) # __ARABIC
- self.assertEquals("elegant", xml.families[2].variant)
- self.assertEquals("und-Arab", xml.families[3].lang) # _ARABIC_UI
- self.assertEquals("zh-Hans", xml.families[4].lang) # _HANS (_HANS_SERIF)
- self.assertEquals(2, len(xml.families[4].fonts))
- self.assertEquals("serif", xml.families[4].fonts[1].fallback_for)
- self.assertEquals("ja", xml.families[5].lang) # _HANS (_HANS_SERIF)
- self.assertEquals("serif", xml.families[5].fonts[1].fallback_for)
+ self.assertEqual("sans-serif", xml.families[0].name) # _SANS_SERIF
+ self.assertEqual("serif", xml.families[1].name) # _SERIF
+ self.assertEqual("und-Arab", xml.families[2].lang) # __ARABIC
+ self.assertEqual("elegant", xml.families[2].variant)
+ self.assertEqual("und-Arab", xml.families[3].lang) # _ARABIC_UI
+ self.assertEqual("zh-Hans", xml.families[4].lang) # _HANS (_HANS_SERIF)
+ self.assertEqual(2, len(xml.families[4].fonts))
+ self.assertEqual("serif", xml.families[4].fonts[1].fallback_for)
+ self.assertEqual("ja", xml.families[5].lang) # _HANS (_HANS_SERIF)
+ self.assertEqual("serif", xml.families[5].fonts[1].fallback_for)
if __name__ == "__main__":
diff --git a/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleTaskViewListenerTest.kt b/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleTaskViewListenerTest.kt
new file mode 100644
index 000000000000..9ebc3d78b3a7
--- /dev/null
+++ b/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleTaskViewListenerTest.kt
@@ -0,0 +1,491 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.wm.shell.bubbles
+
+import android.app.Notification
+import android.app.PendingIntent
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import android.content.pm.ShortcutInfo
+import android.graphics.drawable.Icon
+import android.os.UserHandle
+import android.service.notification.NotificationListenerService.Ranking
+import android.service.notification.StatusBarNotification
+import android.view.View
+import android.widget.FrameLayout
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
+import com.android.internal.protolog.ProtoLog
+import com.android.wm.shell.R
+import com.android.wm.shell.bubbles.Bubbles.BubbleMetadataFlagListener
+import com.android.wm.shell.common.TestShellExecutor
+import com.android.wm.shell.taskview.TaskView
+import com.android.wm.shell.taskview.TaskViewController
+import com.android.wm.shell.taskview.TaskViewTaskController
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito
+import org.mockito.Mockito.never
+import org.mockito.Mockito.reset
+import org.mockito.kotlin.any
+import org.mockito.kotlin.anyOrNull
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
+
+/**
+ * Tests for [BubbleTaskViewListener].
+ */
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class BubbleTaskViewListenerTest {
+
+ private val context = ApplicationProvider.getApplicationContext<Context>()
+
+ private var taskViewController = mock<TaskViewController>()
+ private var listenerCallback = mock<BubbleTaskViewListener.Callback>()
+ private var expandedViewManager = mock<BubbleExpandedViewManager>()
+
+ private lateinit var bubbleTaskViewListener: BubbleTaskViewListener
+ private lateinit var taskView: TaskView
+ private lateinit var bubbleTaskView: BubbleTaskView
+ private lateinit var parentView: ViewPoster
+ private lateinit var mainExecutor: TestShellExecutor
+ private lateinit var bgExecutor: TestShellExecutor
+
+ @Before
+ fun setUp() {
+ ProtoLog.REQUIRE_PROTOLOGTOOL = false
+ ProtoLog.init()
+
+ parentView = ViewPoster(context)
+ mainExecutor = TestShellExecutor()
+ bgExecutor = TestShellExecutor()
+
+ taskView = TaskView(context, taskViewController, mock<TaskViewTaskController>())
+ bubbleTaskView = BubbleTaskView(taskView, mainExecutor)
+
+ bubbleTaskViewListener =
+ BubbleTaskViewListener(
+ context,
+ bubbleTaskView,
+ parentView,
+ expandedViewManager,
+ listenerCallback
+ )
+ }
+
+ @Test
+ fun createBubbleTaskViewListener_withCreatedTaskView() {
+ // Make the bubbleTaskView look like it's been created
+ val taskId = 123
+ bubbleTaskView.listener.onTaskCreated(taskId, mock<ComponentName>())
+ reset(listenerCallback)
+
+ bubbleTaskViewListener =
+ BubbleTaskViewListener(
+ context,
+ bubbleTaskView,
+ parentView,
+ expandedViewManager,
+ listenerCallback
+ )
+
+ assertThat(bubbleTaskView.delegateListener).isEqualTo(bubbleTaskViewListener)
+ assertThat(bubbleTaskViewListener.taskView).isEqualTo(bubbleTaskView.taskView)
+
+ verify(listenerCallback).onTaskCreated()
+ assertThat(bubbleTaskViewListener.taskId).isEqualTo(taskId)
+ }
+
+ @Test
+ fun createBubbleTaskViewListener() {
+ bubbleTaskViewListener =
+ BubbleTaskViewListener(
+ context,
+ bubbleTaskView,
+ parentView,
+ expandedViewManager,
+ listenerCallback
+ )
+
+ assertThat(bubbleTaskView.delegateListener).isEqualTo(bubbleTaskViewListener)
+ assertThat(bubbleTaskViewListener.taskView).isEqualTo(bubbleTaskView.taskView)
+ verify(listenerCallback, never()).onTaskCreated()
+ }
+
+ @Test
+ fun onInitialized_pendingIntentChatBubble() {
+ val target = Intent(context, TestActivity::class.java)
+ val pendingIntent = PendingIntent.getActivity(context, 0, target,
+ PendingIntent.FLAG_MUTABLE)
+
+ val b = createChatBubble("key", pendingIntent)
+ bubbleTaskViewListener.setBubble(b)
+
+ assertThat(b.isChat).isTrue()
+ // Has shortcut info
+ assertThat(b.shortcutInfo).isNotNull()
+ // But it didn't use that on bubble metadata
+ assertThat(b.metadataShortcutId).isNull()
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onInitialized()
+ }
+ getInstrumentation().waitForIdleSync()
+
+ // ..so it's pending intent-based, and launches that
+ assertThat(b.isPendingIntentActive).isTrue()
+ verify(taskViewController).startActivity(any(), eq(pendingIntent), any(), any(), any())
+ }
+
+ @Test
+ fun onInitialized_shortcutChatBubble() {
+ val shortcutInfo = ShortcutInfo.Builder(context)
+ .setId("mockShortcutId")
+ .build()
+ val b = createChatBubble("key", shortcutInfo)
+ bubbleTaskViewListener.setBubble(b)
+
+ assertThat(b.isChat).isTrue()
+ assertThat(b.shortcutInfo).isNotNull()
+ // Chat bubble using a shortcut
+ assertThat(b.metadataShortcutId).isNotNull()
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onInitialized()
+ }
+ getInstrumentation().waitForIdleSync()
+
+ assertThat(b.isPendingIntentActive).isFalse()
+ verify(taskViewController).startShortcutActivity(any(), eq(shortcutInfo), any(), any())
+ }
+
+ @Test
+ fun onInitialized_appBubble() {
+ val b = createAppBubble()
+ bubbleTaskViewListener.setBubble(b)
+
+ assertThat(b.isApp).isTrue()
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onInitialized()
+ }
+ getInstrumentation().waitForIdleSync()
+
+ assertThat(b.isPendingIntentActive).isFalse()
+ verify(taskViewController).startActivity(any(), any(), anyOrNull(), any(), any())
+ }
+
+ @Test
+ fun onInitialized_preparingTransition() {
+ val b = createAppBubble()
+ bubbleTaskViewListener.setBubble(b)
+ taskView = Mockito.spy(taskView)
+ val preparingTransition = mock<BubbleTransitions.BubbleTransition>()
+ b.preparingTransition = preparingTransition
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onInitialized()
+ }
+ getInstrumentation().waitForIdleSync()
+
+ verify(preparingTransition).surfaceCreated()
+ }
+
+ @Test
+ fun onInitialized_destroyed() {
+ val b = createAppBubble()
+ bubbleTaskViewListener.setBubble(b)
+
+ assertThat(b.isApp).isTrue()
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onReleased()
+ bubbleTaskViewListener.onInitialized()
+ }
+ getInstrumentation().waitForIdleSync()
+
+ verify(taskViewController, never()).startActivity(any(), any(), anyOrNull(), any(), any())
+ }
+
+ @Test
+ fun onInitialized_initialized() {
+ val b = createAppBubble()
+ bubbleTaskViewListener.setBubble(b)
+
+ assertThat(b.isApp).isTrue()
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onInitialized()
+ }
+ getInstrumentation().waitForIdleSync()
+
+ reset(taskViewController)
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onInitialized()
+ }
+ // Already initialized, so no activity should be started.
+ verify(taskViewController, never()).startActivity(any(), any(), anyOrNull(), any(), any())
+ }
+
+ @Test
+ fun onTaskCreated() {
+ val b = createAppBubble()
+ bubbleTaskViewListener.setBubble(b)
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onInitialized()
+ }
+ getInstrumentation().waitForIdleSync()
+ verify(taskViewController).startActivity(any(), any(), anyOrNull(), any(), any())
+
+ val taskId = 123
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onTaskCreated(taskId, mock<ComponentName>())
+ }
+ getInstrumentation().waitForIdleSync()
+
+ verify(listenerCallback).onTaskCreated()
+ verify(expandedViewManager, never()).setNoteBubbleTaskId(any(), any())
+ assertThat(bubbleTaskViewListener.taskId).isEqualTo(taskId)
+ }
+
+ @Test
+ fun onTaskCreated_noteBubble() {
+ val b = createNoteBubble()
+ bubbleTaskViewListener.setBubble(b)
+ assertThat(b.isNote).isTrue()
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onInitialized()
+ }
+ getInstrumentation().waitForIdleSync()
+ verify(taskViewController).startActivity(any(), any(), anyOrNull(), any(), any())
+
+ val taskId = 123
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onTaskCreated(taskId, mock<ComponentName>())
+ }
+ getInstrumentation().waitForIdleSync()
+
+ verify(listenerCallback).onTaskCreated()
+ verify(expandedViewManager).setNoteBubbleTaskId(eq(b.key), eq(taskId))
+ assertThat(bubbleTaskViewListener.taskId).isEqualTo(taskId)
+ }
+
+ @Test
+ fun onTaskVisibilityChanged_true() {
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onTaskVisibilityChanged(1, true)
+ }
+ verify(listenerCallback).onContentVisibilityChanged(eq(true))
+ }
+
+ @Test
+ fun onTaskVisibilityChanged_false() {
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onTaskVisibilityChanged(1, false)
+ }
+ verify(listenerCallback).onContentVisibilityChanged(eq(false))
+ }
+
+ @Test
+ fun onTaskRemovalStarted() {
+ val mockTaskView = mock<TaskView>()
+ bubbleTaskView = BubbleTaskView(mockTaskView, mainExecutor)
+
+ bubbleTaskViewListener =
+ BubbleTaskViewListener(
+ context,
+ bubbleTaskView,
+ parentView,
+ expandedViewManager,
+ listenerCallback
+ )
+
+ val b = createAppBubble()
+ bubbleTaskViewListener.setBubble(b)
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onInitialized()
+ }
+ getInstrumentation().waitForIdleSync()
+ verify(mockTaskView).startActivity(any(), anyOrNull(), any(), any())
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onTaskRemovalStarted(1)
+ }
+
+ verify(expandedViewManager).removeBubble(eq(b.key), eq(Bubbles.DISMISS_TASK_FINISHED))
+ verify(mockTaskView).release()
+ assertThat(parentView.lastRemovedView).isEqualTo(mockTaskView)
+ assertThat(bubbleTaskViewListener.taskView).isNull()
+ verify(listenerCallback).onTaskRemovalStarted()
+ }
+
+ @Test
+ fun onBackPressedOnTaskRoot_expanded() {
+ val taskId = 123
+ whenever(expandedViewManager.isStackExpanded()).doReturn(true)
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onTaskCreated(taskId, mock<ComponentName>())
+ bubbleTaskViewListener.onBackPressedOnTaskRoot(taskId)
+ }
+ verify(listenerCallback).onBackPressed()
+ }
+
+ @Test
+ fun onBackPressedOnTaskRoot_notExpanded() {
+ val taskId = 123
+ whenever(expandedViewManager.isStackExpanded()).doReturn(false)
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onTaskCreated(taskId, mock<ComponentName>())
+ bubbleTaskViewListener.onBackPressedOnTaskRoot(taskId)
+ }
+ verify(listenerCallback, never()).onBackPressed()
+ }
+
+ @Test
+ fun onBackPressedOnTaskRoot_taskIdMissMatch() {
+ val taskId = 123
+ whenever(expandedViewManager.isStackExpanded()).doReturn(true)
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onTaskCreated(taskId, mock<ComponentName>())
+ bubbleTaskViewListener.onBackPressedOnTaskRoot(42)
+ }
+ verify(listenerCallback, never()).onBackPressed()
+ }
+
+ @Test
+ fun setBubble_isNew() {
+ val b = createAppBubble()
+ val isNew = bubbleTaskViewListener.setBubble(b)
+ assertThat(isNew).isTrue()
+ }
+
+ @Test
+ fun setBubble_launchContentChanged() {
+ val target = Intent(context, TestActivity::class.java)
+ val pendingIntent = PendingIntent.getActivity(
+ context, 0, target,
+ PendingIntent.FLAG_MUTABLE
+ )
+
+ val b = createChatBubble("key", pendingIntent)
+ var isNew = bubbleTaskViewListener.setBubble(b)
+ // First time bubble is set, so it is "new"
+ assertThat(isNew).isTrue()
+
+ val b2 = createChatBubble("key", pendingIntent)
+ isNew = bubbleTaskViewListener.setBubble(b2)
+ // Second time bubble is set & it uses same type of launch content, not "new"
+ assertThat(isNew).isFalse()
+
+ val shortcutInfo = ShortcutInfo.Builder(context)
+ .setId("mockShortcutId")
+ .build()
+ val b3 = createChatBubble("key", shortcutInfo)
+ // bubble is using different content, so it is "new"
+ isNew = bubbleTaskViewListener.setBubble(b3)
+ assertThat(isNew).isTrue()
+ }
+
+ private fun createAppBubble(): Bubble {
+ val target = Intent(context, TestActivity::class.java)
+ target.setPackage(context.packageName)
+ return Bubble.createAppBubble(target, mock<UserHandle>(), mock<Icon>(),
+ mainExecutor, bgExecutor)
+ }
+
+ private fun createNoteBubble(): Bubble {
+ val target = Intent(context, TestActivity::class.java)
+ target.setPackage(context.packageName)
+ return Bubble.createNotesBubble(target, mock<UserHandle>(), mock<Icon>(),
+ mainExecutor, bgExecutor)
+ }
+
+ private fun createChatBubble(key: String, shortcutInfo: ShortcutInfo): Bubble {
+ return Bubble(
+ key,
+ shortcutInfo,
+ 0 /* desiredHeight */,
+ 0 /* desiredHeightResId */,
+ "title",
+ -1 /*taskId */,
+ null /* locusId */, true /* isdismissabel */,
+ mainExecutor, bgExecutor, mock<BubbleMetadataFlagListener>()
+ )
+ }
+
+ private fun createChatBubble(key: String, pendingIntent: PendingIntent): Bubble {
+ val metadata = Notification.BubbleMetadata.Builder(
+ pendingIntent,
+ Icon.createWithResource(context, R.drawable.bubble_ic_create_bubble)
+ ).build()
+ val shortcutInfo = ShortcutInfo.Builder(context)
+ .setId("shortcutId")
+ .build()
+ val notification: Notification =
+ Notification.Builder(context, key)
+ .setSmallIcon(mock<Icon>())
+ .setWhen(System.currentTimeMillis())
+ .setContentTitle("title")
+ .setContentText("content")
+ .setBubbleMetadata(metadata)
+ .build()
+ val sbn = mock<StatusBarNotification>()
+ val ranking = mock<Ranking>()
+ whenever(sbn.getNotification()).thenReturn(notification)
+ whenever(sbn.getKey()).thenReturn(key)
+ whenever(ranking.getConversationShortcutInfo()).thenReturn(shortcutInfo)
+ val entry = BubbleEntry(sbn, ranking, true, false, false, false)
+ return Bubble(
+ entry, mock<BubbleMetadataFlagListener>(), null, mainExecutor,
+ bgExecutor
+ )
+ }
+
+ /**
+ * FrameLayout that immediately runs any runnables posted to it and tracks view removals.
+ */
+ class ViewPoster(context: Context) : FrameLayout(context) {
+
+ lateinit var lastRemovedView: View
+
+ override fun post(r: Runnable): Boolean {
+ r.run()
+ return true
+ }
+
+ override fun removeView(v: View) {
+ super.removeView(v)
+ lastRemovedView = v
+ }
+ }
+} \ No newline at end of file
diff --git a/libs/WindowManager/Shell/res/values-af/strings.xml b/libs/WindowManager/Shell/res/values-af/strings.xml
index 13e5f34e1586..5444c26e9ec9 100644
--- a/libs/WindowManager/Shell/res/values-af/strings.xml
+++ b/libs/WindowManager/Shell/res/values-af/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Links 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Links 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Volskerm regs"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Ruil apps om"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Volskerm bo"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Bo 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Bo 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Stel terug"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Spring na links"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Spring na regs"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Verander grootte van linkerkantse venster"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Verander grootte van regterkantse venster"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maksimeer of stel venstergrootte terug"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Gaan na deelskermmodus"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Gaan na werkskermvenstermodus"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Verander grootte van linkerkantse venster"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Verander grootte van regterkantse venster"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimeer of stel venstergrootte terug"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimeer of stel venstergrootte terug"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimeer appvenster"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Maak By Verstek Oop-instellings"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Kies hoe om webskakels vir hierdie app oop te maak"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"In die app"</string>
diff --git a/libs/WindowManager/Shell/res/values-am/strings.xml b/libs/WindowManager/Shell/res/values-am/strings.xml
index 14a79aa8475b..f3bc29d95673 100644
--- a/libs/WindowManager/Shell/res/values-am/strings.xml
+++ b/libs/WindowManager/Shell/res/values-am/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ግራ 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ግራ 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"የቀኝ ሙሉ ማያ ገፅ"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"መተግበሪያዎችን ይቀያይሩ"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"የላይ ሙሉ ማያ ገፅ"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ከላይ 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ከላይ 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"ወደነበረበት መልስ"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"ወደ ግራ አሳድግ"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"ወደ ቀኝ አሳድግ"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"የመተግበሪያ መስኮትን ወደ ግራ መጠን ቀይር"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"የመተግበሪያ መስኮትን ወደ ቀኝ መጠን ቀይር"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"የመስኮት መጠንን አሳድግ ወይም ወደነበረበት መልስ"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"ወደ የተከፈለ ማያ ገፅ ሁነታ ግባ"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"ወደ የዴስክቶፕ መስኮት ሁነታ ግባ"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"መስኮትን ወደ ግራ መጠን ቀይር"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"መስኮትን ወደ ቀኝ መጠን ቀይር"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"የመስኮት መጠንን አሳድግ ወይም ወደነበረበት መልስ"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"የመስኮት መጠንን አሳድግ ወይም ወደነበረበት መልስ"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"የመተግበሪያ መስኮትን አሳንስ"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"በነባሪ ቅንብሮች ክፈት"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ለዚህ የድር መተግበሪያ አገናኙን እንዴት እንደሚከፍቱ ይምረጡ"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"በመተግበሪያው ውስጥ"</string>
diff --git a/libs/WindowManager/Shell/res/values-ar/strings.xml b/libs/WindowManager/Shell/res/values-ar/strings.xml
index 9a6869a64f3f..60f27cfdee91 100644
--- a/libs/WindowManager/Shell/res/values-ar/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ar/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ضبط حجم النافذة اليسرى ليكون ٥٠%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ضبط حجم النافذة اليسرى ليكون ٣٠%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"عرض النافذة اليمنى بملء الشاشة"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"تبديل التطبيقات"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"عرض النافذة العلوية بملء الشاشة"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ضبط حجم النافذة العلوية ليكون ٧٠%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ضبط حجم النافذة العلوية ليكون ٥٠%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"استعادة"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"المحاذاة إلى اليسار"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"المحاذاة إلى اليمين"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"تغيير حجم نافذة التطبيق بمحاذاتها إلى اليمين"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"تغيير حجم نافذة التطبيق بمحاذاتها إلى اليسار"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"تكبير حجم النافذة أو استعادته"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"تفعيل \"وضع تقسيم الشاشة\""</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"تفعيل وضع عرض المحتوى في النافذة الحالية على سطح المكتب"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"تغيير حجم النافذة بمحاذاتها إلى اليمين"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"تغيير حجم النافذة بمحاذاتها إلى اليسار"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"تكبير حجم النافذة أو استعادته"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"تكبير حجم النافذة أو استعادته"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"تصغير نافذة التطبيق"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"إعدادات الفتح تلقائيًا"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"اختيار طريقة فتح روابط الويب لهذا التطبيق"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"في التطبيق"</string>
diff --git a/libs/WindowManager/Shell/res/values-az/strings.xml b/libs/WindowManager/Shell/res/values-az/strings.xml
index 5181930edf57..aced354ac826 100644
--- a/libs/WindowManager/Shell/res/values-az/strings.xml
+++ b/libs/WindowManager/Shell/res/values-az/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Sol 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Sol 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Sağ tam ekran"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Tətbiqləri dəyişin"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Yuxarı tam ekran"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Yuxarı 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Yuxarı 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Bərpa edin"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Sola tərəf çəkin"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Sağa tərəf çəkin"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Tətbiq pəncərəsinin ölçüsünü sola dəyişin"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Tətbiq pəncərəsinin ölçüsünü sağa dəyişin"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Pəncərə ölçüsünü artırın və ya bərpa edin"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Bölünmüş ekran rejiminə daxil olun"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Masaüstü pəncərə rejiminə daxil olun"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Pəncərə ölçüsünü sola dəyişin"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Pəncərə ölçüsünü sağa dəyişin"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Pəncərə ölçüsünü artırın və ya bərpa edin"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Pəncərə ölçüsünü artırın və ya bərpa edin"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Tətbiq pəncərəsini kiçildin"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Defolt ayarlarla açın"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Bu tətbiq üçün veb-linklərin necə açılacağını seçin"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Tətbiqdə"</string>
diff --git a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
index 92580d39f12c..b07c61258f4e 100644
--- a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
@@ -125,11 +125,11 @@
<string name="float_button_text" msgid="9221657008391364581">"Plutajuće"</string>
<string name="select_text" msgid="5139083974039906583">"Izaberite"</string>
<string name="screenshot_text" msgid="1477704010087786671">"Snimak ekrana"</string>
- <string name="open_in_browser_text" msgid="9181692926376072904">"Otvorite u pregledaču"</string>
+ <string name="open_in_browser_text" msgid="9181692926376072904">"Otvori u pregledaču"</string>
<string name="open_in_app_text" msgid="2874590745116268525">"Otvorite u aplikaciji"</string>
<string name="new_window_text" msgid="6318648868380652280">"Novi prozor"</string>
<string name="manage_windows_text" msgid="5567366688493093920">"Upravljajte prozorima"</string>
- <string name="change_aspect_ratio_text" msgid="9104456064548212806">"Promenite razmeru"</string>
+ <string name="change_aspect_ratio_text" msgid="9104456064548212806">"Promeni razmeru"</string>
<string name="close_text" msgid="4986518933445178928">"Zatvorite"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Zatvorite meni"</string>
<string name="desktop_mode_app_header_chip_text" msgid="6366422614991687237">"Otvorite meni"</string>
@@ -138,7 +138,7 @@
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Aplikacija ne može da se premesti ovde"</string>
<string name="desktop_mode_maximize_menu_immersive_button_text" msgid="559492223133829481">"Imerzivne"</string>
<string name="desktop_mode_maximize_menu_immersive_restore_button_text" msgid="4900114367354709257">"Vrati"</string>
- <string name="desktop_mode_maximize_menu_maximize_button_text" msgid="3090199175564175845">"Uvećajte"</string>
+ <string name="desktop_mode_maximize_menu_maximize_button_text" msgid="3090199175564175845">"Uvećaj"</string>
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Vratite"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Prikačite levo"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Prikačite desno"</string>
diff --git a/libs/WindowManager/Shell/res/values-bg/strings.xml b/libs/WindowManager/Shell/res/values-bg/strings.xml
index e7feb5b6fa8c..fcc4d83baf75 100644
--- a/libs/WindowManager/Shell/res/values-bg/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bg/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Ляв екран: 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Ляв екран: 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Десен екран: Показване на цял екран"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Размяна на приложенията"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Горен екран: Показване на цял екран"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Горен екран: 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Горен екран: 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Възстановяване"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Прилепване наляво"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Прилепване надясно"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Преоразмеряване на прозореца на приложението наляво"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Преоразмеряване на прозореца на приложението надясно"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Увеличаване или възстановяване на размера на прозореца"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Активиране на режима за разделен екран"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Активиране на режима за настолни компютри"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Преоразмеряване на прозореца наляво"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Преоразмеряване на прозореца надясно"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Увеличаване или възстановяване на размера на прозореца"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Увеличаване или възстановяване на размера на прозореца"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Намаляване на прозореца на приложението"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Отваряне на настройките по подразбиране"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Изберете как да се отварят уеб връзките за това приложение"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"В приложението"</string>
diff --git a/libs/WindowManager/Shell/res/values-bn/strings.xml b/libs/WindowManager/Shell/res/values-bn/strings.xml
index f4f887771fd9..b2c435e5ef0e 100644
--- a/libs/WindowManager/Shell/res/values-bn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bn/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"৫০% বাকি আছে"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"৩০% বাকি আছে"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"ডান দিকের অংশ নিয়ে পূর্ণ স্ক্রিন"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"অ্যাপ পাল্টান"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"উপর দিকের অংশ নিয়ে পূর্ণ স্ক্রিন"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"শীর্ষ ৭০%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"শীর্ষ ৫০%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"ফিরিয়ে আনুন"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"বাঁদিকে স্ন্যাপ করুন"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"ডানদিকে স্ন্যাপ করুন"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"বাঁদিকে অ্যাপ উইন্ডো রিসাইজ করুন"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"ডানদিকে অ্যাপ উইন্ডো রিসাইজ করুন"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"উইন্ডো সাইজ বড় বা রিস্টোর করুন"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"স্প্লিট স্ক্রিন মোডে প্রবেশ করুন"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"ডেস্কটপ উইন্ডোইং মোডে প্রবেশ করুন"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"বাঁদিকে উইন্ডো রিসাইজ করুন"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ডানদিকে উইন্ডো রিসাইজ করুন"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"উইন্ডো সাইজ বড় বা রিস্টোর করুন"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"উইন্ডো সাইজ বড় বা রিস্টোর করুন"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"অ্যাপ উইন্ডো ছোট করুন"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"ডিফল্ট হিসেবে থাকা সেটিংস খুলুন"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"এই অ্যাপের জন্য কীভাবে ওয়েব লিঙ্ক খুলবেন তা বেছে নিন"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"অ্যাপের মধ্যে"</string>
diff --git a/libs/WindowManager/Shell/res/values-bs/strings.xml b/libs/WindowManager/Shell/res/values-bs/strings.xml
index 12e4fc2700ed..8c1619ce925c 100644
--- a/libs/WindowManager/Shell/res/values-bs/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bs/strings.xml
@@ -43,7 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Lijevo 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Lijevo 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Desno cijeli ekran"</string>
- <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Zamijeni aplikacije"</string>
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Zamjena aplikacija"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Gore cijeli ekran"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Gore 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Gore 50%"</string>
@@ -138,20 +138,20 @@
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Ne možete premjestiti aplikaciju ovdje"</string>
<string name="desktop_mode_maximize_menu_immersive_button_text" msgid="559492223133829481">"Uvjerljivo"</string>
<string name="desktop_mode_maximize_menu_immersive_restore_button_text" msgid="4900114367354709257">"Vraćanje"</string>
- <string name="desktop_mode_maximize_menu_maximize_button_text" msgid="3090199175564175845">"Maksimiziranje"</string>
+ <string name="desktop_mode_maximize_menu_maximize_button_text" msgid="3090199175564175845">"Maksimiziraj"</string>
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Vraćanje"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Pomicanje ulijevo"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Pomicanje udesno"</string>
- <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Promijeni veličinu prozora aplikacije ulijevo"</string>
- <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Promijeni veličinu prozora aplikacije udesno"</string>
- <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maksimiziraj ili vrati veličinu prozora"</string>
- <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Pokreni način podijeljenog zaslona"</string>
- <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Pokreni način prikaza u prozorima na računalu"</string>
- <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Promijeni veličinu prozora ulijevo"</string>
- <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Promijeni veličinu prozora udesno"</string>
- <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimiziraj ili vrati veličinu prozora"</string>
- <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimiziraj ili vrati veličinu prozora"</string>
- <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimiziraj prozor aplikacije"</string>
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Promjena veličine prozora aplikacije lijevo"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Promjena veličine prozora aplikacije desno"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maksimiziranje ili vraćanje veličine prozora"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Pokretanje načina rada podijeljenog ekrana"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Pokretanje načina rada s prozorima na radnoj površini"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Promjena veličine prozora i poravnanje lijevo"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Promjena veličine prozora i poravnanje desno"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimiziranje ili vraćanje veličine prozora"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimiziranje ili vraćanje veličine prozora"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimiziranje prozora aplikacije"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Otvaranje prema zadanim postavkama"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Odaberite način otvaranja web linkova za ovu aplikaciju"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"U aplikaciji"</string>
diff --git a/libs/WindowManager/Shell/res/values-ca/strings.xml b/libs/WindowManager/Shell/res/values-ca/strings.xml
index 1623954d1d7c..37802f4c7f94 100644
--- a/libs/WindowManager/Shell/res/values-ca/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ca/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Pantalla esquerra al 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Pantalla esquerra al 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Pantalla dreta completa"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Canvia les aplicacions"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Pantalla superior completa"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Pantalla superior al 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Pantalla superior al 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Restaura"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Ajusta a l\'esquerra"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Ajusta a la dreta"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Canvia la mida de la finestra de l\'aplicació a l\'esquerra"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Canvia la mida de la finestra de l\'aplicació a la dreta"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maximitza o restaura la mida de la finestra"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Entra al mode de pantalla dividida"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Entra al mode d\'enfinestrament a l\'escriptori"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Canvia la mida de la finestra a l\'esquerra"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Canvia la mida de la finestra a la dreta"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximitza o restaura la mida de la finestra"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximitza o restaura la mida de la finestra"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimitza la finestra de l\'aplicació"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Configuració d\'obertura predeterminada"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Tria com vols obrir els enllaços web per a aquesta aplicació"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"A l\'aplicació"</string>
diff --git a/libs/WindowManager/Shell/res/values-cs/strings.xml b/libs/WindowManager/Shell/res/values-cs/strings.xml
index f6ac59ca24b7..c4514eb4ce8d 100644
--- a/libs/WindowManager/Shell/res/values-cs/strings.xml
+++ b/libs/WindowManager/Shell/res/values-cs/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50 % vlevo"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"30 % vlevo"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Pravá část na celou obrazovku"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Zaměnit aplikace"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Horní část na celou obrazovku"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"70 % nahoře"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"50 % nahoře"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Obnovit"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Přichytit vlevo"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Přichytit vpravo"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Změnit velikost okna aplikace vlevo"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Změnit velikost okna aplikace vpravo"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maximalizovat nebo obnovit velikost okna"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Přechod do režimu rozdělené obrazovky"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Přejít do režimu okenního systému pro počítače"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Přichytit okno vlevo"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Přichytit okno vpravo"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximalizovat nebo obnovit velikost okna"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximalizovat nebo obnovit velikost okna"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimalizovat okno aplikace"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Otevírat podle výchozího nastavení"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Určete, jak se v této aplikaci mají otevírat webové odkazy"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"V aplikaci"</string>
diff --git a/libs/WindowManager/Shell/res/values-de/strings.xml b/libs/WindowManager/Shell/res/values-de/strings.xml
index d7ee8a0cf8c3..7b21719bc880 100644
--- a/libs/WindowManager/Shell/res/values-de/strings.xml
+++ b/libs/WindowManager/Shell/res/values-de/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50 % links"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"30 % links"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Vollbild rechts"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Apps austauschen"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Vollbild oben"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"70 % oben"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"50 % oben"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Wiederherstellen"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Links andocken"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Rechts andocken"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Größe des linken App-Fensters anpassen"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Größe des rechten App-Fensters anpassen"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Fenstergröße maximieren oder wiederherstellen"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Splitscreen-Modus aktivieren"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Desktop-Fenstermodus aktivieren"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Fenstergröße links anpassen"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Fenstergröße rechts anpassen"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Fenstergröße maximieren oder wiederherstellen"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Fenstergröße maximieren oder wiederherstellen"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"App-Fenster minimieren"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Einstellungen für die Option „Standardmäßig öffnen“"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Festlegen, wie Weblinks für diese App geöffnet werden"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"In der App"</string>
diff --git a/libs/WindowManager/Shell/res/values-el/strings.xml b/libs/WindowManager/Shell/res/values-el/strings.xml
index 4ba68b4fc9db..eb45a31c5d8a 100644
--- a/libs/WindowManager/Shell/res/values-el/strings.xml
+++ b/libs/WindowManager/Shell/res/values-el/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Αριστερή 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Αριστερή 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Δεξιά πλήρης οθόνη"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Εναλλαγή εφαρμογών"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Πάνω πλήρης οθόνη"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Πάνω 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Πάνω 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Επαναφορά"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Κούμπωμα αριστερά"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Κούμπωμα δεξιά"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Αλλαγή μεγέθους παραθύρου εφαρμογής αριστερά"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Αλλαγή μεγέθους παραθύρου εφαρμογής δεξιά"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Μεγιστοποίηση ή επαναφορά μεγέθους παραθύρου"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Είσοδος στη λειτουργία διαχωρισμού οθόνης"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Είσοδος στη λειτουργία προσαρμογής σε παράθυρο υπολογιστή"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Αλλαγή μεγέθους παραθύρου προς τα αριστερά"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Αλλαγή μεγέθους παραθύρου προς τα δεξιά"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Μεγιστοποίηση ή επαναφορά μεγέθους παραθύρου"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Μεγιστοποίηση ή επαναφορά μεγέθους παραθύρου"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Ελαχιστοποίηση παραθύρου εφαρμογής"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Άνοιγμα ρυθμίσεων από προεπιλογή"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Επιλογή τρόπου ανοίγματος συνδέσμων ιστού για την εφαρμογή"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Στην εφαρμογή"</string>
diff --git a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
index 8b1a14f66195..8dc27dabfc2c 100644
--- a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Left 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Left 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Right full screen"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Swap apps"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Top full screen"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Top 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Top 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Restore"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Snap left"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Snap right"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Resize app window left"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Resize app window right"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maximise or restore window size"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Enter split-screen mode"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Enter desktop windowing mode"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Resize window to left"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Resize window to right"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximise or restore window size"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximise or restore window size"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimise app window"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Open by default settings"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Choose how to open web links for this app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"In the app"</string>
diff --git a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
index 8b1a14f66195..8dc27dabfc2c 100644
--- a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Left 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Left 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Right full screen"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Swap apps"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Top full screen"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Top 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Top 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Restore"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Snap left"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Snap right"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Resize app window left"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Resize app window right"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maximise or restore window size"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Enter split-screen mode"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Enter desktop windowing mode"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Resize window to left"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Resize window to right"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximise or restore window size"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximise or restore window size"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimise app window"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Open by default settings"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Choose how to open web links for this app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"In the app"</string>
diff --git a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
index 8b1a14f66195..8dc27dabfc2c 100644
--- a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Left 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Left 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Right full screen"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Swap apps"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Top full screen"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Top 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Top 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Restore"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Snap left"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Snap right"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Resize app window left"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Resize app window right"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maximise or restore window size"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Enter split-screen mode"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Enter desktop windowing mode"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Resize window to left"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Resize window to right"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximise or restore window size"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximise or restore window size"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimise app window"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Open by default settings"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Choose how to open web links for this app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"In the app"</string>
diff --git a/libs/WindowManager/Shell/res/values-es/strings.xml b/libs/WindowManager/Shell/res/values-es/strings.xml
index f36135e1febd..dd9635dccfcb 100644
--- a/libs/WindowManager/Shell/res/values-es/strings.xml
+++ b/libs/WindowManager/Shell/res/values-es/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Izquierda 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Izquierda 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Pantalla derecha completa"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Cambiar aplicaciones"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Pantalla superior completa"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Superior 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Superior 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Restaurar"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Acoplar a la izquierda"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Acoplar a la derecha"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Cambiar tamaño de la ventana de la aplicación izquierda"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Cambiar tamaño de la ventana de la aplicación derecha"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maximizar o restaurar tamaño de la ventana"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Activar modo Pantalla dividida"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Activar modo Escritorio basado en ventanas"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Cambiar tamaño de la ventana a la izquierda"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Cambiar tamaño de la ventana a la derecha"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximizar o restaurar tamaño de la ventana"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximizar o restaurar tamaño de la ventana"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizar ventana de la aplicación"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Abrir con los ajustes predeterminados"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Elige cómo quieres abrir los enlaces web de esta aplicación"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"En la aplicación"</string>
diff --git a/libs/WindowManager/Shell/res/values-eu/strings.xml b/libs/WindowManager/Shell/res/values-eu/strings.xml
index b77d0eb642f7..9898af0c394d 100644
--- a/libs/WindowManager/Shell/res/values-eu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-eu/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Ezarri ezkerraldea % 50en"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Ezarri ezkerraldea % 30en"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Ezarri eskuinaldea pantaila osoan"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Aldatu aplikazioz"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Ezarri goialdea pantaila osoan"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Ezarri goialdea % 70en"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Ezarri goialdea % 50en"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Leheneratu"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Ezarri ezkerrean"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Ezarri eskuinean"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Aldatu aplikazioaren leihoaren tamaina eta eraman ezkerrera"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Aldatu aplikazioaren leihoaren tamaina eta eraman eskuinera"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maximizatu edo leheneratu leihoaren tamaina"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Sartu pantaila zatituaren moduan"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Sartu ordenagailuan leihoak erabiltzeko moduan"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Aldatu leihoaren tamaina eta eraman ezkerrera"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Aldatu leihoaren tamaina eta eraman eskuinera"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximizatu edo leheneratu leihoaren tamaina"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximizatu edo leheneratu leihoaren tamaina"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizatu aplikazioaren leihoa"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Modu lehenetsian irekitzearen ezarpenak"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Aukeratu nola ireki sareko estekak aplikazio honetan"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Aplikazioan"</string>
diff --git a/libs/WindowManager/Shell/res/values-fi/strings.xml b/libs/WindowManager/Shell/res/values-fi/strings.xml
index 06ff6e74322c..b23c833fa453 100644
--- a/libs/WindowManager/Shell/res/values-fi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fi/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Vasen 50 %"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Vasen 30 %"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Oikea koko näytölle"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Vaihda sovellusta"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Yläosa koko näytölle"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Yläosa 70 %"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Yläosa 50 %"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Palauta"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Siirrä vasemmalle"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Siirrä oikealle"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Muuta vasemmanpuoleisen sovellusikkunan kokoa"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Muuta oikeanpuoleisen sovellusikkunan kokoa"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Suurenna ikkuna tai palauta ikkunan koko"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Avaa kahtia jaettu näyttö"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Siirry työpöydän ikkunointitilaan"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Muuta vasemmanpuoleisen ikkunan kokoa"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Muuta vasemmanpuoleisen ikkunan kokoa"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Suurenna ikkuna tai palauta ikkunan koko"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Suurenna ikkuna tai palauta ikkunan koko"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Pienennä sovellusikkuna"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Avaa oletusasetusten mukaan"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Valitse, miten verkkolinkit avataan tässä sovelluksessa"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Sovelluksessa"</string>
diff --git a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
index 08ff1d35a8c7..34b5b0acf753 100644
--- a/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fr-rCA/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50 % à la gauche"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"30 % à la gauche"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Plein écran à la droite"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Permuter des applis"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Plein écran dans le haut"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"70 % dans le haut"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"50 % dans le haut"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Restaurer"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Épingler à gauche"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Épingler à droite"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Redimensionner la fenêtre de l\'appli à gauche"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Redimensionner la fenêtre de l\'appli à droite"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Agrandir ou restaurer la taille de la fenêtre"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Entrer en mode Écran divisé"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Entrer en mode Fenêtrage bureau"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Redimensionner la fenêtre vers la gauche"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Redimensionner la fenêtre vers la droite"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Agrandir ou restaurer la taille de la fenêtre"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Agrandir ou restaurer la taille de la fenêtre"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Réduire la fenêtre de l\'appli"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Ouvrir les paramètres par défaut"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Choisissez comment ouvrir les liens Web pour cette appli"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Dans l\'appli"</string>
diff --git a/libs/WindowManager/Shell/res/values-fr/strings.xml b/libs/WindowManager/Shell/res/values-fr/strings.xml
index 9ced5c7bafd4..be41bba34772 100644
--- a/libs/WindowManager/Shell/res/values-fr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fr/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Écran de gauche à 50 %"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Écran de gauche à 30 %"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Écran de droite en plein écran"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Échanger les applis"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Écran du haut en plein écran"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Écran du haut à 70 %"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Écran du haut à 50 %"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Restaurer"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Ancrer à gauche"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Ancrer à droite"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Redimensionner la fenêtre de l\'appli vers la gauche"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Redimensionner la fenêtre de l\'appli vers la droite"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Agrandir ou restaurer la taille de la fenêtre"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Passer en mode Écran partagé"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Activer le mode fenêtrage du bureau"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Redimensionner la fenêtre vers la gauche"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Redimensionner la fenêtre vers la droite"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Agrandir ou restaurer la taille de la fenêtre"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Agrandir ou restaurer la taille de la fenêtre"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Réduire la fenêtre de l\'application"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Ouvrir les paramètres par défaut"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Choisir comment ouvrir les liens Web pour cette appli"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Dans l\'application"</string>
diff --git a/libs/WindowManager/Shell/res/values-gu/strings.xml b/libs/WindowManager/Shell/res/values-gu/strings.xml
index d8c422fd1bd2..dcd57385809f 100644
--- a/libs/WindowManager/Shell/res/values-gu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-gu/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ડાબે 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ડાબે 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"જમણી સ્ક્રીન સ્ક્રીન"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ઍપને સ્વૉપ કરો"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"શીર્ષ પૂર્ણ સ્ક્રીન"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"શીર્ષ 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"શીર્ષ 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"રિસ્ટોર કરો"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"ડાબે સ્નૅપ કરો"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"જમણે સ્નૅપ કરો"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"ડાબી બાજુથી ઍપની વિન્ડોનું કદ બદલો"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"જમણી બાજુથી ઍપની વિન્ડોનું કદ બદલો"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"વિન્ડોનું કદ મહત્તમ કરો અથવા રિસ્ટોર કરો"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"સ્ક્રીન-વિભાજન મોડ દાખલ કરો"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"ડેસ્કટૉપ વિન્ડો મોડ દાખલ કરો"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ડાબી બાજુ વિન્ડોનું કદ બદલો"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"જમણી બાજુ વિન્ડોનું કદ બદલો"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"વિન્ડોનું કદ મહત્તમ કરો અથવા રિસ્ટોર કરો"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"વિન્ડોનું કદ મહત્તમ કરો અથવા રિસ્ટોર કરો"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ઍપની વિન્ડોને નાની કરો"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"\'ડિફૉલ્ટ તરીકે ખોલો\' સેટિંગ"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"આ ઍપ માટે વેબ લિંક ખોલવાની રીત પસંદ કરો"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ઍપમાં"</string>
diff --git a/libs/WindowManager/Shell/res/values-hi/strings.xml b/libs/WindowManager/Shell/res/values-hi/strings.xml
index f8215afb1c05..4bf2d92c1860 100644
--- a/libs/WindowManager/Shell/res/values-hi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hi/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"बाईं स्क्रीन को 50% बनाएं"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"बाईं स्क्रीन को 30% बनाएं"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"दाईं स्क्रीन को फ़ुल स्क्रीन बनाएं"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ऐप्लिकेशन स्वैप करें"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"ऊपर की स्क्रीन को फ़ुल स्क्रीन बनाएं"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ऊपर की स्क्रीन को 70% बनाएं"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ऊपर की स्क्रीन को 50% बनाएं"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"पहले जैसा करें"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"बाईं ओर स्नैप करें"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"दाईं ओर स्नैप करें"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"ऐप्लिकेशन विंडो का साइज़ बाईं ओर से बदलें"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"ऐप्लिकेशन विंडो का साइज़ दाईं ओर से बदलें"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"विंडो को बड़ा करें या उसका साइज़ पहले जैसा करें"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"स्प्लिट स्क्रीन मोड में चालू करें"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"डेस्कटॉप विंडो मोड में जाएं"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"विंडो का साइज़ बाईं ओर से बदलें"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"विंडो का साइज़ दाईं ओर से बढ़ाएं"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"विंडो को बड़ा करें या उसका साइज़ पहले जैसा करें"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"विंडो को बड़ा करें या उसका साइज़ पहले जैसा करें"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ऐप्लिकेशन की विंडो को छोटा करें"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"डिफ़ॉल्ट सेटिंग के हिसाब से खोलें"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"इस ऐप्लिकेशन के लिए वेब लिंक खोलने का तरीका चुनें"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ऐप्लिकेशन में"</string>
diff --git a/libs/WindowManager/Shell/res/values-hu/strings.xml b/libs/WindowManager/Shell/res/values-hu/strings.xml
index 76e7579232d9..546a465c8699 100644
--- a/libs/WindowManager/Shell/res/values-hu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hu/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Bal oldali 50%-ra"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Bal oldali 30%-ra"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Jobb oldali teljes képernyőre"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Váltás az alkalmazások között"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Felső teljes képernyőre"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Felső 70%-ra"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Felső 50%-ra"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Visszaállítás"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Balra igazítás"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Jobbra igazítás"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Alkalmazásablak átméretezése balra"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Alkalmazásablak átméretezése jobbra"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Ablak teljes méretre állítása vagy visszaállítása"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Belépés osztott képernyős módba"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Asztali ablakkezelési mód indítása"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ablak átméretezése balra"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ablak átméretezése jobbra"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Ablak teljes méretre állítása vagy visszaállítása"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Ablak teljes méretre állítása vagy visszaállítása"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Alkalmazásablak kis méretre állítása"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Alapértelmezett beállítások megnyitása"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Az app webes linkjeinek megnyitásához használt módszer"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Az alkalmazásban"</string>
diff --git a/libs/WindowManager/Shell/res/values-hy/strings.xml b/libs/WindowManager/Shell/res/values-hy/strings.xml
index 0eb75c79e4b8..39a395f9add1 100644
--- a/libs/WindowManager/Shell/res/values-hy/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hy/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Ձախ էկրանը՝ 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Ձախ էկրանը՝ 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Աջ էկրանը՝ լիաէկրան"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Հավելվածները տեղերով փոխել"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Վերևի էկրանը՝ լիաէկրան"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Վերևի էկրանը՝ 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Վերևի էկրանը՝ 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Վերականգնել"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Ամրացնել ձախ կողմում"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Ամրացնել աջ կողմում"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Ձգել հավելվածի պատուհանը դեպի ձախ"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Ձգել հավելվածի պատուհանը դեպի աջ"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Ծավալել կամ վերականգնել պատուհանի չափսը"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Մտնել էկրանի տրոհման ռեժիմ"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Մտնել համակարգչի ռեժիմ"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ձգել պատուհանը դեպի ձախ"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ձգել պատուհանը դեպի աջ"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Ծավալել կամ վերականգնել պատուհանի չափսը"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Ծավալել կամ վերականգնել պատուհանի չափսը"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Ծալել հավելվածի պատուհանը"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Բացել կարգավորումներն ըստ կանխադրման"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Ընտրեք՝ ինչպես բացել այս հավելվածի վեբ հղումները"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Հավելվածում"</string>
diff --git a/libs/WindowManager/Shell/res/values-in/strings.xml b/libs/WindowManager/Shell/res/values-in/strings.xml
index 813e9783f336..09ce5257c56e 100644
--- a/libs/WindowManager/Shell/res/values-in/strings.xml
+++ b/libs/WindowManager/Shell/res/values-in/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Kiri 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Kiri 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Layar penuh di kanan"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Ganti Aplikasi"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Layar penuh di atas"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Atas 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Atas 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Pulihkan"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Maksimalkan ke kiri"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Maksimalkan ke kanan"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Ubah ukuran jendela aplikasi ke kiri"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Ubah ukuran jendela aplikasi ke kanan"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maksimalkan atau pulihkan ukuran jendela"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Masuk ke mode layar terpisah"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Masuk ke mode windowing desktop"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ubah ukuran jendela ke kiri"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ubah ukuran jendela ke kanan"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimalkan atau pulihkan ukuran jendela"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimalkan atau pulihkan ukuran jendela"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimalkan jendela aplikasi"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Buka dengan setelan default"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Pilih cara membuka link web untuk aplikasi ini"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Di aplikasi"</string>
diff --git a/libs/WindowManager/Shell/res/values-iw/strings.xml b/libs/WindowManager/Shell/res/values-iw/strings.xml
index 1cd89a615cb2..b164b1131ad2 100644
--- a/libs/WindowManager/Shell/res/values-iw/strings.xml
+++ b/libs/WindowManager/Shell/res/values-iw/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"שמאלה 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"שמאלה 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"מסך ימני מלא"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"מעבר בין אפליקציות"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"מסך עליון מלא"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"עליון 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"עליון 50%"</string>
@@ -130,7 +129,7 @@
<string name="open_in_app_text" msgid="2874590745116268525">"פתיחה באפליקציה"</string>
<string name="new_window_text" msgid="6318648868380652280">"חלון חדש"</string>
<string name="manage_windows_text" msgid="5567366688493093920">"ניהול החלונות"</string>
- <string name="change_aspect_ratio_text" msgid="9104456064548212806">"שינוי של יחס גובה-רוחב"</string>
+ <string name="change_aspect_ratio_text" msgid="9104456064548212806">"שינוי יחס הגובה-רוחב"</string>
<string name="close_text" msgid="4986518933445178928">"סגירה"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"סגירת התפריט"</string>
<string name="desktop_mode_app_header_chip_text" msgid="6366422614991687237">"פתיחת התפריט"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"שחזור"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"הצמדה לשמאל"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"הצמדה לימין"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"שינוי הגודל של חלון האפליקציה שמשמאל"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"שינוי הגודל של חלון האפליקציה שמימין"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"שחזור של גודל החלון או הגדלת החלון"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"כניסה למצב מסך מפוצל"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"כניסה למצב שינוי הגודל של החלונות בממשק המחשב"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"שינוי גודל החלון שמשמאל"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"שינוי גודל החלון שמימין"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"שחזור של גודל החלון או הגדלת החלון"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"שחזור של גודל החלון או הגדלת החלון"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"מזעור החלון של האפליקציה"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"הגדרות לפתיחה כברירת מחדל"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"כאן בוחרים איך לפתוח באפליקציה הזו קישורים לדפי אינטרנט"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"באפליקציה"</string>
diff --git a/libs/WindowManager/Shell/res/values-ka/strings.xml b/libs/WindowManager/Shell/res/values-ka/strings.xml
index 02e0f320eea6..1be19af9b372 100644
--- a/libs/WindowManager/Shell/res/values-ka/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ka/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"მარცხენა ეკრანი — 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"მარცხენა ეკრანი — 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"მარჯვენა ნაწილის სრულ ეკრანზე გაშლა"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"აპების გადართვა"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"ზედა ნაწილის სრულ ეკრანზე გაშლა"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ზედა ეკრანი — 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ზედა ეკრანი — 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"აღდგენა"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"მარცხნივ გადატანა"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"მარჯვნივ გადატანა"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"აპის მარცხენა ფანჯრის ზომის შეცვლა"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"აპის მარჯვენა ფანჯრის ზომის შეცვლა"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"ფანჯრის მაქსიმალურ ზომამდე გაზრდა ან აღდგენა"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"გაყოფილი ეკრანის რეჟიმში შესვლა"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"დესკტოპის ფანჯრის რეჟიმში შესვლა"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ფანჯრის ზომის შეცვლა მარცხნივ"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ფანჯრის ზომის შეცვლა მარჯვნივ"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ფანჯრის მაქსიმალურ ზომამდე გაზრდა ან აღდგენა"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ფანჯრის მაქსიმალურ ზომამდე გაზრდა ან აღდგენა"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"აპის ფანჯრის ზომის შემცირება"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"პარამეტრების ნაგულისხმევად გახსნა"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ამ აპისთვის ვებ ბმულების გახსნის წესის არჩევა"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"აპში"</string>
diff --git a/libs/WindowManager/Shell/res/values-kk/strings.xml b/libs/WindowManager/Shell/res/values-kk/strings.xml
index 61c331df7598..5bd85191ec65 100644
--- a/libs/WindowManager/Shell/res/values-kk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-kk/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50% сол жақта"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"30% сол жақта"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Оң жағын толық экранға шығару"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Қолданбаларды ауыстыру"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Жоғарғы жағын толық экранға шығару"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"70% жоғарғы жақта"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"50% жоғарғы жақта"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Қалпына келтіру"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Солға тіркеу"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Оңға тіркеу"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Қолданба терезесінің өлшемін сол жақтан өзгерту"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Қолданба терезесінің өлшемін оң жақтан өзгерту"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Терезе өлшемін ұлғайту не қалпына келтіру"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Экранды бөлу режиміне өту"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Жұмыс үстелінің терезе режиміне өту"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Терезе өлшемін сол жаққа өзгерту"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Терезе өлшемін оң жаққа өзгерту"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Терезе өлшемін ұлғайту не қалпына келтіру"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Терезе өлшемін ұлғайту не қалпына келтіру"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Қолданба терезесін кішірейту"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Әдепкісінше ашу параметрлері"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Осы қолданбадағы веб-сілтемелерді ашу жолын таңдаңыз"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Қолданбада"</string>
diff --git a/libs/WindowManager/Shell/res/values-ko/strings.xml b/libs/WindowManager/Shell/res/values-ko/strings.xml
index 13c700952609..65add57a9e6b 100644
--- a/libs/WindowManager/Shell/res/values-ko/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ko/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"왼쪽 화면 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"왼쪽 화면 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"오른쪽 화면 전체화면"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"앱 전환"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"위쪽 화면 전체화면"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"위쪽 화면 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"위쪽 화면 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"복원"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"왼쪽으로 맞추기"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"오른쪽으로 맞추기"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"앱 창 크기 왼쪽으로 조절"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"앱 창 크기 오른쪽으로 조절"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"창 최대화 또는 크기 복원"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"화면 분할 모드 시작"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"데스크톱 창 모드 시작"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"창 크기 왼쪽으로 조절"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"창 크기 오른쪽으로 조절"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"창 최대화 또는 크기 복원"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"창 최대화 또는 크기 복원"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"앱 창 최소화"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"기본값으로 열기 설정"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"이 앱에서 웹 링크를 여는 방법을 선택하세요"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"앱에서"</string>
diff --git a/libs/WindowManager/Shell/res/values-ky/strings.xml b/libs/WindowManager/Shell/res/values-ky/strings.xml
index eb990f142da8..96c2226daf58 100644
--- a/libs/WindowManager/Shell/res/values-ky/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ky/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Сол жактагы экранды 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Сол жактагы экранды 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Оң жактагы экранды толук экран режимине өткөрүү"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Колдонмолорду алмаштыруу"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Үстүнкү экранды толук экран режимине өткөрүү"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Үстүнкү экранды 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Үстүнкү экранды 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Калыбына келтирүү"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Солго жылдыруу"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Оңго жылдыруу"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Колдонмонун терезесинин өлчөмүн солго өзгөртүү"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Колдонмонун терезесинин өлчөмүн оңго өзгөртүү"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Терезенин өлчөмүн чоңойтуу же калыбына келтирүү"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Экранды бөлүү режимине өтүү"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Иш тактанын терезелери режимине өтүү"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Терезенин өлчөмүн солго өзгөртүү"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Терезенин өлчөмүн оңго өзгөртүү"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Терезенин өлчөмүн чоңойтуу же калыбына келтирүү"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Терезенин өлчөмүн чоңойтуу же калыбына келтирүү"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Колдонмонун терезесин кичирейтүү"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Демейки шартта ачылуучу шилтемелердин параметрлери"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Колдонмодо шилтемелер кантип ачыларын тандаңыз"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Колдонмодо"</string>
diff --git a/libs/WindowManager/Shell/res/values-lo/strings.xml b/libs/WindowManager/Shell/res/values-lo/strings.xml
index 50164c081bb4..9337efc92606 100644
--- a/libs/WindowManager/Shell/res/values-lo/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lo/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ຊ້າຍ 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ຊ້າຍ 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"ເຕັມໜ້າຈໍຂວາ"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ສະຫຼັບແອັບ"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"ເຕັມໜ້າຈໍເທິງສຸດ"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ເທິງສຸດ 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ເທິງສຸດ 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"ກູ້ຄືນ"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"ແນບຊ້າຍ"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"ແນບຂວາ"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"ປັບຂະໜາດໜ້າຈໍແອັບໄປທາງຊ້າຍ"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"ປັບຂະໜາດໜ້າຈໍແອັບໄປທາງຂວາ"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"ຂະຫຍາຍ ຫຼື ຄືນຄ່າຂະໜາດໜ້າຈໍ"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"ເຂົ້າສູ່ໂໝດແບ່ງໜ້າຈໍ"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"ເຂົ້າສູ່ໂໝດໜ້າຈໍເດັສທັອບ"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ປັບຂະໜາດໜ້າຈໍໄປທາງຊ້າຍ"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ປັບຂະໜາດໜ້າຈໍໄປທາງຂວາ"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ຂະຫຍາຍ ຫຼື ຄືນຄ່າຂະໜາດໜ້າຈໍ"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ຂະຫຍາຍ ຫຼື ຄືນຄ່າຂະໜາດໜ້າຈໍ"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ຫຍໍ້ໜ້າຈໍແອັບ"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"ເປີດຕາມການຕັ້ງຄ່າເລີ່ມຕົ້ນ"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ເລືອກວິທີເປີດລິ້ງເວັບສຳລັບແອັບນີ້"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ໃນແອັບ"</string>
diff --git a/libs/WindowManager/Shell/res/values-lv/strings.xml b/libs/WindowManager/Shell/res/values-lv/strings.xml
index a5547b0f71ea..24a969bc8c1b 100644
--- a/libs/WindowManager/Shell/res/values-lv/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lv/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Pa kreisi 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Pa kreisi 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Labā daļa pa visu ekrānu"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Apmainīt lietotnes"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Augšdaļa pa visu ekrānu"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Augšdaļa 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Augšdaļa 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Atjaunot"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Piestiprināt pa kreisi"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Piestiprināt pa labi"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Mainīt lietotnes loga lielumu uz kreiso pusi"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Mainīt lietotnes loga lielumu uz labo pusi"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maksimizēt vai atjaunot loga lielumu"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Ieslēgt ekrāna sadalīšanas režīmu"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Ieslēgt darbvirsmas logu režīmu"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Mainīt loga lielumu uz kreiso pusi"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Mainīt loga lielumu uz labo pusi"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimizēt vai atjaunot loga lielumu"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimizēt vai atjaunot loga lielumu"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizēt lietotnes logu"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Atvērt pēc noklusējuma iestatījumiem"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Izvēlieties, kā atvērt šajā lietotnē norādītās saites"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Lietotnē"</string>
diff --git a/libs/WindowManager/Shell/res/values-mk/strings.xml b/libs/WindowManager/Shell/res/values-mk/strings.xml
index 6593e2d9e66b..f7177acc8681 100644
--- a/libs/WindowManager/Shell/res/values-mk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mk/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Левиот 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Левиот 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Десниот на цел екран"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Менувајте апликации"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Горниот на цел екран"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Горниот 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Горниот 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Врати"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Фотографирај лево"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Фотографирај десно"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Променете ја големината на прозорецот на апликацијата одлево"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Променете ја големината на прозорецот на апликацијата оддесно"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Максимизирајте или вратете ја големината на прозорецот"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Влезете во „Режим на поделен екран“"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Влезете во „Режим со прозорци на работната површина“"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Променете ја големината на прозорецот налево"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Променете ја големината на прозорецот надесно"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Максимизирајте или вратете ја големината на прозорецот"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Максимизирајте или вратете ја големината на прозорецот"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Минимизирајте го прозорецот на апликацијата"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Отвори според стандардните поставки"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Изберете како да се отвораат линковите за апликацијава"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Во апликацијата"</string>
diff --git a/libs/WindowManager/Shell/res/values-mn/strings.xml b/libs/WindowManager/Shell/res/values-mn/strings.xml
index 8914e1fa782a..b38026cc5445 100644
--- a/libs/WindowManager/Shell/res/values-mn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mn/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Зүүн 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Зүүн 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Баруун талын бүтэн дэлгэц"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Аппуудыг солих"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Дээд талын бүтэн дэлгэц"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Дээд 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Дээд 50%"</string>
@@ -130,7 +129,7 @@
<string name="open_in_app_text" msgid="2874590745116268525">"Аппад нээх"</string>
<string name="new_window_text" msgid="6318648868380652280">"Шинэ цонх"</string>
<string name="manage_windows_text" msgid="5567366688493093920">"Windows-г удирдах"</string>
- <string name="change_aspect_ratio_text" msgid="9104456064548212806">"Харьцааг өөрчлөх"</string>
+ <string name="change_aspect_ratio_text" msgid="9104456064548212806">"Аспектын харьцааг өөрчлөх"</string>
<string name="close_text" msgid="4986518933445178928">"Хаах"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Цэсийг хаах"</string>
<string name="desktop_mode_app_header_chip_text" msgid="6366422614991687237">"Цэсийг нээх"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Сэргээх"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Зүүн тийш зэрэгцүүлэх"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Баруун тийш зэрэгцүүлэх"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Аппын цонхны хэмжээг зүүн тал руу өөрчлөх"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Аппын цонхны хэмжээг баруун тал руу өөрчлөх"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Цонхны хэмжээг томруулах эсвэл сэргээх"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Дэлгэц хуваах горимд орох"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Дэлгэцийн цонхны горимд орох"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Цонхны хэмжээг зүүн тал руу өөрчлөх"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Цонхны хэмжээг баруун тал руу өөрчлөх"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Цонхны хэмжээг томруулах эсвэл сэргээх"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Цонхны хэмжээг томруулах эсвэл сэргээх"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Аппын цонхыг жижгэрүүлэх"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Өгөгдмөл тохиргоогоор нээх"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Энэ аппад веб холбоосыг хэрхэн нээхийг сонгоно уу"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Аппад"</string>
diff --git a/libs/WindowManager/Shell/res/values-mr/strings.xml b/libs/WindowManager/Shell/res/values-mr/strings.xml
index 81594798ef48..d9c1d1f45a55 100644
--- a/libs/WindowManager/Shell/res/values-mr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mr/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"डावी 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"डावी 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"उजवी फुल स्क्रीन"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"अ‍ॅप्स स्वॅप करा"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"शीर्ष फुल स्क्रीन"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"शीर्ष 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"शीर्ष 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"रिस्टोअर करा"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"डावीकडे स्नॅप करा"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"उजवीकडे स्नॅप करा"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"अ‍ॅप विंडोचा डावीकडून आकार बदला"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"अ‍ॅप विंडोचा उजवीकडून आकार बदला"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"विंडोचा आकार मोठा करा किंवा रिस्टोअर करा"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"स्प्लिट स्क्रीन मोड एंटर करा"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"डेस्कटॉप विंडोइंग मोड एंटर करा"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"अ‍ॅप विंडोचा डावीकडे आकार बदला"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"अ‍ॅप विंडोचा उजवीकडे आकार बदला"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"विंडोचा आकार मोठा करा किंवा रिस्टोअर करा"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"विंडोचा आकार मोठा करा किंवा रिस्टोअर करा"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"अ‍ॅप विंडो लहान करा"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"बाय डीफॉल्ट सेटिंग्ज उघडा"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"या अ‍ॅपसाठीच्या वेब लिंक कशा उघडाव्यात हे निवडा"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ॲपमध्ये"</string>
diff --git a/libs/WindowManager/Shell/res/values-my/strings.xml b/libs/WindowManager/Shell/res/values-my/strings.xml
index b749b670f74d..1f4db6d9b872 100644
--- a/libs/WindowManager/Shell/res/values-my/strings.xml
+++ b/libs/WindowManager/Shell/res/values-my/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ဘယ်ဘက် မျက်နှာပြင် ၅၀%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ဘယ်ဘက် မျက်နှာပြင် ၃၀%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"ညာဘက် မျက်နှာပြင်အပြည့်"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"အက်ပ်ပြောင်းရန်"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"အပေါ်ဘက် မျက်နှာပြင်အပြည့်"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"အပေါ်ဘက် မျက်နှာပြင် ၇၀%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"အပေါ်ဘက် မျက်နှာပြင် ၅၀%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"ပြန်ပြောင်းရန်"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"ဘယ်တွင် ချဲ့ရန်"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"ညာတွင် ချဲ့ရန်"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"အက်ပ်ဝင်းဒိုး ဘယ်ဘက်ကို အရွယ်ပြင်ရန်"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"အက်ပ်ဝင်းဒိုး ညာဘက်ကို အရွယ်ပြင်ရန်"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"ဝင်းဒိုးအရွယ်အစားကို ချဲ့ရန် (သို့) ပြန်ပြောင်းရန်"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"မျက်နှာပြင်ခွဲပြခြင်းမုဒ်သို့ ဝင်ရန်"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"ဒက်စ်တော့ ဝင်းဒိုးမုဒ်သို့ ဝင်ရန်"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ဝင်းဒိုးကို ဘယ်ဘက်သို့ အရွယ်ပြင်ရန်"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ဝင်းဒိုးကို ညာဘက်သို့ အရွယ်ပြင်ရန်"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ဝင်းဒိုးအရွယ်အစားကို ချဲ့ရန် (သို့) ပြန်ပြောင်းရန်"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ဝင်းဒိုးအရွယ်အစားကို ချဲ့ရန် (သို့) ပြန်ပြောင်းရန်"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"အက်ပ်ဝင်းဒိုးကို ချုံ့ရန်"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"မူရင်းဆက်တင်ဖြင့် ဖွင့်ရန်"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ဤအက်ပ်အတွက် ဝဘ်လင့်ခ်များ မည်သို့ဖွင့်မည်ကို ရွေးပါ"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"အက်ပ်တွင်"</string>
diff --git a/libs/WindowManager/Shell/res/values-nb/strings.xml b/libs/WindowManager/Shell/res/values-nb/strings.xml
index 86aa19650003..586a50f74f0d 100644
--- a/libs/WindowManager/Shell/res/values-nb/strings.xml
+++ b/libs/WindowManager/Shell/res/values-nb/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Sett størrelsen på den venstre delen av skjermen til 50 %"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Sett størrelsen på den venstre delen av skjermen til 30 %"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Utvid den høyre delen av skjermen til hele skjermen"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Bytt apper"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Utvid den øverste delen av skjermen til hele skjermen"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Sett størrelsen på den øverste delen av skjermen til 70 %"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Sett størrelsen på den øverste delen av skjermen til 50 %"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Gjenopprett"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Fest til venstre"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Fest til høyre"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Endre størrelsen på appvinduet til venstre"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Endre størrelsen på appvinduet til høyre"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maksimer eller gjenopprett størrelsen på vinduet"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Start modusen for delt skjerm"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Start vindusmodus for skrivebordet"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Endre størrelsen på vinduet til venstre"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Endre størrelsen på vinduet til høyre"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimer eller gjenopprett størrelsen på vinduet"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimer eller gjenopprett størrelsen på vinduet"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimer appvinduet"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Innstillinger for åpning som standard"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Velg hvordan nettlinker skal åpnes for denne appen"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"I appen"</string>
diff --git a/libs/WindowManager/Shell/res/values-ne/strings.xml b/libs/WindowManager/Shell/res/values-ne/strings.xml
index bc45b0f45750..f66fb1d30359 100644
--- a/libs/WindowManager/Shell/res/values-ne/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ne/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"बायाँ भाग ५०%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"बायाँ भाग ३०%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"दायाँ भाग फुल स्क्रिन"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"एपहरू अदलबदल गर्नुहोस्"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"माथिल्लो भाग फुल स्क्रिन"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"माथिल्लो भाग ७०%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"माथिल्लो भाग ५०%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"रिस्टोर गर्नुहोस्"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"बायाँतिर स्न्याप गर्नुहोस्"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"दायाँतिर स्न्याप गर्नुहोस्"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"एपको विन्डोको आकार बदलेर बायाँतिर लैजानुहोस्"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"एपको विन्डोको आकार बदलेर दायाँतिर लैजानुहोस्"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"विन्डोको आकार म्याक्सिमाइज गर्नुहोस् वा रिस्टोर गर्नुहोस्"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"स्प्लिट स्क्रिन मोड प्रयोग गर्नुहोस्"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"डेस्कटप विन्डोइङ मोड प्रयोग गर्नुहोस्"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"विन्डोको आकार बदलेर बायाँतिर लैजानुहोस्"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"विन्डोको आकार बदलेर दायाँतिर लैजानुहोस्"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"विन्डोको आकार म्याक्सिमाइज गर्नुहोस् वा रिस्टोर गर्नुहोस्"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"विन्डोको आकार म्याक्सिमाइज गर्नुहोस् वा रिस्टोर गर्नुहोस्"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"एपको विन्डो मिनिमाइज गर्नुहोस्"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"डिफल्ट सेटिङअनुसार खोल्नुहोस्"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"यो एपका वेब लिंकहरू खोल्ने तरिका छनौट गर्नुहोस्"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"एपमा"</string>
diff --git a/libs/WindowManager/Shell/res/values-or/strings.xml b/libs/WindowManager/Shell/res/values-or/strings.xml
index b16092ec46f9..edb520872d1f 100644
--- a/libs/WindowManager/Shell/res/values-or/strings.xml
+++ b/libs/WindowManager/Shell/res/values-or/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"ବାମ ପଟକୁ 50% କରନ୍ତୁ"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"ବାମ ପଟେ 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"ଡାହାଣ ପଟକୁ ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନ୍‍ କରନ୍ତୁ"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ଆପ୍ସ ସ୍ୱାପ କରନ୍ତୁ"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"ଉପର ଆଡ଼କୁ ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନ୍‍ କରନ୍ତୁ"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"ଉପର ଆଡ଼କୁ 70% କରନ୍ତୁ"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"ଉପର ଆଡ଼କୁ 50% କରନ୍ତୁ"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"ରିଷ୍ଟୋର କରନ୍ତୁ"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"ବାମରେ ସ୍ନାପ କରନ୍ତୁ"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"ଡାହାଣରେ ସ୍ନାପ କରନ୍ତୁ"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"ଆପ ୱିଣ୍ଡୋ ରିସାଇଜ କରିବା ପାଇଁ ବାମ ବଟନ"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"ଆପ ୱିଣ୍ଡୋ ରିସାଇଜ କରିବା ପାଇଁ ଡାହାଣ ବଟନ"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"ୱିଣ୍ଡୋ ସାଇଜକୁ ମେକ୍ସିମାଇଜ କିମ୍ବା ରିଷ୍ଟୋର କରନ୍ତୁ"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନ ମୋଡରେ ପ୍ରବେଶ କରନ୍ତୁ"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"ଡେସ୍କଟପ ୱିଣ୍ଡୋଇଂ ମୋଡରେ ପ୍ରବେଶ କରନ୍ତୁ"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"ବାମପଟକୁ ୱିଣ୍ଡୋ ରିସାଇଜ କରନ୍ତୁ"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ଡାହାଣପଟକୁ ୱିଣ୍ଡୋ ରିସାଇଜ କରନ୍ତୁ"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ୱିଣ୍ଡୋ ସାଇଜକୁ ମେକ୍ସିମାଇଜ କିମ୍ବା ରିଷ୍ଟୋର କରନ୍ତୁ"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ୱିଣ୍ଡୋ ସାଇଜକୁ ମେକ୍ସିମାଇଜ କିମ୍ବା ରିଷ୍ଟୋର କରନ୍ତୁ"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ଆପ ୱିଣ୍ଡୋକୁ ମିନିମାଇଜ କରନ୍ତୁ"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"ଡିଫଲ୍ଟ ସେଟିଂସକୁ ଖୋଲନ୍ତୁ"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"ଏହି ଆପ ପାଇଁ ୱେବ ଲିଙ୍କଗୁଡ଼ିକୁ କିପରି ଖୋଲିବେ, ତାହା ବାଛନ୍ତୁ"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ଆପରେ"</string>
diff --git a/libs/WindowManager/Shell/res/values-pl/strings.xml b/libs/WindowManager/Shell/res/values-pl/strings.xml
index d06603fbe206..47ee80e6a4e8 100644
--- a/libs/WindowManager/Shell/res/values-pl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pl/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"50% lewej części ekranu"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"30% lewej części ekranu"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Prawa część ekranu na pełnym ekranie"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Zamień aplikacje"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Górna część ekranu na pełnym ekranie"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"70% górnej części ekranu"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"50% górnej części ekranu"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Przywróć"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Przyciągnij do lewej"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Przyciągnij do prawej"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Zmień rozmiar okna aplikacji po lewej"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Zmień rozmiar okna aplikacji po prawej"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Zmaksymalizuj lub przywróć rozmiar okna"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Włącz tryb podzielonego ekranu"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Włącz tryb okien na pulpicie"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Zmień rozmiar okna do lewej"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Zmień rozmiar okna do prawej"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Zmaksymalizuj lub przywróć rozmiar okna"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Zmaksymalizuj lub przywróć rozmiar okna"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Zminimalizuj okno aplikacji"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Ustawienia domyślnego otwierania"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Wybierz, gdzie chcesz otwierać linki z tej aplikacji"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"W aplikacji"</string>
diff --git a/libs/WindowManager/Shell/res/values-ro/strings.xml b/libs/WindowManager/Shell/res/values-ro/strings.xml
index 3039950e47ee..a3313b6496e0 100644
--- a/libs/WindowManager/Shell/res/values-ro/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ro/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Partea stângă: 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Partea stângă: 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Partea dreaptă pe ecran complet"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Comută între aplicații"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Partea de sus pe ecran complet"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Partea de sus: 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Partea de sus: 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Restabilește"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Trage la stânga"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Trage la dreapta"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Redimensionează fereastra aplicației la stânga"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Redimensionează fereastra aplicației la dreapta"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maximizează sau restabilește dimensiunea ferestrei"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Accesează modul ecran împărțit"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Accesează modul de windowing pe desktop"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Redimensionează fereastra la stânga"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Redimensionează fereastra la dreapta"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximizează sau restabilește dimensiunea ferestrei"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximizează sau restabilește dimensiunea ferestrei"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizează fereastra aplicației"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Setări de deschidere în mod prestabilit"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Alege modul de deschidere a linkurilor web pentru aplicație"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"În aplicație"</string>
diff --git a/libs/WindowManager/Shell/res/values-sq/strings.xml b/libs/WindowManager/Shell/res/values-sq/strings.xml
index fe03feb901ed..fcb0aa6559fa 100644
--- a/libs/WindowManager/Shell/res/values-sq/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sq/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Majtas 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Majtas 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Ekrani i plotë djathtas"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Ndërro aplikacionet"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Ekrani i plotë lart"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Lart 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Lart 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Restauro"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Zhvendos majtas"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Zhvendos djathtas"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Ndrysho përmasat e dritares së aplikacionit majtas"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Ndrysho përmasat e dritares së aplikacionit djathtas"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maksimizo ose restauro madhësinë e dritares"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Hyr në modalitetin e ekranit të ndarë"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Hyr në modalitetin e dritareve në desktop"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ndrysho përmasat e dritares në të majtë"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ndrysho përmasat e dritares në të djathtë"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimizo ose restauro madhësinë e dritares"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maksimizo ose restauro madhësinë e dritares"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimizo dritaren e aplikacionit"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Hap sipas cilësimeve të parazgjedhura"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Zgjidh si do t\'i hapësh lidhjet e uebit për këtë aplikacion"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Në aplikacion"</string>
diff --git a/libs/WindowManager/Shell/res/values-sr/strings.xml b/libs/WindowManager/Shell/res/values-sr/strings.xml
index 5163fc69dfb5..6a2ffcdf8e89 100644
--- a/libs/WindowManager/Shell/res/values-sr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sr/strings.xml
@@ -125,11 +125,11 @@
<string name="float_button_text" msgid="9221657008391364581">"Плутајуће"</string>
<string name="select_text" msgid="5139083974039906583">"Изаберите"</string>
<string name="screenshot_text" msgid="1477704010087786671">"Снимак екрана"</string>
- <string name="open_in_browser_text" msgid="9181692926376072904">"Отворите у прегледачу"</string>
+ <string name="open_in_browser_text" msgid="9181692926376072904">"Отвори у прегледачу"</string>
<string name="open_in_app_text" msgid="2874590745116268525">"Отворите у апликацији"</string>
<string name="new_window_text" msgid="6318648868380652280">"Нови прозор"</string>
<string name="manage_windows_text" msgid="5567366688493093920">"Управљајте прозорима"</string>
- <string name="change_aspect_ratio_text" msgid="9104456064548212806">"Промените размеру"</string>
+ <string name="change_aspect_ratio_text" msgid="9104456064548212806">"Промени размеру"</string>
<string name="close_text" msgid="4986518933445178928">"Затворите"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Затворите мени"</string>
<string name="desktop_mode_app_header_chip_text" msgid="6366422614991687237">"Отворите мени"</string>
@@ -138,7 +138,7 @@
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Апликација не може да се премести овде"</string>
<string name="desktop_mode_maximize_menu_immersive_button_text" msgid="559492223133829481">"Имерзивне"</string>
<string name="desktop_mode_maximize_menu_immersive_restore_button_text" msgid="4900114367354709257">"Врати"</string>
- <string name="desktop_mode_maximize_menu_maximize_button_text" msgid="3090199175564175845">"Увећајте"</string>
+ <string name="desktop_mode_maximize_menu_maximize_button_text" msgid="3090199175564175845">"Увећај"</string>
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Вратите"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Прикачите лево"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Прикачите десно"</string>
diff --git a/libs/WindowManager/Shell/res/values-sv/strings.xml b/libs/WindowManager/Shell/res/values-sv/strings.xml
index 29f4aab0502a..a9df47650dad 100644
--- a/libs/WindowManager/Shell/res/values-sv/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sv/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Vänster 50 %"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Vänster 30 %"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Helskärm på höger skärm"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Byt appar"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Helskärm på övre skärm"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Övre 70 %"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Övre 50 %"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Återställ"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Fäst till vänster"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Fäst till höger"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Ändra storlek på appfönstret åt vänster"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Ändra storlek på appfönstret åt höger"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maximera eller återställ fönsterstorleken"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Starta läget för delad skärm"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Starta datorläget"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ändra storlek på fönstret åt vänster"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ändra storlek på fönstret åt höger"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximera eller återställ fönsterstorleken"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Maximera eller återställ fönsterstorleken"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Minimera appfönstret"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Inställningar för Öppna som standard"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Välj hur webblänkar ska öppnas för den här appen"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"I appen"</string>
diff --git a/libs/WindowManager/Shell/res/values-sw/strings.xml b/libs/WindowManager/Shell/res/values-sw/strings.xml
index 6471e3b723e0..a3c9a0d3989c 100644
--- a/libs/WindowManager/Shell/res/values-sw/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sw/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Kushoto 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Kushoto 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Skrini nzima ya kulia"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Badilisha Programu"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Skrini nzima ya juu"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Juu 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Juu 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Rejesha"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Telezesha kushoto"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Telezesha kulia"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Badilisha ukubwa wa dirisha la programu kushoto"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Badilisha ukubwa wa dirisha la programu kulia"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Panua au urejeshe ukubwa wa dirisha"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Ingia katika hali ya skrini iliyogawanywa"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Ingia katika hali ya madirisha ya kompyuta ya mezani"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Badilisha ukubwa wa dirisha kushoto"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Badilisha ukubwa wa dirisha kulia"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Panua au urejeshe ukubwa wa dirisha"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Panua au urejeshe ukubwa wa dirisha"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Punguza dirisha la programu"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Fungua kwa mipangilio chaguomsingi"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Chagua jinsi ya kufungua viungo vya wavuti vya programu hii"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Kwenye programu"</string>
diff --git a/libs/WindowManager/Shell/res/values-ta/strings.xml b/libs/WindowManager/Shell/res/values-ta/strings.xml
index 03e55c8dcf79..b1b8c7ff2075 100644
--- a/libs/WindowManager/Shell/res/values-ta/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ta/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"இடது புறம் 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"இடது புறம் 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"வலது புறம் முழுத் திரை"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ஆப்ஸை மாற்றும்"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"மேற்புறம் முழுத் திரை"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"மேலே 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"மேலே 50%"</string>
@@ -126,7 +125,7 @@
<string name="float_button_text" msgid="9221657008391364581">"மிதக்கும் சாளரம்"</string>
<string name="select_text" msgid="5139083974039906583">"தேர்ந்தெடுக்கும்"</string>
<string name="screenshot_text" msgid="1477704010087786671">"ஸ்கிரீன்ஷாட்"</string>
- <string name="open_in_browser_text" msgid="9181692926376072904">"உலாவியில் திறக்கும்"</string>
+ <string name="open_in_browser_text" msgid="9181692926376072904">"பிரவுசரில் திற"</string>
<string name="open_in_app_text" msgid="2874590745116268525">"ஆப்ஸில் திறக்கும்"</string>
<string name="new_window_text" msgid="6318648868380652280">"புதிய சாளரம்"</string>
<string name="manage_windows_text" msgid="5567366688493093920">"சாளரங்களை நிர்வகிக்கலாம்"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"மீட்டெடுக்கும்"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"இடதுபுறம் நகர்த்தும்"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"வலதுபுறம் நகர்த்தும்"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"ஆப்ஸ் சாளரத்தின் இடதுபுறத்தில் அளவை மாற்றும்"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"ஆப்ஸ் சாளரத்தின் வலதுபுறத்தில் அளவை மாற்றும்"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"சாளரத்தின் அளவைப் பெரிதாக்கும்/மீட்டெடுக்கும்"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"திரைப் பிரிப்புப் பயன்முறையில் உள்நுழையும்"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"டெஸ்க்டாப் சாளரப் பயன்முறையில் உள்நுழையும்"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"சாளரத்தை இடதுபுறமாக அளவு மாற்றும்"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"சாளரத்தை வலதுபுறமாக அளவு மாற்றும்"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"சாளரத்தின் அளவைப் பெரிதாக்கும்/மீட்டெடுக்கும்"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"சாளரத்தின் அளவைப் பெரிதாக்கும்/மீட்டெடுக்கும்"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ஆப்ஸ் சாளரத்தைச் சிறிதாக்கும்"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"இயல்பாக அமைப்புகளைத் திறக்கும்"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"இந்த ஆப்ஸில் வலை இணைப்புகளைத் திறக்கும் வழிமுறையைத் தேர்வுசெய்யுங்கள்"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ஆப்ஸில்"</string>
diff --git a/libs/WindowManager/Shell/res/values-tr/strings.xml b/libs/WindowManager/Shell/res/values-tr/strings.xml
index 8d12e5437c62..6a5d1abebd25 100644
--- a/libs/WindowManager/Shell/res/values-tr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-tr/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Solda %50"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Solda %30"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Sağda tam ekran"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Uygulamaların Yerini Değiştir"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Üstte tam ekran"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Üstte %70"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Üstte %50"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Geri yükle"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Sola tuttur"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Sağa tuttur"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Uygulama penceresini sola yeniden boyutlandır"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Uygulama penceresini sağa yeniden boyutlandır"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Pencereyi ekranı kaplayacak şekilde büyüt veya önceki boyutuna döndür"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Bölünmüş ekran moduna gir"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Masaüstü pencereleme moduna gir"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Pencereyi sola yeniden boyutlandır"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Pencereyi sağa yeniden boyutlandır"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Pencereyi ekranı kaplayacak şekilde büyüt veya önceki boyutuna döndür"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Pencereyi ekranı kaplayacak şekilde büyüt veya önceki boyutuna döndür"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Uygulama penceresini küçült"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Varsayılan olarak açma ayarları"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Bu uygulama için web bağlantılarının nasıl açılacağını seçin"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Uygulamada"</string>
diff --git a/libs/WindowManager/Shell/res/values-uk/strings.xml b/libs/WindowManager/Shell/res/values-uk/strings.xml
index 66d8a62f6633..7f4e91d5dfc5 100644
--- a/libs/WindowManager/Shell/res/values-uk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-uk/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Ліве вікно на 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Ліве вікно на 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Праве вікно на весь екран"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Поміняти додатки місцями"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Верхнє вікно на весь екран"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Верхнє вікно на 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Верхнє вікно на 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Відновити"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Закріпити ліворуч"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Закріпити праворуч"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Змінити розмір вікна додатка ліворуч"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Змінити розмір вікна додатка праворуч"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Розгорнути вікно або відновити його розмір"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Увімкнути режим розділення екрана"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Увімкнути режим вікон для комп’ютера"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Змінити розмір вікна ліворуч"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Змінити розмір вікна праворуч"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Розгорнути вікно або відновити його розмір"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Розгорнути вікно або відновити його розмір"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Згорнути вікно додатка"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Налаштування \"Відкривати за умовчанням\""</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Виберіть, як відкривати вебпосилання в цьому додатку"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"У додатку"</string>
diff --git a/libs/WindowManager/Shell/res/values-ur/strings.xml b/libs/WindowManager/Shell/res/values-ur/strings.xml
index 653ba0e66984..f461d4077087 100644
--- a/libs/WindowManager/Shell/res/values-ur/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ur/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"بائیں %50"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"بائیں %30"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"دائیں فل اسکرین"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"ایپس سویپ کریں"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"بالائی فل اسکرین"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"اوپر %70"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"اوپر %50"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"بحال کریں"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"دائیں منتقل کریں"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"بائیں منتقل کریں"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"دائیں طرف ایپ ونڈو کا سائز تبدیل کریں"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"ایپ ونڈو کا سائز بائیں طرف تبدیل کریں"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"ونڈو کا سائز زیادہ سے زیادہ یا بحال کریں"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"سپلٹ اسکرین موڈ میں داخل ہوں"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"ڈیسک ٹاپ ونڈو وضع میں داخل ہوں"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"دائیں طرف ونڈو کا سائز تبدیل کریں"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"ونڈو کا سائز بائیں طرف تبدیل کریں"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"ونڈو کا سائز زیادہ سے زیادہ یا بحال کریں"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"ونڈو کا سائز زیادہ سے زیادہ یا بحال کریں"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"ایپ ونڈو کو چھوٹا کریں"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"بطور ڈیفالٹ ترتیبات کھولیں"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"اس ایپ کے لیے ویب لنکس کھولنے کا طریقہ منتخب کریں"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"ایپ میں"</string>
diff --git a/libs/WindowManager/Shell/res/values-vi/strings.xml b/libs/WindowManager/Shell/res/values-vi/strings.xml
index f1b728b1b64c..e7cacc345c2b 100644
--- a/libs/WindowManager/Shell/res/values-vi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-vi/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Trái 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Trái 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Toàn màn hình bên phải"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Hoán đổi ứng dụng"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Toàn màn hình phía trên"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Trên 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Trên 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Khôi phục"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Di chuyển nhanh sang trái"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Di chuyển nhanh sang phải"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Đổi kích thước và chuyển cửa sổ ứng dụng sang trái"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Đổi kích thước và chuyển cửa sổ ứng dụng sang phải"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Phóng to hoặc khôi phục kích thước cửa sổ"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Mở chế độ chia đôi màn hình"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Mở chế độ cửa sổ trên máy tính"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Đổi kích thước và chuyển cửa sổ sang trái"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Đổi kích thước và chuyển cửa sổ sang phải"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Phóng to hoặc khôi phục kích thước cửa sổ"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Phóng to hoặc khôi phục kích thước cửa sổ"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Thu nhỏ cửa sổ ứng dụng"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Mở các chế độ cài đặt theo mặc định"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Chọn cách mở đường liên kết trang web cho ứng dụng này"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Trong ứng dụng"</string>
diff --git a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
index 543780844060..562a0ee09bd6 100644
--- a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"左侧 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"左侧 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"右侧全屏"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"交换应用位置"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"顶部全屏"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"顶部 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"顶部 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"恢复"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"贴靠左侧"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"贴靠右侧"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"调整应用窗口大小并贴靠左侧"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"调整应用窗口大小并贴靠右侧"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"将窗口最大化或恢复大小"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"进入分屏模式"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"进入桌面设备窗口化模式"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"调整窗口大小并贴靠左侧"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"调整窗口大小并贴靠右侧"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"将窗口最大化或恢复大小"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"将窗口最大化或恢复大小"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"将应用窗口最小化"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"默认打开设置"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"选择如何打开此应用中的网页链接"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"在此应用内"</string>
diff --git a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
index 938024d2cd1a..eecd9f21be57 100644
--- a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"左邊 50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"左邊 30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"右邊全螢幕"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"切換應用程式"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"頂部全螢幕"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"頂部 70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"頂部 50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"還原"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"貼齊左邊"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"貼齊右邊"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"調整左邊應用程式視窗大小"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"調整右邊應用程式視窗大小"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"將視窗放到最大或者還原視窗大小"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"進入分割螢幕模式"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"進入桌面視窗模式"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"將視窗移去左邊調整大小"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"將視窗移去右邊調整大小"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"將視窗放到最大或者還原視窗大小"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"將視窗放到最大或者還原視窗大小"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"將應用程式視窗縮到最細"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"採用預設設定打開"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"選擇此應用程式開啟網絡連結的方式"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"在應用程式內"</string>
diff --git a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
index 3a5a87d9868e..c157c193fa14 100644
--- a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"以 50% 的螢幕空間顯示左側畫面"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"以 30% 的螢幕空間顯示左側畫面"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"以全螢幕顯示右側畫面"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"切換應用程式"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"以全螢幕顯示頂端畫面"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"以 70% 的螢幕空間顯示頂端畫面"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"以 50% 的螢幕空間顯示頂端畫面"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"還原"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"靠左對齊"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"靠右對齊"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"調整應用程式視窗大小並向左貼齊"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"調整應用程式視窗大小並向右貼齊"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"將視窗最大化或還原大小"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"進入分割畫面模式"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"進入電腦視窗化模式"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"調整應用程式視窗大小並向左貼齊"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"調整應用程式視窗大小並向右貼齊"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"將視窗最大化或還原大小"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"將視窗最大化或還原大小"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"將應用程式視窗最小化"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"開啟連結的預設設定"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"選擇如何開啟這個應用程式的網頁連結"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"使用應用程式"</string>
diff --git a/libs/WindowManager/Shell/res/values-zu/strings.xml b/libs/WindowManager/Shell/res/values-zu/strings.xml
index cba8e048ea3d..a7ba6d21234d 100644
--- a/libs/WindowManager/Shell/res/values-zu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zu/strings.xml
@@ -43,8 +43,7 @@
<string name="accessibility_action_divider_left_50" msgid="3488317024557521561">"Kwesokunxele ngo-50%"</string>
<string name="accessibility_action_divider_left_30" msgid="6023611335723838727">"Kwesokunxele ngo-30%"</string>
<string name="accessibility_action_divider_right_full" msgid="3408505054325944903">"Isikrini esigcwele esingakwesokudla"</string>
- <!-- no translation found for accessibility_action_divider_swap (7026003137401725787) -->
- <skip />
+ <string name="accessibility_action_divider_swap" msgid="7026003137401725787">"Shintsha ama-app"</string>
<string name="accessibility_action_divider_top_full" msgid="3495871951082107594">"Isikrini esigcwele esiphezulu"</string>
<string name="accessibility_action_divider_top_70" msgid="1779164068887875474">"Okuphezulu okungu-70%"</string>
<string name="accessibility_action_divider_top_50" msgid="8649582798829048946">"Okuphezulu okungu-50%"</string>
@@ -143,26 +142,16 @@
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Buyisela"</string>
<string name="desktop_mode_maximize_menu_snap_left_button_text" msgid="8077452201179893424">"Chofoza kwesobunxele"</string>
<string name="desktop_mode_maximize_menu_snap_right_button_text" msgid="7117751068945657304">"Chofoza kwesokudla"</string>
- <!-- no translation found for desktop_mode_a11y_action_snap_left (2932955411661734668) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_snap_right (4577032451624261787) -->
- <skip />
- <!-- no translation found for desktop_mode_a11y_action_maximize_restore (8026037983417986686) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_split_screen_mode_button_text (7182959681057464802) -->
- <skip />
- <!-- no translation found for app_handle_menu_talkback_desktop_mode_button_text (1230110046930843630) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_left_text (500309467459084564) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_snap_right_text (7010831426654467163) -->
- <skip />
- <!-- no translation found for maximize_menu_talkback_action_maximize_restore_text (4942610897847934859) -->
- <skip />
- <!-- no translation found for maximize_button_talkback_action_maximize_restore_text (4122441323153198455) -->
- <skip />
- <!-- no translation found for minimize_button_talkback_action_maximize_restore_text (8890767445425625935) -->
- <skip />
+ <string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Shintsha usayizi we-app yewindi ngakwesokunxele"</string>
+ <string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Shintsha usayizi we-app yewindi ngakwesokudla"</string>
+ <string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Khulisa noma buyisela usayizi wewindi"</string>
+ <string name="app_handle_menu_talkback_split_screen_mode_button_text" msgid="7182959681057464802">"Faka imodi yokuhlukanisa isikrini"</string>
+ <string name="app_handle_menu_talkback_desktop_mode_button_text" msgid="1230110046930843630">"Faka imodi yokwenza iwindi yedeskithophu"</string>
+ <string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Shintsha usayizi wewindi ngakwesokunxele"</string>
+ <string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Shintsha usayizi wewindi ngakwesokudla"</string>
+ <string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Khulisa noma buyisela usayizi wewindi"</string>
+ <string name="maximize_button_talkback_action_maximize_restore_text" msgid="4122441323153198455">"Khulisa noma buyisela usayizi wewindi"</string>
+ <string name="minimize_button_talkback_action_maximize_restore_text" msgid="8890767445425625935">"Nciphisa iwindi le-app"</string>
<string name="open_by_default_settings_text" msgid="2526548548598185500">"Vula amasethingi ngokuzenzakalela"</string>
<string name="open_by_default_dialog_subheader_text" msgid="1729599730664063881">"Khetha indlela yokuvula amalinki ewebhu ale app"</string>
<string name="open_by_default_dialog_in_app_text" msgid="6978022419634199806">"Ku-app"</string>
diff --git a/libs/WindowManager/Shell/res/values/dimen.xml b/libs/WindowManager/Shell/res/values/dimen.xml
index 96e008e42f1c..e395341a5792 100644
--- a/libs/WindowManager/Shell/res/values/dimen.xml
+++ b/libs/WindowManager/Shell/res/values/dimen.xml
@@ -447,6 +447,17 @@
80 dp for handle + 20 dp for room to grow on the sides when hovered. -->
<dimen name="desktop_mode_fullscreen_decor_caption_width">100dp</dimen>
+ <!-- Horizontal padding for desktop mode caption in default unhovered untouched state. -->
+ <dimen name="desktop_mode_fullscreen_decor_caption_horizontal_padding_default">10dp</dimen>
+
+ <!-- Horizontal padding for desktop mode caption when hovered.
+ 1/2 * (100 dp of total width - 80 dp for handle * 1.2 scaling factor). -->
+ <dimen name="desktop_mode_fullscreen_decor_caption_horizontal_padding_hovered">2dp</dimen>
+
+ <!-- Horizontal padding for desktop mode caption when touched.
+ 1/2 * (100 dp of total width - 80 dp for handle * 0.85 scaling factor). -->
+ <dimen name="desktop_mode_fullscreen_decor_caption_horizontal_padding_touched">16dp</dimen>
+
<!-- Required empty space to be visible for partially offscreen tasks. -->
<dimen name="freeform_required_visible_empty_space_in_header">48dp</dimen>
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
index c7a0401c2b88..f51023fcaaf5 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
@@ -22,6 +22,7 @@ import static android.service.notification.NotificationListenerService.REASON_CA
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+import static android.view.WindowManager.TRANSIT_CHANGE;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
@@ -1590,20 +1591,26 @@ public class BubbleController implements ConfigurationChangeListener,
* Expands and selects a bubble created from a running task in a different mode.
*
* @param taskInfo the task.
+ * @param dragData optional information about the task when it is being dragged into a bubble
*/
- public void expandStackAndSelectBubble(ActivityManager.RunningTaskInfo taskInfo) {
+ public void expandStackAndSelectBubble(ActivityManager.RunningTaskInfo taskInfo,
+ @Nullable BubbleTransitions.DragData dragData) {
if (!BubbleAnythingFlagHelper.enableBubbleToFullscreen()) return;
Bubble b = mBubbleData.getOrCreateBubble(taskInfo); // Removes from overflow
ProtoLog.v(WM_SHELL_BUBBLES, "expandStackAndSelectBubble - intent=%s", taskInfo.taskId);
if (b.isInflated()) {
mBubbleData.setSelectedBubbleAndExpandStack(b);
+ if (dragData != null && dragData.getPendingWct() != null) {
+ mTransitions.startTransition(TRANSIT_CHANGE,
+ dragData.getPendingWct(), /* handler= */ null);
+ }
} else {
b.enable(Notification.BubbleMetadata.FLAG_AUTO_EXPAND_BUBBLE);
// Lazy init stack view when a bubble is created
ensureBubbleViewsAndWindowCreated();
mBubbleTransitions.startConvertToBubble(b, taskInfo, mExpandedViewManager,
mBubbleTaskViewFactory, mBubblePositioner, mStackView, mLayerView,
- mBubbleIconFactory, mInflateSynchronously);
+ mBubbleIconFactory, dragData, mInflateSynchronously);
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTaskViewHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTaskViewHelper.java
deleted file mode 100644
index e47ac61a53dd..000000000000
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTaskViewHelper.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES 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.wm.shell.bubbles;
-
-import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS;
-import static android.app.ActivityTaskManager.INVALID_TASK_ID;
-import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
-import static android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
-
-import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_BUBBLES;
-
-import android.app.ActivityOptions;
-import android.app.ActivityTaskManager;
-import android.app.PendingIntent;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Rect;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.Nullable;
-
-import com.android.internal.protolog.ProtoLog;
-import com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper;
-import com.android.wm.shell.taskview.TaskView;
-
-/**
- * Handles creating and updating the {@link TaskView} associated with a {@link Bubble}.
- */
-public class BubbleTaskViewHelper {
-
- private static final String TAG = BubbleTaskViewHelper.class.getSimpleName();
-
- /**
- * Listener for users of {@link BubbleTaskViewHelper} to use to be notified of events
- * on the task.
- */
- public interface Listener {
-
- /** Called when the task is first created. */
- void onTaskCreated();
-
- /** Called when the visibility of the task changes. */
- void onContentVisibilityChanged(boolean visible);
-
- /** Called when back is pressed on the task root. */
- void onBackPressed();
-
- /** Called when task removal has started. */
- void onTaskRemovalStarted();
- }
-
- private final Context mContext;
- private final BubbleExpandedViewManager mExpandedViewManager;
- private final BubbleTaskViewHelper.Listener mListener;
- private final View mParentView;
-
- @Nullable
- private Bubble mBubble;
- @Nullable
- private PendingIntent mPendingIntent;
- @Nullable
- private TaskView mTaskView;
- private int mTaskId = INVALID_TASK_ID;
-
- private final TaskView.Listener mTaskViewListener = new TaskView.Listener() {
- private boolean mInitialized = false;
- private boolean mDestroyed = false;
-
- @Override
- public void onInitialized() {
- ProtoLog.d(WM_SHELL_BUBBLES, "onInitialized: destroyed=%b initialized=%b bubble=%s",
- mDestroyed, mInitialized, getBubbleKey());
-
- if (mDestroyed || mInitialized) {
- return;
- }
-
- // Custom options so there is no activity transition animation
- ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext,
- 0 /* enterResId */, 0 /* exitResId */);
-
- Rect launchBounds = new Rect();
- mTaskView.getBoundsOnScreen(launchBounds);
-
- // TODO: I notice inconsistencies in lifecycle
- // Post to keep the lifecycle normal
- // TODO - currently based on type, really it's what the "launch item" is.
- mParentView.post(() -> {
- ProtoLog.d(WM_SHELL_BUBBLES, "onInitialized: calling startActivity, bubble=%s",
- getBubbleKey());
- try {
- options.setTaskAlwaysOnTop(true);
- options.setPendingIntentBackgroundActivityStartMode(
- MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS);
- final boolean isShortcutBubble = (mBubble.hasMetadataShortcutId()
- || (mBubble.isShortcut()
- && BubbleAnythingFlagHelper.enableCreateAnyBubble()));
- if (mBubble.getPreparingTransition() != null) {
- mBubble.getPreparingTransition().surfaceCreated();
- } else if (mBubble.isApp() || mBubble.isNote()) {
- Context context =
- mContext.createContextAsUser(
- mBubble.getUser(), Context.CONTEXT_RESTRICTED);
- Intent fillInIntent = null;
- //first try get pending intent from the bubble
- PendingIntent pi = mBubble.getPendingIntent();
- if (pi == null) {
- // if null - create new one
- pi = PendingIntent.getActivity(
- context,
- /* requestCode= */ 0,
- mBubble.getIntent()
- .addFlags(FLAG_ACTIVITY_MULTIPLE_TASK),
- PendingIntent.FLAG_IMMUTABLE
- | PendingIntent.FLAG_UPDATE_CURRENT,
- /* options= */ null);
- } else {
- fillInIntent = new Intent(pi.getIntent());
- fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
- }
- mTaskView.startActivity(pi, fillInIntent, options, launchBounds);
- } else if (isShortcutBubble) {
- options.setLaunchedFromBubble(true);
- options.setApplyActivityFlagsForBubbles(true);
- mTaskView.startShortcutActivity(mBubble.getShortcutInfo(),
- options, launchBounds);
- } else {
- options.setLaunchedFromBubble(true);
- if (mBubble != null) {
- mBubble.setPendingIntentActive();
- }
- final Intent fillInIntent = new Intent();
- // Apply flags to make behaviour match documentLaunchMode=always.
- fillInIntent.addFlags(FLAG_ACTIVITY_NEW_DOCUMENT);
- fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
- mTaskView.startActivity(mPendingIntent, fillInIntent, options,
- launchBounds);
- }
- } catch (RuntimeException e) {
- // If there's a runtime exception here then there's something
- // wrong with the intent, we can't really recover / try to populate
- // the bubble again so we'll just remove it.
- Log.w(TAG, "Exception while displaying bubble: " + getBubbleKey()
- + ", " + e.getMessage() + "; removing bubble");
- mExpandedViewManager.removeBubble(
- getBubbleKey(), Bubbles.DISMISS_INVALID_INTENT);
- }
- mInitialized = true;
- });
- }
-
- @Override
- public void onReleased() {
- mDestroyed = true;
- }
-
- @Override
- public void onTaskCreated(int taskId, ComponentName name) {
- ProtoLog.d(WM_SHELL_BUBBLES, "onTaskCreated: taskId=%d bubble=%s",
- taskId, getBubbleKey());
- // The taskId is saved to use for removeTask, preventing appearance in recent tasks.
- mTaskId = taskId;
-
- if (mBubble != null && mBubble.isNote()) {
- // Let the controller know sooner what the taskId is.
- mExpandedViewManager.setNoteBubbleTaskId(mBubble.getKey(), mTaskId);
- }
-
- // With the task org, the taskAppeared callback will only happen once the task has
- // already drawn
- mListener.onTaskCreated();
- }
-
- @Override
- public void onTaskVisibilityChanged(int taskId, boolean visible) {
- mListener.onContentVisibilityChanged(visible);
- }
-
- @Override
- public void onTaskRemovalStarted(int taskId) {
- ProtoLog.d(WM_SHELL_BUBBLES, "onTaskRemovalStarted: taskId=%d bubble=%s",
- taskId, getBubbleKey());
- if (mBubble != null) {
- mExpandedViewManager.removeBubble(mBubble.getKey(), Bubbles.DISMISS_TASK_FINISHED);
- }
- if (mTaskView != null) {
- mTaskView.release();
- ((ViewGroup) mParentView).removeView(mTaskView);
- mTaskView = null;
- }
- mListener.onTaskRemovalStarted();
- }
-
- @Override
- public void onBackPressedOnTaskRoot(int taskId) {
- if (mTaskId == taskId && mExpandedViewManager.isStackExpanded()) {
- mListener.onBackPressed();
- }
- }
- };
-
- public BubbleTaskViewHelper(Context context,
- BubbleExpandedViewManager expandedViewManager,
- BubbleTaskViewHelper.Listener listener,
- BubbleTaskView bubbleTaskView,
- View parent) {
- mContext = context;
- mExpandedViewManager = expandedViewManager;
- mListener = listener;
- mParentView = parent;
- mTaskView = bubbleTaskView.getTaskView();
- bubbleTaskView.setDelegateListener(mTaskViewListener);
- if (bubbleTaskView.isCreated()) {
- mTaskId = bubbleTaskView.getTaskId();
- mListener.onTaskCreated();
- }
- }
-
- /**
- * Sets the bubble or updates the bubble used to populate the view.
- *
- * @return true if the bubble is new, false if it was an update to the same bubble.
- */
- public boolean update(Bubble bubble) {
- boolean isNew = mBubble == null || didBackingContentChange(bubble);
- mBubble = bubble;
- if (isNew) {
- mPendingIntent = mBubble.getPendingIntent();
- return true;
- }
- return false;
- }
-
- /** Returns the bubble key associated with this view. */
- @Nullable
- public String getBubbleKey() {
- return mBubble != null ? mBubble.getKey() : null;
- }
-
- /** Returns the TaskView associated with this view. */
- @Nullable
- public TaskView getTaskView() {
- return mTaskView;
- }
-
- /**
- * Returns the task id associated with the task in this view. If the task doesn't exist then
- * {@link ActivityTaskManager#INVALID_TASK_ID}.
- */
- public int getTaskId() {
- return mTaskId;
- }
-
- /** Returns whether the bubble set on the helper is valid to populate the task view. */
- public boolean isValidBubble() {
- return mBubble != null && (mPendingIntent != null || mBubble.hasMetadataShortcutId());
- }
-
- // TODO (b/274980695): Is this still relevant?
- /**
- * Bubbles are backed by a pending intent or a shortcut, once the activity is
- * started we never change it / restart it on notification updates -- unless the bubble's
- * backing data switches.
- *
- * This indicates if the new bubble is backed by a different data source than what was
- * previously shown here (e.g. previously a pending intent & now a shortcut).
- *
- * @param newBubble the bubble this view is being updated with.
- * @return true if the backing content has changed.
- */
- private boolean didBackingContentChange(Bubble newBubble) {
- boolean prevWasIntentBased = mBubble != null && mPendingIntent != null;
- boolean newIsIntentBased = newBubble.getPendingIntent() != null;
- return prevWasIntentBased != newIsIntentBased;
- }
-}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTaskViewListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTaskViewListener.java
new file mode 100644
index 000000000000..a38debb702dc
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTaskViewListener.java
@@ -0,0 +1,279 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.wm.shell.bubbles;
+
+import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS;
+import static android.app.ActivityTaskManager.INVALID_TASK_ID;
+import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
+import static android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
+
+import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_BUBBLES;
+
+import android.app.ActivityOptions;
+import android.app.ActivityTaskManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Rect;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.Nullable;
+
+import com.android.internal.protolog.ProtoLog;
+import com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper;
+import com.android.wm.shell.taskview.TaskView;
+
+/**
+ * A listener that works with task views for bubbles, manages launching the appropriate
+ * content into the task view from the bubble and sends updates of task view events back to
+ * the parent view via {@link BubbleTaskViewListener.Callback}.
+ */
+public class BubbleTaskViewListener implements TaskView.Listener {
+ private static final String TAG = BubbleTaskViewListener.class.getSimpleName();
+
+ /**
+ * Callback to let the view parent of TaskView to be notified of different events.
+ */
+ public interface Callback {
+
+ /** Called when the task is first created. */
+ void onTaskCreated();
+
+ /** Called when the visibility of the task changes. */
+ void onContentVisibilityChanged(boolean visible);
+
+ /** Called when back is pressed on the task root. */
+ void onBackPressed();
+
+ /** Called when task removal has started. */
+ void onTaskRemovalStarted();
+ }
+
+ private final Context mContext;
+ private final BubbleExpandedViewManager mExpandedViewManager;
+ private final BubbleTaskViewListener.Callback mCallback;
+ private final View mParentView;
+
+ private Bubble mBubble;
+ @Nullable
+ private PendingIntent mPendingIntent;
+ private int mTaskId = INVALID_TASK_ID;
+ private TaskView mTaskView;
+
+ private boolean mInitialized = false;
+ private boolean mDestroyed = false;
+
+ public BubbleTaskViewListener(Context context, BubbleTaskView bubbleTaskView, View parentView,
+ BubbleExpandedViewManager manager, BubbleTaskViewListener.Callback callback) {
+ mContext = context;
+ mTaskView = bubbleTaskView.getTaskView();
+ mParentView = parentView;
+ mExpandedViewManager = manager;
+ mCallback = callback;
+ bubbleTaskView.setDelegateListener(this);
+ if (bubbleTaskView.isCreated()) {
+ mTaskId = bubbleTaskView.getTaskId();
+ callback.onTaskCreated();
+ }
+ }
+
+ @Override
+ public void onInitialized() {
+ ProtoLog.d(WM_SHELL_BUBBLES, "onInitialized: destroyed=%b initialized=%b bubble=%s",
+ mDestroyed, mInitialized, getBubbleKey());
+
+ if (mDestroyed || mInitialized) {
+ return;
+ }
+
+ // Custom options so there is no activity transition animation
+ ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext,
+ 0 /* enterResId */, 0 /* exitResId */);
+
+ Rect launchBounds = new Rect();
+ mTaskView.getBoundsOnScreen(launchBounds);
+
+ // TODO: I notice inconsistencies in lifecycle
+ // Post to keep the lifecycle normal
+ // TODO - currently based on type, really it's what the "launch item" is.
+ mParentView.post(() -> {
+ ProtoLog.d(WM_SHELL_BUBBLES, "onInitialized: calling startActivity, bubble=%s",
+ getBubbleKey());
+ try {
+ options.setTaskAlwaysOnTop(true);
+ options.setPendingIntentBackgroundActivityStartMode(
+ MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS);
+ final boolean isShortcutBubble = (mBubble.hasMetadataShortcutId()
+ || (mBubble.isShortcut()
+ && BubbleAnythingFlagHelper.enableCreateAnyBubble()));
+ if (mBubble.getPreparingTransition() != null) {
+ mBubble.getPreparingTransition().surfaceCreated();
+ } else if (mBubble.isApp() || mBubble.isNote()) {
+ Context context =
+ mContext.createContextAsUser(
+ mBubble.getUser(), Context.CONTEXT_RESTRICTED);
+ Intent fillInIntent = null;
+ // First try get pending intent from the bubble
+ PendingIntent pi = mBubble.getPendingIntent();
+ if (pi == null) {
+ // If null - create new one
+ pi = PendingIntent.getActivity(
+ context,
+ /* requestCode= */ 0,
+ mBubble.getIntent()
+ .addFlags(FLAG_ACTIVITY_MULTIPLE_TASK),
+ PendingIntent.FLAG_IMMUTABLE
+ | PendingIntent.FLAG_UPDATE_CURRENT,
+ /* options= */ null);
+ } else {
+ fillInIntent = new Intent(pi.getIntent());
+ fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
+ }
+ mTaskView.startActivity(pi, fillInIntent, options, launchBounds);
+ } else if (isShortcutBubble) {
+ options.setLaunchedFromBubble(true);
+ options.setApplyActivityFlagsForBubbles(true);
+ mTaskView.startShortcutActivity(mBubble.getShortcutInfo(),
+ options, launchBounds);
+ } else {
+ options.setLaunchedFromBubble(true);
+ if (mBubble != null) {
+ mBubble.setPendingIntentActive();
+ }
+ final Intent fillInIntent = new Intent();
+ // Apply flags to make behaviour match documentLaunchMode=always.
+ fillInIntent.addFlags(FLAG_ACTIVITY_NEW_DOCUMENT);
+ fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
+ mTaskView.startActivity(mPendingIntent, fillInIntent, options,
+ launchBounds);
+ }
+ } catch (RuntimeException e) {
+ // If there's a runtime exception here then there's something
+ // wrong with the intent, we can't really recover / try to populate
+ // the bubble again so we'll just remove it.
+ Log.w(TAG, "Exception while displaying bubble: " + getBubbleKey()
+ + ", " + e.getMessage() + "; removing bubble");
+ mExpandedViewManager.removeBubble(
+ getBubbleKey(), Bubbles.DISMISS_INVALID_INTENT);
+ }
+ mInitialized = true;
+ });
+ }
+
+ @Override
+ public void onReleased() {
+ mDestroyed = true;
+ }
+
+ @Override
+ public void onTaskCreated(int taskId, ComponentName name) {
+ ProtoLog.d(WM_SHELL_BUBBLES, "onTaskCreated: taskId=%d bubble=%s",
+ taskId, getBubbleKey());
+ // The taskId is saved to use for removeTask, preventing appearance in recent tasks.
+ mTaskId = taskId;
+
+ if (mBubble != null && mBubble.isNote()) {
+ // Let the controller know sooner what the taskId is.
+ mExpandedViewManager.setNoteBubbleTaskId(mBubble.getKey(), mTaskId);
+ }
+
+ // With the task org, the taskAppeared callback will only happen once the task has
+ // already drawn
+ mCallback.onTaskCreated();
+ }
+
+ @Override
+ public void onTaskVisibilityChanged(int taskId, boolean visible) {
+ mCallback.onContentVisibilityChanged(visible);
+ }
+
+ @Override
+ public void onTaskRemovalStarted(int taskId) {
+ ProtoLog.d(WM_SHELL_BUBBLES, "onTaskRemovalStarted: taskId=%d bubble=%s",
+ taskId, getBubbleKey());
+ if (mBubble != null) {
+ mExpandedViewManager.removeBubble(mBubble.getKey(), Bubbles.DISMISS_TASK_FINISHED);
+ }
+ if (mTaskView != null) {
+ mTaskView.release();
+ ((ViewGroup) mParentView).removeView(mTaskView);
+ mTaskView = null;
+ }
+ mCallback.onTaskRemovalStarted();
+ }
+
+ @Override
+ public void onBackPressedOnTaskRoot(int taskId) {
+ if (mTaskId == taskId && mExpandedViewManager.isStackExpanded()) {
+ mCallback.onBackPressed();
+ }
+ }
+
+ /**
+ * Sets the bubble or updates the bubble used to populate the view.
+ *
+ * @return true if the bubble is new or if the launch content of the bubble changed from the
+ * previous bubble.
+ */
+ public boolean setBubble(Bubble bubble) {
+ boolean isNew = mBubble == null || didBackingContentChange(bubble);
+ mBubble = bubble;
+ if (isNew) {
+ mPendingIntent = mBubble.getPendingIntent();
+ }
+ return isNew;
+ }
+
+ /** Returns the TaskView associated with this view. */
+ @Nullable
+ public TaskView getTaskView() {
+ return mTaskView;
+ }
+
+ /**
+ * Returns the task id associated with the task in this view. If the task doesn't exist then
+ * {@link ActivityTaskManager#INVALID_TASK_ID}.
+ */
+ public int getTaskId() {
+ return mTaskId;
+ }
+
+ private String getBubbleKey() {
+ return mBubble != null ? mBubble.getKey() : "";
+ }
+
+ // TODO (b/274980695): Is this still relevant?
+ /**
+ * Bubbles are backed by a pending intent or a shortcut, once the activity is
+ * started we never change it / restart it on notification updates -- unless the bubble's
+ * backing data switches.
+ *
+ * This indicates if the new bubble is backed by a different data source than what was
+ * previously shown here (e.g. previously a pending intent & now a shortcut).
+ *
+ * @param newBubble the bubble this view is being updated with.
+ * @return true if the backing content has changed.
+ */
+ private boolean didBackingContentChange(Bubble newBubble) {
+ boolean prevWasIntentBased = mBubble != null && mPendingIntent != null;
+ boolean newIsIntentBased = newBubble.getPendingIntent() != null;
+ return prevWasIntentBased != newIsIntentBased;
+ }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTransitions.java
index df8b4fd12540..6be3c1f18b39 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTransitions.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTransitions.java
@@ -22,6 +22,8 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.view.View.INVISIBLE;
import static android.view.WindowManager.TRANSIT_CHANGE;
+import static com.android.wm.shell.transition.Transitions.TRANSIT_CONVERT_TO_BUBBLE;
+
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
@@ -92,10 +94,10 @@ public class BubbleTransitions {
BubbleExpandedViewManager expandedViewManager, BubbleTaskViewFactory factory,
BubblePositioner positioner, BubbleStackView stackView,
BubbleBarLayerView layerView, BubbleIconFactory iconFactory,
- boolean inflateSync) {
+ DragData dragData, boolean inflateSync) {
return new ConvertToBubble(bubble, taskInfo, mContext,
expandedViewManager, factory, positioner, stackView, layerView, iconFactory,
- inflateSync);
+ dragData, inflateSync);
}
/**
@@ -149,43 +151,81 @@ public class BubbleTransitions {
}
/**
+ * Information about the task when it is being dragged to a bubble
+ */
+ public static class DragData {
+ private final Rect mBounds;
+ private final WindowContainerTransaction mPendingWct;
+
+ /**
+ * @param bounds bounds of the dragged task when the drag was released
+ * @param wct pending operations to be applied when finishing the drag
+ */
+ public DragData(@Nullable Rect bounds, @Nullable WindowContainerTransaction wct) {
+ mBounds = bounds;
+ mPendingWct = wct;
+ }
+
+ /**
+ * @return bounds of the dragged task when the drag was released
+ */
+ @Nullable
+ public Rect getBounds() {
+ return mBounds;
+ }
+
+ /**
+ * @return pending operations to be applied when finishing the drag
+ */
+ @Nullable
+ public WindowContainerTransaction getPendingWct() {
+ return mPendingWct;
+ }
+ }
+
+ /**
* BubbleTransition that coordinates the process of a non-bubble task becoming a bubble. The
* steps are as follows:
*
* 1. Start inflating the bubble view
* 2. Once inflated (but not-yet visible), tell WM to do the shell-transition.
- * 3. Transition becomes ready, so notify Launcher
- * 4. Launcher responds with showExpandedView which calls continueExpand() to make view visible
- * 5. Surface is created which kicks off actual animation
+ * 3. When the transition becomes ready, notify Launcher in parallel
+ * 4. Wait for surface to be created
+ * 5. Once surface is ready, animate the task to a bubble
*
- * So, constructor -> onInflated -> startAnimation -> continueExpand -> surfaceCreated.
+ * While the animation is pending, we keep a reference to the pending transition in the bubble.
+ * This allows us to check in other parts of the code that this bubble will be shown via the
+ * transition animation.
*
- * continueExpand and surfaceCreated are set-up to happen in either order, though, to support
- * UX/timing adjustments.
+ * startAnimation, continueExpand and surfaceCreated are set-up to happen in either order,
+ * to support UX/timing adjustments.
*/
@VisibleForTesting
class ConvertToBubble implements Transitions.TransitionHandler, BubbleTransition {
final BubbleBarLayerView mLayerView;
Bubble mBubble;
+ @Nullable DragData mDragData;
IBinder mTransition;
Transitions.TransitionFinishCallback mFinishCb;
WindowContainerTransaction mFinishWct = null;
final Rect mStartBounds = new Rect();
SurfaceControl mSnapshot = null;
TaskInfo mTaskInfo;
- boolean mFinishedExpand = false;
BubbleViewProvider mPriorBubble = null;
+ private final TransitionProgress mTransitionProgress = new TransitionProgress();
private SurfaceControl.Transaction mFinishT;
private SurfaceControl mTaskLeash;
ConvertToBubble(Bubble bubble, TaskInfo taskInfo, Context context,
BubbleExpandedViewManager expandedViewManager, BubbleTaskViewFactory factory,
BubblePositioner positioner, BubbleStackView stackView,
- BubbleBarLayerView layerView, BubbleIconFactory iconFactory, boolean inflateSync) {
+ BubbleBarLayerView layerView, BubbleIconFactory iconFactory,
+ @Nullable DragData dragData, boolean inflateSync) {
mBubble = bubble;
mTaskInfo = taskInfo;
mLayerView = layerView;
+ mDragData = dragData;
mBubble.setInflateSynchronously(inflateSync);
mBubble.setPreparingTransition(this);
mBubble.inflate(
@@ -208,6 +248,9 @@ public class BubbleTransitions {
final Rect launchBounds = new Rect();
mLayerView.getExpandedViewRestBounds(launchBounds);
WindowContainerTransaction wct = new WindowContainerTransaction();
+ if (mDragData != null && mDragData.getPendingWct() != null) {
+ wct.merge(mDragData.getPendingWct(), true);
+ }
if (mTaskInfo.getWindowingMode() == WINDOWING_MODE_MULTI_WINDOW) {
if (mTaskInfo.getParentTaskId() != INVALID_TASK_ID) {
wct.reparent(mTaskInfo.token, null, true);
@@ -226,7 +269,7 @@ public class BubbleTransitions {
state.mVisible = true;
}
mTaskViewTransitions.enqueueExternal(tv.getController(), () -> {
- mTransition = mTransitions.startTransition(TRANSIT_CHANGE, wct, this);
+ mTransition = mTransitions.startTransition(TRANSIT_CONVERT_TO_BUBBLE, wct, this);
return mTransition;
});
}
@@ -292,6 +335,11 @@ public class BubbleTransitions {
}
mFinishCb = finishCallback;
+ if (mDragData != null && mDragData.getBounds() != null) {
+ // Override start bounds with the dragged task bounds
+ mStartBounds.set(mDragData.getBounds());
+ }
+
// Now update state (and talk to launcher) in parallel with snapshot stuff
mBubbleData.notificationEntryUpdated(mBubble, /* suppressFlyout= */ true,
/* showInShade= */ false);
@@ -303,15 +351,22 @@ public class BubbleTransitions {
mStartBounds.left - info.getRoot(0).getOffset().x,
mStartBounds.top - info.getRoot(0).getOffset().y);
startTransaction.setLayer(mSnapshot, Integer.MAX_VALUE);
+
+ BubbleBarExpandedView bbev = mBubble.getBubbleBarExpandedView();
+ if (bbev != null) {
+ // Corners get reset during the animation. Add them back
+ startTransaction.setCornerRadius(mSnapshot, bbev.getRestingCornerRadius());
+ }
+
startTransaction.apply();
mTaskViewTransitions.onExternalDone(transition);
+ mTransitionProgress.setTransitionReady();
+ startExpandAnim();
return true;
}
- @Override
- public void continueExpand() {
- mFinishedExpand = true;
+ private void startExpandAnim() {
final boolean animate = mLayerView.canExpandView(mBubble);
if (animate) {
mPriorBubble = mLayerView.prepareConvertedView(mBubble);
@@ -322,19 +377,25 @@ public class BubbleTransitions {
mLayerView.removeView(priorView);
mPriorBubble = null;
}
- if (!animate || mBubble.getTaskView().getSurfaceControl() != null) {
+ if (!animate || mTransitionProgress.isReadyToAnimate()) {
playAnimation(animate);
}
}
@Override
+ public void continueExpand() {
+ mTransitionProgress.setReadyToExpand();
+ }
+
+ @Override
public void surfaceCreated() {
+ mTransitionProgress.setSurfaceReady();
mMainExecutor.execute(() -> {
final TaskViewTaskController tvc = mBubble.getTaskView().getController();
final TaskViewRepository.TaskViewState state = mRepository.byTaskView(tvc);
if (state == null) return;
state.mVisible = true;
- if (mFinishedExpand) {
+ if (mTransitionProgress.isReadyToAnimate()) {
playAnimation(true /* animate */);
}
});
@@ -350,9 +411,6 @@ public class BubbleTransitions {
mFinishWct = null;
}
- // Preparation is complete.
- mBubble.setPreparingTransition(null);
-
if (animate) {
mLayerView.animateConvert(startT, mStartBounds, mSnapshot, mTaskLeash, () -> {
mFinishCb.onTransitionFinished(mFinishWct);
@@ -364,6 +422,42 @@ public class BubbleTransitions {
mFinishCb = null;
}
}
+
+ /**
+ * Keeps track of internal state of different steps of this BubbleTransition.
+ */
+ private class TransitionProgress {
+ private boolean mTransitionReady;
+ private boolean mReadyToExpand;
+ private boolean mSurfaceReady;
+
+ void setTransitionReady() {
+ mTransitionReady = true;
+ onUpdate();
+ }
+
+ void setReadyToExpand() {
+ mReadyToExpand = true;
+ onUpdate();
+ }
+
+ void setSurfaceReady() {
+ mSurfaceReady = true;
+ onUpdate();
+ }
+
+ boolean isReadyToAnimate() {
+ // Animation only depends on transition and surface state
+ return mTransitionReady && mSurfaceReady;
+ }
+
+ private void onUpdate() {
+ if (mTransitionReady && mReadyToExpand && mSurfaceReady) {
+ // Clear the transition from bubble when all the steps are ready
+ mBubble.setPreparingTransition(null);
+ }
+ }
+ }
}
/**
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarExpandedView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarExpandedView.java
index 6798a88a6da7..d93dbc3c15d9 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarExpandedView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarExpandedView.java
@@ -43,9 +43,10 @@ import com.android.wm.shell.bubbles.BubbleLogger;
import com.android.wm.shell.bubbles.BubbleOverflowContainerView;
import com.android.wm.shell.bubbles.BubblePositioner;
import com.android.wm.shell.bubbles.BubbleTaskView;
-import com.android.wm.shell.bubbles.BubbleTaskViewHelper;
+import com.android.wm.shell.bubbles.BubbleTaskViewListener;
import com.android.wm.shell.bubbles.Bubbles;
import com.android.wm.shell.bubbles.RegionSamplingProvider;
+import com.android.wm.shell.dagger.HasWMComponent;
import com.android.wm.shell.shared.bubbles.BubbleBarLocation;
import com.android.wm.shell.shared.handles.RegionSamplingHelper;
import com.android.wm.shell.taskview.TaskView;
@@ -56,7 +57,7 @@ import java.util.function.Supplier;
import javax.inject.Inject;
/** Expanded view of a bubble when it's part of the bubble bar. */
-public class BubbleBarExpandedView extends FrameLayout implements BubbleTaskViewHelper.Listener {
+public class BubbleBarExpandedView extends FrameLayout implements BubbleTaskViewListener.Callback {
/**
* The expanded view listener notifying the {@link BubbleBarLayerView} about the internal
* actions and events
@@ -110,7 +111,7 @@ public class BubbleBarExpandedView extends FrameLayout implements BubbleTaskView
private BubbleExpandedViewManager mManager;
private BubblePositioner mPositioner;
private boolean mIsOverflow;
- private BubbleTaskViewHelper mBubbleTaskViewHelper;
+ private BubbleTaskViewListener mBubbleTaskViewListener;
private BubbleBarMenuViewController mMenuViewController;
@Nullable
private Supplier<Rect> mLayerBoundsSupplier;
@@ -205,6 +206,9 @@ public class BubbleBarExpandedView extends FrameLayout implements BubbleTaskView
protected void onFinishInflate() {
super.onFinishInflate();
Context context = getContext();
+ if (context instanceof HasWMComponent) {
+ ((HasWMComponent) context).getWMComponent().inject(this);
+ }
setElevation(getResources().getDimensionPixelSize(R.dimen.bubble_elevation));
mCaptionHeight = context.getResources().getDimensionPixelSize(
R.dimen.bubble_bar_expanded_view_caption_height);
@@ -246,9 +250,10 @@ public class BubbleBarExpandedView extends FrameLayout implements BubbleTaskView
mHandleView.setVisibility(View.GONE);
} else {
mTaskView = bubbleTaskView.getTaskView();
- mBubbleTaskViewHelper = new BubbleTaskViewHelper(mContext, expandedViewManager,
- /* listener= */ this, bubbleTaskView,
- /* viewParent= */ this);
+ mBubbleTaskViewListener = new BubbleTaskViewListener(mContext, bubbleTaskView,
+ /* viewParent= */ this,
+ expandedViewManager,
+ /* callback= */ this);
// if the task view is already attached to a parent we need to remove it
if (mTaskView.getParent() != null) {
@@ -535,13 +540,15 @@ public class BubbleBarExpandedView extends FrameLayout implements BubbleTaskView
/** Updates the bubble shown in the expanded view. */
public void update(Bubble bubble) {
mBubble = bubble;
- mBubbleTaskViewHelper.update(bubble);
+ mBubbleTaskViewListener.setBubble(bubble);
mMenuViewController.updateMenu(bubble);
}
/** The task id of the activity shown in the task view, if it exists. */
public int getTaskId() {
- return mBubbleTaskViewHelper != null ? mBubbleTaskViewHelper.getTaskId() : INVALID_TASK_ID;
+ return mBubbleTaskViewListener != null
+ ? mBubbleTaskViewListener.getTaskId()
+ : INVALID_TASK_ID;
}
/** Sets layer bounds supplier used for obscured touchable region of task view */
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDesktopState.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDesktopState.java
index c10c2c905c97..c6afc313b239 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDesktopState.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDesktopState.java
@@ -81,8 +81,8 @@ public class PipDesktopState {
return false;
}
- /** Returns whether PiP is exiting while we're in a Desktop Mode session. */
- private boolean isPipExitingToDesktopMode() {
+ /** Returns whether PiP is active in a display that is in active Desktop Mode session. */
+ public boolean isPipInDesktopMode() {
// Early return if PiP in Desktop Windowing is not supported.
if (!isDesktopWindowingPipEnabled()) {
return false;
@@ -137,7 +137,7 @@ public class PipDesktopState {
// 1) If the display windowing mode is freeform, set windowing mode to UNDEFINED so it will
// resolve the windowing mode to the display's windowing mode.
// 2) If the display windowing mode is not FREEFORM, set windowing mode to FREEFORM.
- if (isPipExitingToDesktopMode()) {
+ if (isPipInDesktopMode()) {
if (isDisplayInFreeform()) {
return WINDOWING_MODE_UNDEFINED;
} else {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java
index aebd94fc173a..34d840eed3f0 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/TvWMShellModule.java
@@ -92,7 +92,7 @@ public class TvWMShellModule {
MultiInstanceHelper multiInstanceHelper,
SplitState splitState,
@ShellMainThread ShellExecutor mainExecutor,
- Handler mainHandler,
+ @ShellMainThread Handler mainHandler,
SystemWindows systemWindows) {
return new TvSplitScreenController(context, shellInit, shellCommandHandler, shellController,
shellTaskOrganizer, syncQueue, rootTDAOrganizer, displayController,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
index 5de49b757128..35475c7ee4ce 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
@@ -134,6 +134,7 @@ import com.android.wm.shell.recents.RecentsTransitionHandler;
import com.android.wm.shell.shared.TransactionPool;
import com.android.wm.shell.shared.annotations.ShellAnimationThread;
import com.android.wm.shell.shared.annotations.ShellBackgroundThread;
+import com.android.wm.shell.shared.annotations.ShellDesktopThread;
import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
@@ -750,6 +751,7 @@ public abstract class WMShellModule {
MultiInstanceHelper multiInstanceHelper,
@ShellMainThread ShellExecutor mainExecutor,
@ShellMainThread Handler mainHandler,
+ @ShellDesktopThread ShellExecutor desktopExecutor,
Optional<DesktopTasksLimiter> desktopTasksLimiter,
Optional<RecentTasksController> recentTasksController,
InteractionJankMonitor interactionJankMonitor,
@@ -789,6 +791,7 @@ public abstract class WMShellModule {
recentsTransitionHandler,
multiInstanceHelper,
mainExecutor,
+ desktopExecutor,
desktopTasksLimiter,
recentTasksController.orElse(null),
interactionJankMonitor,
@@ -915,14 +918,15 @@ public abstract class WMShellModule {
Transitions transitions,
RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
@DynamicOverride DesktopUserRepositories desktopUserRepositories,
- InteractionJankMonitor interactionJankMonitor) {
+ InteractionJankMonitor interactionJankMonitor,
+ Optional<BubbleController> bubbleController) {
return ENABLE_DESKTOP_WINDOWING_ENTER_TRANSITIONS_BUGFIX.isTrue()
? new SpringDragToDesktopTransitionHandler(
context, transitions, rootTaskDisplayAreaOrganizer, desktopUserRepositories,
- interactionJankMonitor)
+ interactionJankMonitor, bubbleController)
: new DefaultDragToDesktopTransitionHandler(
context, transitions, rootTaskDisplayAreaOrganizer, desktopUserRepositories,
- interactionJankMonitor);
+ interactionJankMonitor, bubbleController);
}
@WMSingleton
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/pip/Pip2Module.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/pip/Pip2Module.java
index e7c76bbd91b2..7d80ee5f3bb6 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/pip/Pip2Module.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/pip/Pip2Module.java
@@ -174,6 +174,7 @@ public abstract class Pip2Module {
@NonNull PipScheduler pipScheduler,
@NonNull SizeSpecSource sizeSpecSource,
@NonNull PipDisplayLayoutState pipDisplayLayoutState,
+ PipDesktopState pipDesktopState,
DisplayController displayController,
PipMotionHelper pipMotionHelper,
FloatingContentCoordinator floatingContentCoordinator,
@@ -182,8 +183,8 @@ public abstract class Pip2Module {
Optional<PipPerfHintController> pipPerfHintControllerOptional) {
return new PipTouchHandler(context, shellInit, shellCommandHandler, menuPhoneController,
pipBoundsAlgorithm, pipBoundsState, pipTransitionState, pipScheduler,
- sizeSpecSource, pipDisplayLayoutState, displayController, pipMotionHelper,
- floatingContentCoordinator, pipUiEventLogger, mainExecutor,
+ sizeSpecSource, pipDisplayLayoutState, pipDesktopState, displayController,
+ pipMotionHelper, floatingContentCoordinator, pipUiEventLogger, mainExecutor,
pipPerfHintControllerOptional);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeVisualIndicator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeVisualIndicator.java
index 27aed17762ff..aecbf1a23cb2 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeVisualIndicator.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeVisualIndicator.java
@@ -18,9 +18,6 @@ package com.android.wm.shell.desktopmode;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
-import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
-import static android.view.WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL;
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static com.android.wm.shell.desktopmode.DesktopModeVisualIndicator.IndicatorType.NO_INDICATOR;
import static com.android.wm.shell.desktopmode.DesktopModeVisualIndicator.IndicatorType.TO_DESKTOP_INDICATOR;
@@ -28,37 +25,27 @@ import static com.android.wm.shell.desktopmode.DesktopModeVisualIndicator.Indica
import static com.android.wm.shell.desktopmode.DesktopModeVisualIndicator.IndicatorType.TO_SPLIT_LEFT_INDICATOR;
import static com.android.wm.shell.desktopmode.DesktopModeVisualIndicator.IndicatorType.TO_SPLIT_RIGHT_INDICATOR;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.RectEvaluator;
-import android.animation.ValueAnimator;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.PixelFormat;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.Region;
-import android.graphics.drawable.LayerDrawable;
-import android.util.DisplayMetrics;
import android.view.SurfaceControl;
-import android.view.SurfaceControlViewHost;
-import android.view.View;
-import android.view.WindowManager;
-import android.view.WindowlessWindowManager;
-import android.view.animation.DecelerateInterpolator;
+import android.window.DesktopModeFlags;
import androidx.annotation.VisibleForTesting;
import com.android.internal.policy.SystemBarUtils;
-import com.android.window.flags.Flags;
import com.android.wm.shell.R;
import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayLayout;
+import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SyncTransactionQueue;
+import com.android.wm.shell.shared.annotations.ShellDesktopThread;
+import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper;
import com.android.wm.shell.shared.bubbles.BubbleDropTargetBoundsProvider;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
@@ -115,37 +102,54 @@ public class DesktopModeVisualIndicator {
}
}
+ private final VisualIndicatorViewContainer mVisualIndicatorViewContainer;
+
private final Context mContext;
private final DisplayController mDisplayController;
- private final RootTaskDisplayAreaOrganizer mRootTdaOrganizer;
private final ActivityManager.RunningTaskInfo mTaskInfo;
- private final SurfaceControl mTaskSurface;
- private final @Nullable BubbleDropTargetBoundsProvider mBubbleBoundsProvider;
- private SurfaceControl mLeash;
-
- private final SyncTransactionQueue mSyncQueue;
- private SurfaceControlViewHost mViewHost;
- private View mView;
private IndicatorType mCurrentType;
- private DragStartState mDragStartState;
- private boolean mIsReleased;
+ private final DragStartState mDragStartState;
- public DesktopModeVisualIndicator(SyncTransactionQueue syncQueue,
+ public DesktopModeVisualIndicator(@ShellDesktopThread ShellExecutor desktopExecutor,
+ @ShellMainThread ShellExecutor mainExecutor,
+ SyncTransactionQueue syncQueue,
ActivityManager.RunningTaskInfo taskInfo, DisplayController displayController,
Context context, SurfaceControl taskSurface,
RootTaskDisplayAreaOrganizer taskDisplayAreaOrganizer,
DragStartState dragStartState,
@Nullable BubbleDropTargetBoundsProvider bubbleBoundsProvider) {
- mSyncQueue = syncQueue;
+ SurfaceControl.Builder builder = new SurfaceControl.Builder();
+ taskDisplayAreaOrganizer.attachToDisplayArea(taskInfo.displayId, builder);
+ mVisualIndicatorViewContainer = new VisualIndicatorViewContainer(
+ DesktopModeFlags.ENABLE_DESKTOP_INDICATOR_IN_SEPARATE_THREAD_BUGFIX.isTrue()
+ ? desktopExecutor : mainExecutor,
+ mainExecutor, builder, syncQueue, bubbleBoundsProvider);
mTaskInfo = taskInfo;
mDisplayController = displayController;
mContext = context;
- mTaskSurface = taskSurface;
- mRootTdaOrganizer = taskDisplayAreaOrganizer;
- mBubbleBoundsProvider = bubbleBoundsProvider;
mCurrentType = NO_INDICATOR;
mDragStartState = dragStartState;
+ mVisualIndicatorViewContainer.createView(
+ mContext,
+ mDisplayController.getDisplay(mTaskInfo.displayId),
+ mDisplayController.getDisplayLayout(mTaskInfo.displayId),
+ mTaskInfo,
+ taskSurface
+ );
+ }
+
+ /** Start the fade out animation, running the callback on the main thread once it is done. */
+ public void fadeOutIndicator(
+ @NonNull Runnable callback) {
+ mVisualIndicatorViewContainer.fadeOutIndicator(
+ mDisplayController.getDisplayLayout(mTaskInfo.displayId), mCurrentType, callback
+ );
+ }
+
+ /** Release the visual indicator view and its viewhost. */
+ public void releaseVisualIndicator() {
+ mVisualIndicatorViewContainer.releaseVisualIndicator();
}
/**
@@ -202,7 +206,10 @@ public class DesktopModeVisualIndicator {
}
}
if (mDragStartState != DragStartState.DRAGGED_INTENT) {
- transitionIndicator(result);
+ mVisualIndicatorViewContainer.transitionIndicator(
+ mTaskInfo, mDisplayController, mCurrentType, result
+ );
+ mCurrentType = result;
}
return result;
}
@@ -283,338 +290,8 @@ public class DesktopModeVisualIndicator {
layout.width(), layout.height());
}
- /**
- * Create a fullscreen indicator with no animation
- */
- private void createView() {
- if (mIsReleased) return;
- final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
- final Resources resources = mContext.getResources();
- final DisplayMetrics metrics = resources.getDisplayMetrics();
- final int screenWidth;
- final int screenHeight;
- if (Flags.enableBugFixesForSecondaryDisplay()) {
- final DisplayLayout displayLayout =
- mDisplayController.getDisplayLayout(mTaskInfo.displayId);
- screenWidth = displayLayout.width();
- screenHeight = displayLayout.height();
- } else {
- screenWidth = metrics.widthPixels;
- screenHeight = metrics.heightPixels;
- }
- mView = new View(mContext);
- final SurfaceControl.Builder builder = new SurfaceControl.Builder();
- mRootTdaOrganizer.attachToDisplayArea(mTaskInfo.displayId, builder);
- mLeash = builder
- .setName("Desktop Mode Visual Indicator")
- .setContainerLayer()
- .setCallsite("DesktopModeVisualIndicator.createView")
- .build();
- t.show(mLeash);
- final WindowManager.LayoutParams lp =
- new WindowManager.LayoutParams(screenWidth, screenHeight, TYPE_APPLICATION,
- FLAG_NOT_FOCUSABLE, PixelFormat.TRANSPARENT);
- lp.setTitle("Desktop Mode Visual Indicator");
- lp.setTrustedOverlay();
- lp.inputFeatures |= INPUT_FEATURE_NO_INPUT_CHANNEL;
- final WindowlessWindowManager windowManager = new WindowlessWindowManager(
- mTaskInfo.configuration, mLeash,
- /* hostInputToken= */ null);
- mViewHost = new SurfaceControlViewHost(mContext,
- mDisplayController.getDisplay(mTaskInfo.displayId), windowManager,
- "DesktopModeVisualIndicator");
- mViewHost.setView(mView, lp);
- // We want this indicator to be behind the dragged task, but in front of all others.
- t.setRelativeLayer(mLeash, mTaskSurface, -1);
-
- mSyncQueue.runInSync(transaction -> {
- transaction.merge(t);
- t.close();
- });
- }
-
@VisibleForTesting
Rect getIndicatorBounds() {
- return mView.getBackground().getBounds();
- }
-
- /**
- * Fade indicator in as provided type. Animator fades it in while expanding the bounds outwards.
- */
- private void fadeInIndicator(IndicatorType type) {
- mView.setBackgroundResource(R.drawable.desktop_windowing_transition_background);
- final VisualIndicatorAnimator animator = VisualIndicatorAnimator
- .fadeBoundsIn(mView, type,
- mDisplayController.getDisplayLayout(mTaskInfo.displayId),
- mBubbleBoundsProvider);
- animator.start();
- mCurrentType = type;
- }
-
- /**
- * Fade out indicator without fully releasing it. Animator fades it out while shrinking bounds.
- *
- * @param finishCallback called when animation ends or gets cancelled
- */
- void fadeOutIndicator(@Nullable Runnable finishCallback) {
- if (mCurrentType == NO_INDICATOR) {
- // In rare cases, fade out can be requested before the indicator has determined its
- // initial type and started animating in. In this case, no animator is needed.
- finishCallback.run();
- return;
- }
- final VisualIndicatorAnimator animator = VisualIndicatorAnimator
- .fadeBoundsOut(mView, mCurrentType,
- mDisplayController.getDisplayLayout(mTaskInfo.displayId),
- mBubbleBoundsProvider);
- animator.start();
- if (finishCallback != null) {
- animator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- finishCallback.run();
- }
- });
- }
- mCurrentType = NO_INDICATOR;
- }
-
- /**
- * Takes existing indicator and animates it to bounds reflecting a new indicator type.
- */
- private void transitionIndicator(IndicatorType newType) {
- if (mCurrentType == newType) return;
- if (mView == null) {
- createView();
- }
- if (mCurrentType == NO_INDICATOR) {
- fadeInIndicator(newType);
- } else if (newType == NO_INDICATOR) {
- fadeOutIndicator(/* finishCallback= */ null);
- } else {
- final VisualIndicatorAnimator animator = VisualIndicatorAnimator.animateIndicatorType(
- mView, mDisplayController.getDisplayLayout(mTaskInfo.displayId), mCurrentType,
- newType, mBubbleBoundsProvider);
- mCurrentType = newType;
- animator.start();
- }
- }
-
- /**
- * Release the indicator and its components when it is no longer needed.
- */
- public void releaseVisualIndicator(SurfaceControl.Transaction t) {
- mIsReleased = true;
- if (mViewHost == null) return;
- if (mViewHost != null) {
- mViewHost.release();
- mViewHost = null;
- }
-
- if (mLeash != null) {
- t.remove(mLeash);
- mLeash = null;
- }
- }
-
- /**
- * Animator for Desktop Mode transitions which supports bounds and alpha animation.
- */
- private static class VisualIndicatorAnimator extends ValueAnimator {
- private static final int FULLSCREEN_INDICATOR_DURATION = 200;
- private static final float FULLSCREEN_SCALE_ADJUSTMENT_PERCENT = 0.015f;
- private static final float INDICATOR_FINAL_OPACITY = 0.35f;
- private static final int MAXIMUM_OPACITY = 255;
-
- /**
- * Determines how this animator will interact with the view's alpha:
- * Fade in, fade out, or no change to alpha
- */
- private enum AlphaAnimType {
- ALPHA_FADE_IN_ANIM, ALPHA_FADE_OUT_ANIM, ALPHA_NO_CHANGE_ANIM
- }
-
- private final View mView;
- private final Rect mStartBounds;
- private final Rect mEndBounds;
- private final RectEvaluator mRectEvaluator;
-
- private VisualIndicatorAnimator(View view, Rect startBounds,
- Rect endBounds) {
- mView = view;
- mStartBounds = new Rect(startBounds);
- mEndBounds = endBounds;
- setFloatValues(0, 1);
- mRectEvaluator = new RectEvaluator(new Rect());
- }
-
- private static VisualIndicatorAnimator fadeBoundsIn(
- @NonNull View view, IndicatorType type, @NonNull DisplayLayout displayLayout,
- @Nullable BubbleDropTargetBoundsProvider bubbleBoundsProvider) {
- final Rect endBounds = getIndicatorBounds(displayLayout, type, bubbleBoundsProvider);
- final Rect startBounds = getMinBounds(endBounds);
- view.getBackground().setBounds(startBounds);
-
- final VisualIndicatorAnimator animator = new VisualIndicatorAnimator(
- view, startBounds, endBounds);
- animator.setInterpolator(new DecelerateInterpolator());
- setupIndicatorAnimation(animator, AlphaAnimType.ALPHA_FADE_IN_ANIM);
- return animator;
- }
-
- private static VisualIndicatorAnimator fadeBoundsOut(
- @NonNull View view, IndicatorType type, @NonNull DisplayLayout displayLayout,
- @Nullable BubbleDropTargetBoundsProvider bubbleBoundsProvider) {
- final Rect startBounds = getIndicatorBounds(displayLayout, type, bubbleBoundsProvider);
- final Rect endBounds = getMinBounds(startBounds);
- view.getBackground().setBounds(startBounds);
-
- final VisualIndicatorAnimator animator = new VisualIndicatorAnimator(
- view, startBounds, endBounds);
- animator.setInterpolator(new DecelerateInterpolator());
- setupIndicatorAnimation(animator, AlphaAnimType.ALPHA_FADE_OUT_ANIM);
- return animator;
- }
-
- /**
- * Create animator for visual indicator changing type (i.e., fullscreen to freeform,
- * freeform to split, etc.)
- *
- * @param view the view for this indicator
- * @param displayLayout information about the display the transitioning task is
- * currently on
- * @param origType the original indicator type
- * @param newType the new indicator type
- * @param bubbleBoundsProvider provides bounds for bubbles indicators
- */
- private static VisualIndicatorAnimator animateIndicatorType(@NonNull View view,
- @NonNull DisplayLayout displayLayout, IndicatorType origType, IndicatorType newType,
- @Nullable BubbleDropTargetBoundsProvider bubbleBoundsProvider) {
- final Rect startBounds = getIndicatorBounds(displayLayout, origType,
- bubbleBoundsProvider);
- final Rect endBounds = getIndicatorBounds(displayLayout, newType, bubbleBoundsProvider);
- final VisualIndicatorAnimator animator = new VisualIndicatorAnimator(
- view, startBounds, endBounds);
- animator.setInterpolator(new DecelerateInterpolator());
- setupIndicatorAnimation(animator, AlphaAnimType.ALPHA_NO_CHANGE_ANIM);
- return animator;
- }
-
- /** Calculates the bounds the indicator should have when fully faded in. */
- private static Rect getIndicatorBounds(DisplayLayout layout, IndicatorType type,
- @Nullable BubbleDropTargetBoundsProvider bubbleBoundsProvider) {
- final Rect desktopStableBounds = new Rect();
- layout.getStableBounds(desktopStableBounds);
- final int padding = desktopStableBounds.top;
- switch (type) {
- case TO_FULLSCREEN_INDICATOR:
- desktopStableBounds.top += padding;
- desktopStableBounds.bottom -= padding;
- desktopStableBounds.left += padding;
- desktopStableBounds.right -= padding;
- return desktopStableBounds;
- case TO_DESKTOP_INDICATOR:
- final float adjustmentPercentage = 1f
- - DesktopTasksController.DESKTOP_MODE_INITIAL_BOUNDS_SCALE;
- return new Rect((int) (adjustmentPercentage * desktopStableBounds.width() / 2),
- (int) (adjustmentPercentage * desktopStableBounds.height() / 2),
- (int) (desktopStableBounds.width()
- - (adjustmentPercentage * desktopStableBounds.width() / 2)),
- (int) (desktopStableBounds.height()
- - (adjustmentPercentage * desktopStableBounds.height() / 2)));
- case TO_SPLIT_LEFT_INDICATOR:
- return new Rect(padding, padding,
- desktopStableBounds.width() / 2 - padding,
- desktopStableBounds.height());
- case TO_SPLIT_RIGHT_INDICATOR:
- return new Rect(desktopStableBounds.width() / 2 + padding, padding,
- desktopStableBounds.width() - padding,
- desktopStableBounds.height());
- case TO_BUBBLE_LEFT_INDICATOR:
- if (bubbleBoundsProvider == null) {
- return new Rect();
- }
- return bubbleBoundsProvider.getBubbleBarExpandedViewDropTargetBounds(
- /* onLeft= */ true);
- case TO_BUBBLE_RIGHT_INDICATOR:
- if (bubbleBoundsProvider == null) {
- return new Rect();
- }
- return bubbleBoundsProvider.getBubbleBarExpandedViewDropTargetBounds(
- /* onLeft= */ false);
- default:
- throw new IllegalArgumentException("Invalid indicator type provided.");
- }
- }
-
- /**
- * Add necessary listener for animation of indicator
- */
- private static void setupIndicatorAnimation(@NonNull VisualIndicatorAnimator animator,
- AlphaAnimType animType) {
- animator.addUpdateListener(a -> {
- if (animator.mView != null) {
- animator.updateBounds(a.getAnimatedFraction(), animator.mView);
- if (animType == AlphaAnimType.ALPHA_FADE_IN_ANIM) {
- animator.updateIndicatorAlpha(a.getAnimatedFraction(), animator.mView);
- } else if (animType == AlphaAnimType.ALPHA_FADE_OUT_ANIM) {
- animator.updateIndicatorAlpha(1 - a.getAnimatedFraction(), animator.mView);
- }
- } else {
- animator.cancel();
- }
- });
- animator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- animator.mView.getBackground().setBounds(animator.mEndBounds);
- }
- });
- animator.setDuration(FULLSCREEN_INDICATOR_DURATION);
- }
-
- /**
- * Update bounds of view based on current animation fraction.
- * Use of delta is to animate bounds independently, in case we need to
- * run multiple animations simultaneously.
- *
- * @param fraction fraction to use, compared against previous fraction
- * @param view the view to update
- */
- private void updateBounds(float fraction, View view) {
- if (mStartBounds.equals(mEndBounds)) {
- return;
- }
- final Rect currentBounds = mRectEvaluator.evaluate(fraction, mStartBounds, mEndBounds);
- view.getBackground().setBounds(currentBounds);
- }
-
- /**
- * Fade in the fullscreen indicator
- *
- * @param fraction current animation fraction
- */
- private void updateIndicatorAlpha(float fraction, View view) {
- final LayerDrawable drawable = (LayerDrawable) view.getBackground();
- drawable.findDrawableByLayerId(R.id.indicator_stroke)
- .setAlpha((int) (MAXIMUM_OPACITY * fraction));
- drawable.findDrawableByLayerId(R.id.indicator_solid)
- .setAlpha((int) (MAXIMUM_OPACITY * fraction * INDICATOR_FINAL_OPACITY));
- }
-
- /**
- * Return the minimum bounds of a visual indicator, to be used at the end of fading out
- * and the start of fading in.
- */
- private static Rect getMinBounds(Rect maxBounds) {
- return new Rect((int) (maxBounds.left
- + (FULLSCREEN_SCALE_ADJUSTMENT_PERCENT * maxBounds.width())),
- (int) (maxBounds.top
- + (FULLSCREEN_SCALE_ADJUSTMENT_PERCENT * maxBounds.height())),
- (int) (maxBounds.right
- - (FULLSCREEN_SCALE_ADJUSTMENT_PERCENT * maxBounds.width())),
- (int) (maxBounds.bottom
- - (FULLSCREEN_SCALE_ADJUSTMENT_PERCENT * maxBounds.height())));
- }
+ return mVisualIndicatorViewContainer.getIndicatorBounds();
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
index 531304d6922a..f17b680f6fae 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
@@ -116,6 +116,7 @@ import com.android.wm.shell.recents.RecentsTransitionStateListener.RecentsTransi
import com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_NOT_RUNNING
import com.android.wm.shell.shared.TransitionUtil
import com.android.wm.shell.shared.annotations.ExternalThread
+import com.android.wm.shell.shared.annotations.ShellDesktopThread
import com.android.wm.shell.shared.annotations.ShellMainThread
import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus
@@ -176,6 +177,7 @@ class DesktopTasksController(
private val recentsTransitionHandler: RecentsTransitionHandler,
private val multiInstanceHelper: MultiInstanceHelper,
@ShellMainThread private val mainExecutor: ShellExecutor,
+ @ShellDesktopThread private val desktopExecutor: ShellExecutor,
private val desktopTasksLimiter: Optional<DesktopTasksLimiter>,
private val recentTasksController: RecentTasksController?,
private val interactionJankMonitor: InteractionJankMonitor,
@@ -202,26 +204,19 @@ class DesktopTasksController(
private var userId: Int
private val desktopModeShellCommandHandler: DesktopModeShellCommandHandler =
DesktopModeShellCommandHandler(this)
- private val mOnAnimationFinishedCallback =
- Consumer<SurfaceControl.Transaction> { t: SurfaceControl.Transaction ->
- visualIndicator?.releaseVisualIndicator(t)
- visualIndicator = null
- }
+ private val mOnAnimationFinishedCallback = { releaseVisualIndicator() }
private val dragToDesktopStateListener =
object : DragToDesktopStateListener {
- override fun onCommitToDesktopAnimationStart(tx: SurfaceControl.Transaction) {
- removeVisualIndicator(tx)
+ override fun onCommitToDesktopAnimationStart() {
+ removeVisualIndicator()
}
- override fun onCancelToDesktopAnimationEnd(tx: SurfaceControl.Transaction) {
- removeVisualIndicator(tx)
+ override fun onCancelToDesktopAnimationEnd() {
+ removeVisualIndicator()
}
- private fun removeVisualIndicator(tx: SurfaceControl.Transaction) {
- visualIndicator?.fadeOutIndicator {
- visualIndicator?.releaseVisualIndicator(tx)
- visualIndicator = null
- }
+ private fun removeVisualIndicator() {
+ visualIndicator?.fadeOutIndicator { releaseVisualIndicator() }
}
}
@@ -838,6 +833,7 @@ class DesktopTasksController(
val taskId = taskInfo.taskId
val displayId = taskInfo.displayId
val wct = WindowContainerTransaction()
+ desktopTilingDecorViewModel.removeTaskIfTiled(displayId, taskId)
performDesktopExitCleanupIfNeeded(taskId, displayId, wct, forceToFullscreen = false)
// Notify immersive handler as it might need to exit immersive state.
val exitResult =
@@ -1773,13 +1769,8 @@ class DesktopTasksController(
}
fun releaseVisualIndicator() {
- val t = SurfaceControl.Transaction()
- visualIndicator?.releaseVisualIndicator(t)
+ visualIndicator?.releaseVisualIndicator()
visualIndicator = null
- syncQueue.runInSync { transaction ->
- transaction.merge(t)
- t.close()
- }
}
override fun getContext(): Context = context
@@ -1999,6 +1990,9 @@ class DesktopTasksController(
splitPosition,
options.toBundle(),
/* hideTaskToken= */ null,
+ if (enableFlexibleSplit())
+ splitScreenController.determineNewInstanceIndex(callingTask)
+ else SPLIT_INDEX_UNDEFINED,
)
}
}
@@ -2689,15 +2683,22 @@ class DesktopTasksController(
}
/** Requests a task be transitioned from whatever mode it's in to a bubble. */
- fun requestFloat(taskInfo: RunningTaskInfo) {
+ @JvmOverloads
+ fun requestFloat(taskInfo: RunningTaskInfo, left: Boolean? = null) {
val isDragging = dragToDesktopTransitionHandler.inProgress
val shouldRequestFloat =
taskInfo.isFullscreen || taskInfo.isFreeform || isDragging || taskInfo.isMultiWindow
if (!shouldRequestFloat) return
if (isDragging) {
releaseVisualIndicator()
+ val cancelState =
+ if (left == true) DragToDesktopTransitionHandler.CancelState.CANCEL_BUBBLE_LEFT
+ else DragToDesktopTransitionHandler.CancelState.CANCEL_BUBBLE_RIGHT
+ dragToDesktopTransitionHandler.cancelDragToDesktopTransition(cancelState)
} else {
- bubbleController.ifPresent { it.expandStackAndSelectBubble(taskInfo) }
+ bubbleController.ifPresent {
+ it.expandStackAndSelectBubble(taskInfo, /* dragData= */ null)
+ }
}
}
@@ -2750,6 +2751,8 @@ class DesktopTasksController(
val indicator =
visualIndicator
?: DesktopModeVisualIndicator(
+ desktopExecutor,
+ mainExecutor,
syncQueue,
taskInfo,
displayController,
@@ -2975,10 +2978,11 @@ class DesktopTasksController(
)
requestSplit(taskInfo, leftOrTop = false)
}
- IndicatorType.TO_BUBBLE_LEFT_INDICATOR,
+ IndicatorType.TO_BUBBLE_LEFT_INDICATOR -> {
+ requestFloat(taskInfo, left = true)
+ }
IndicatorType.TO_BUBBLE_RIGHT_INDICATOR -> {
- // TODO(b/388851898): move to bubble
- cancelDragToDesktop(taskInfo)
+ requestFloat(taskInfo, left = false)
}
}
return indicatorType
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt
index 8194d3cab445..fc29498291da 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt
@@ -37,6 +37,8 @@ import com.android.internal.jank.InteractionJankMonitor
import com.android.internal.protolog.ProtoLog
import com.android.wm.shell.RootTaskDisplayAreaOrganizer
import com.android.wm.shell.animation.FloatProperties
+import com.android.wm.shell.bubbles.BubbleController
+import com.android.wm.shell.bubbles.BubbleTransitions
import com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.TRANSIT_DESKTOP_MODE_CANCEL_DRAG_TO_DESKTOP
import com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.TRANSIT_DESKTOP_MODE_END_DRAG_TO_DESKTOP
import com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.TRANSIT_DESKTOP_MODE_START_DRAG_TO_DESKTOP
@@ -49,10 +51,12 @@ import com.android.wm.shell.shared.split.SplitScreenConstants.SPLIT_POSITION_UND
import com.android.wm.shell.shared.split.SplitScreenConstants.SplitPosition
import com.android.wm.shell.splitscreen.SplitScreenController
import com.android.wm.shell.transition.Transitions
+import com.android.wm.shell.transition.Transitions.TRANSIT_CONVERT_TO_BUBBLE
import com.android.wm.shell.transition.Transitions.TransitionHandler
import com.android.wm.shell.windowdecor.MoveToDesktopAnimator
import com.android.wm.shell.windowdecor.MoveToDesktopAnimator.Companion.DRAG_FREEFORM_SCALE
import com.android.wm.shell.windowdecor.OnTaskResizeAnimationListener
+import java.util.Optional
import java.util.function.Supplier
import kotlin.math.max
@@ -72,6 +76,7 @@ sealed class DragToDesktopTransitionHandler(
private val taskDisplayAreaOrganizer: RootTaskDisplayAreaOrganizer,
private val desktopUserRepositories: DesktopUserRepositories,
protected val interactionJankMonitor: InteractionJankMonitor,
+ private val bubbleController: Optional<BubbleController>,
protected val transactionSupplier: Supplier<SurfaceControl.Transaction>,
) : TransitionHandler {
@@ -241,6 +246,20 @@ sealed class DragToDesktopTransitionHandler(
state.startTransitionFinishCb?.onTransitionFinished(/* wct= */ null)
requestSplitFromScaledTask(splitPosition, wct)
clearState()
+ } else if (
+ state.draggedTaskChange != null &&
+ (cancelState == CancelState.CANCEL_BUBBLE_LEFT ||
+ cancelState == CancelState.CANCEL_BUBBLE_RIGHT)
+ ) {
+ if (!bubbleController.isPresent) {
+ startCancelAnimation()
+ } else {
+ // Animation is handled by BubbleController
+ val wct = WindowContainerTransaction()
+ restoreWindowOrder(wct, state)
+ // TODO(b/388851898): pass along information about left or right side
+ requestBubbleFromScaledTask(wct)
+ }
} else {
// There's no dragged task, this can happen when the "cancel" happened too quickly
// before the "start" transition is even ready (like on a fling gesture). The
@@ -258,20 +277,25 @@ sealed class DragToDesktopTransitionHandler(
) {
val state = requireTransitionState()
val taskInfo = state.draggedTaskChange?.taskInfo ?: error("Expected non-null taskInfo")
+ val animatedTaskBounds = getAnimatedTaskBounds()
+ requestSplitSelect(wct, taskInfo, splitPosition, animatedTaskBounds)
+ }
+
+ private fun getAnimatedTaskBounds(): Rect {
+ val state = requireTransitionState()
+ val taskInfo = state.draggedTaskChange?.taskInfo ?: error("Expected non-null taskInfo")
val taskBounds = Rect(taskInfo.configuration.windowConfiguration.bounds)
val taskScale = state.dragAnimator.scale
val scaledWidth = taskBounds.width() * taskScale
val scaledHeight = taskBounds.height() * taskScale
val dragPosition = PointF(state.dragAnimator.position)
state.dragAnimator.cancelAnimator()
- val animatedTaskBounds =
- Rect(
- dragPosition.x.toInt(),
- dragPosition.y.toInt(),
- (dragPosition.x + scaledWidth).toInt(),
- (dragPosition.y + scaledHeight).toInt(),
- )
- requestSplitSelect(wct, taskInfo, splitPosition, animatedTaskBounds)
+ return Rect(
+ dragPosition.x.toInt(),
+ dragPosition.y.toInt(),
+ (dragPosition.x + scaledWidth).toInt(),
+ (dragPosition.y + scaledHeight).toInt(),
+ )
}
private fun requestSplitSelect(
@@ -294,6 +318,25 @@ sealed class DragToDesktopTransitionHandler(
splitScreenController.requestEnterSplitSelect(taskInfo, wct, splitPosition, taskBounds)
}
+ private fun requestBubbleFromScaledTask(wct: WindowContainerTransaction) {
+ // TODO(b/391928049): update density once we can drag from desktop to bubble
+ val state = requireTransitionState()
+ val taskInfo = state.draggedTaskChange?.taskInfo ?: error("Expected non-null taskInfo")
+ val taskBounds = getAnimatedTaskBounds()
+ state.dragAnimator.cancelAnimator()
+ requestBubble(wct, taskInfo, taskBounds)
+ }
+
+ private fun requestBubble(
+ wct: WindowContainerTransaction,
+ taskInfo: RunningTaskInfo,
+ taskBounds: Rect = Rect(taskInfo.configuration.windowConfiguration.bounds),
+ ) {
+ val controller =
+ bubbleController.orElseThrow { IllegalStateException("BubbleController not set") }
+ controller.expandStackAndSelectBubble(taskInfo, BubbleTransitions.DragData(taskBounds, wct))
+ }
+
override fun startAnimation(
transition: IBinder,
info: TransitionInfo,
@@ -446,6 +489,16 @@ sealed class DragToDesktopTransitionHandler(
state.startTransitionFinishTransaction?.apply()
state.startTransitionFinishCb?.onTransitionFinished(/* wct= */ null)
requestSplitSelect(wct, taskInfo, splitPosition)
+ } else if (
+ state.cancelState == CancelState.CANCEL_BUBBLE_LEFT ||
+ state.cancelState == CancelState.CANCEL_BUBBLE_RIGHT
+ ) {
+ val taskInfo =
+ state.draggedTaskChange?.taskInfo ?: error("Expected non-null task info.")
+ val wct = WindowContainerTransaction()
+ restoreWindowOrder(wct)
+ // TODO(b/388851898): pass along information about left or right side
+ requestBubble(wct, taskInfo)
}
return true
}
@@ -476,6 +529,13 @@ sealed class DragToDesktopTransitionHandler(
clearState()
return
}
+ // In case of bubble animation, finish the initial desktop drag animation, but keep the
+ // current animation running and have bubbles take over
+ if (info.type == TRANSIT_CONVERT_TO_BUBBLE) {
+ state.startTransitionFinishCb?.onTransitionFinished(/* wct= */ null)
+ clearState()
+ return
+ }
val isCancelTransition =
info.type == TRANSIT_DESKTOP_MODE_CANCEL_DRAG_TO_DESKTOP &&
transition == state.cancelTransitionToken &&
@@ -582,7 +642,7 @@ sealed class DragToDesktopTransitionHandler(
startPosition.y.toInt() + unscaledStartHeight,
)
- dragToDesktopStateListener?.onCommitToDesktopAnimationStart(startTransaction)
+ dragToDesktopStateListener?.onCommitToDesktopAnimationStart()
// Accept the merge by applying the merging transaction (applied by #showResizeVeil)
// and finish callback. Show the veil and position the task at the first frame before
// starting the final animation.
@@ -713,7 +773,7 @@ sealed class DragToDesktopTransitionHandler(
addListener(
object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
- dragToDesktopStateListener?.onCancelToDesktopAnimationEnd(tx)
+ dragToDesktopStateListener?.onCancelToDesktopAnimationEnd()
// Start the cancel transition to restore order.
startCancelDragToDesktopTransition()
}
@@ -806,9 +866,9 @@ sealed class DragToDesktopTransitionHandler(
)
interface DragToDesktopStateListener {
- fun onCommitToDesktopAnimationStart(tx: SurfaceControl.Transaction)
+ fun onCommitToDesktopAnimationStart()
- fun onCancelToDesktopAnimationEnd(tx: SurfaceControl.Transaction)
+ fun onCancelToDesktopAnimationEnd()
}
sealed class TransitionState {
@@ -869,6 +929,10 @@ sealed class DragToDesktopTransitionHandler(
CANCEL_SPLIT_LEFT,
/** A cancel event where the task will request to enter split on the right side. */
CANCEL_SPLIT_RIGHT,
+ /** A cancel event where the task will request to bubble on the left side. */
+ CANCEL_BUBBLE_LEFT,
+ /** A cancel event where the task will request to bubble on the right side. */
+ CANCEL_BUBBLE_RIGHT,
}
companion object {
@@ -887,6 +951,7 @@ constructor(
taskDisplayAreaOrganizer: RootTaskDisplayAreaOrganizer,
desktopUserRepositories: DesktopUserRepositories,
interactionJankMonitor: InteractionJankMonitor,
+ bubbleController: Optional<BubbleController>,
transactionSupplier: Supplier<SurfaceControl.Transaction> = Supplier {
SurfaceControl.Transaction()
},
@@ -897,6 +962,7 @@ constructor(
taskDisplayAreaOrganizer,
desktopUserRepositories,
interactionJankMonitor,
+ bubbleController,
transactionSupplier,
) {
@@ -925,6 +991,7 @@ constructor(
taskDisplayAreaOrganizer: RootTaskDisplayAreaOrganizer,
desktopUserRepositories: DesktopUserRepositories,
interactionJankMonitor: InteractionJankMonitor,
+ bubbleController: Optional<BubbleController>,
transactionSupplier: Supplier<SurfaceControl.Transaction> = Supplier {
SurfaceControl.Transaction()
},
@@ -935,6 +1002,7 @@ constructor(
taskDisplayAreaOrganizer,
desktopUserRepositories,
interactionJankMonitor,
+ bubbleController,
transactionSupplier,
) {
@@ -1013,7 +1081,7 @@ constructor(
val startBoundsWithOffset =
Rect(startBounds).apply { offset(startPosition.x.toInt(), startPosition.y.toInt()) }
- dragToDesktopStateListener?.onCommitToDesktopAnimationStart(startTransaction)
+ dragToDesktopStateListener?.onCommitToDesktopAnimationStart()
// Accept the merge by applying the merging transaction (applied by #showResizeVeil)
// and finish callback. Show the veil and position the task at the first frame before
// starting the final animation.
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/ExitDesktopTaskTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/ExitDesktopTaskTransitionHandler.java
index f7f87ed63003..5ae1fca73d4e 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/ExitDesktopTaskTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/ExitDesktopTaskTransitionHandler.java
@@ -50,9 +50,11 @@ import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource;
import com.android.wm.shell.transition.Transitions;
+import kotlin.Unit;
+import kotlin.jvm.functions.Function0;
+
import java.util.ArrayList;
import java.util.List;
-import java.util.function.Consumer;
import java.util.function.Supplier;
@@ -69,7 +71,7 @@ public class ExitDesktopTaskTransitionHandler implements Transitions.TransitionH
@ShellMainThread
private final Handler mHandler;
private final List<IBinder> mPendingTransitionTokens = new ArrayList<>();
- private Consumer<SurfaceControl.Transaction> mOnAnimationFinishedCallback;
+ private Function0<Unit> mOnAnimationFinishedCallback;
private final Supplier<SurfaceControl.Transaction> mTransactionSupplier;
private Point mPosition;
@@ -106,7 +108,7 @@ public class ExitDesktopTaskTransitionHandler implements Transitions.TransitionH
*/
public void startTransition(@NonNull DesktopModeTransitionSource transitionSource,
@NonNull WindowContainerTransaction wct, Point position,
- Consumer<SurfaceControl.Transaction> onAnimationEndCallback) {
+ Function0<Unit> onAnimationEndCallback) {
mPosition = position;
mOnAnimationFinishedCallback = onAnimationEndCallback;
final IBinder token = mTransitions.startTransition(getExitTransitionType(transitionSource),
@@ -192,7 +194,7 @@ public class ExitDesktopTaskTransitionHandler implements Transitions.TransitionH
@Override
public void onAnimationEnd(Animator animation) {
if (mOnAnimationFinishedCallback != null) {
- mOnAnimationFinishedCallback.accept(finishT);
+ mOnAnimationFinishedCallback.invoke();
}
mInteractionJankMonitor.end(Cuj.CUJ_DESKTOP_MODE_EXIT_MODE);
mTransitions.getMainExecutor().execute(
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/VisualIndicatorViewContainer.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/VisualIndicatorViewContainer.kt
new file mode 100644
index 000000000000..2317274dbbf0
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/VisualIndicatorViewContainer.kt
@@ -0,0 +1,491 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.wm.shell.desktopmode
+
+import android.animation.Animator
+import android.animation.AnimatorListenerAdapter
+import android.animation.RectEvaluator
+import android.animation.ValueAnimator
+import android.app.ActivityManager
+import android.content.Context
+import android.graphics.PixelFormat
+import android.graphics.Rect
+import android.graphics.drawable.LayerDrawable
+import android.view.Display
+import android.view.SurfaceControl
+import android.view.SurfaceControlViewHost
+import android.view.View
+import android.view.WindowManager
+import android.view.WindowlessWindowManager
+import android.view.animation.DecelerateInterpolator
+import com.android.internal.annotations.VisibleForTesting
+import com.android.window.flags.Flags
+import com.android.wm.shell.R
+import com.android.wm.shell.common.DisplayController
+import com.android.wm.shell.common.DisplayLayout
+import com.android.wm.shell.common.ShellExecutor
+import com.android.wm.shell.common.SyncTransactionQueue
+import com.android.wm.shell.desktopmode.DesktopModeVisualIndicator.IndicatorType
+import com.android.wm.shell.shared.annotations.ShellDesktopThread
+import com.android.wm.shell.shared.annotations.ShellMainThread
+import com.android.wm.shell.shared.bubbles.BubbleDropTargetBoundsProvider
+import com.android.wm.shell.windowdecor.WindowDecoration.SurfaceControlViewHostFactory
+
+/**
+ * Container for the view / viewhost of the indicator, ensuring it is created / animated off the
+ * main thread.
+ */
+@VisibleForTesting
+class VisualIndicatorViewContainer
+@JvmOverloads
+constructor(
+ @ShellDesktopThread private val desktopExecutor: ShellExecutor,
+ @ShellMainThread private val mainExecutor: ShellExecutor,
+ private val indicatorBuilder: SurfaceControl.Builder,
+ private val syncQueue: SyncTransactionQueue,
+ private val surfaceControlViewHostFactory: SurfaceControlViewHostFactory =
+ object : SurfaceControlViewHostFactory {},
+ private val bubbleBoundsProvider: BubbleDropTargetBoundsProvider?,
+) {
+ @VisibleForTesting var indicatorView: View? = null
+ private var indicatorViewHost: SurfaceControlViewHost? = null
+ // Below variables and the SyncTransactionQueue are the only variables that should
+ // be accessed from shell main thread. Everything else should be used exclusively
+ // from the desktop thread.
+ private var indicatorLeash: SurfaceControl? = null
+ private var isReleased = false
+
+ /** Create a fullscreen indicator with no animation */
+ @ShellMainThread
+ fun createView(
+ context: Context,
+ display: Display,
+ layout: DisplayLayout,
+ taskInfo: ActivityManager.RunningTaskInfo,
+ taskSurface: SurfaceControl,
+ ) {
+ if (isReleased) return
+ desktopExecutor.execute {
+ val resources = context.resources
+ val metrics = resources.displayMetrics
+ val screenWidth: Int
+ val screenHeight: Int
+ if (Flags.enableBugFixesForSecondaryDisplay()) {
+ screenWidth = layout.width()
+ screenHeight = layout.height()
+ } else {
+ screenWidth = metrics.widthPixels
+ screenHeight = metrics.heightPixels
+ }
+ indicatorView = View(context)
+ val leash =
+ indicatorBuilder
+ .setName("Desktop Mode Visual Indicator")
+ .setContainerLayer()
+ .setCallsite("DesktopModeVisualIndicator.createView")
+ .build()
+ val lp =
+ WindowManager.LayoutParams(
+ screenWidth,
+ screenHeight,
+ WindowManager.LayoutParams.TYPE_APPLICATION,
+ WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
+ PixelFormat.TRANSPARENT,
+ )
+ lp.title = "Desktop Mode Visual Indicator"
+ lp.setTrustedOverlay()
+ lp.inputFeatures =
+ lp.inputFeatures or WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL
+ val windowManager =
+ WindowlessWindowManager(
+ taskInfo.configuration,
+ leash,
+ /* hostInputTransferToken= */ null,
+ )
+ indicatorViewHost =
+ surfaceControlViewHostFactory.create(
+ context,
+ display,
+ windowManager,
+ "VisualIndicatorViewContainer",
+ )
+ indicatorView?.let { indicatorViewHost?.setView(it, lp) }
+ showIndicator(taskSurface, leash)
+ }
+ }
+
+ private fun showIndicator(taskSurface: SurfaceControl, leash: SurfaceControl) {
+ mainExecutor.execute {
+ indicatorLeash = leash
+ val t = SurfaceControl.Transaction()
+ t.show(indicatorLeash)
+ // We want this indicator to be behind the dragged task, but in front of all others.
+ t.setRelativeLayer(indicatorLeash, taskSurface, -1)
+ syncQueue.runInSync { transaction: SurfaceControl.Transaction ->
+ transaction.merge(t)
+ t.close()
+ }
+ }
+ }
+
+ @VisibleForTesting
+ fun getIndicatorBounds(): Rect {
+ return indicatorView?.background?.getBounds() ?: Rect()
+ }
+
+ /**
+ * Takes existing indicator and animates it to bounds reflecting a new indicator type. Should
+ * only be called from the main thread.
+ */
+ @ShellMainThread
+ fun transitionIndicator(
+ taskInfo: ActivityManager.RunningTaskInfo,
+ displayController: DisplayController,
+ currentType: IndicatorType,
+ newType: IndicatorType,
+ ) {
+ if (currentType == newType || isReleased) return
+ desktopExecutor.execute {
+ val layout =
+ displayController.getDisplayLayout(taskInfo.displayId)
+ ?: error("Expected to find DisplayLayout for taskId${taskInfo.taskId}.")
+ if (currentType == IndicatorType.NO_INDICATOR) {
+ fadeInIndicator(layout, newType)
+ } else if (newType == IndicatorType.NO_INDICATOR) {
+ fadeOutIndicator(layout, currentType, /* finishCallback= */ null)
+ } else {
+ val animStartType = IndicatorType.valueOf(currentType.name)
+ val animator =
+ indicatorView?.let {
+ VisualIndicatorAnimator.animateIndicatorType(
+ it,
+ layout,
+ animStartType,
+ newType,
+ bubbleBoundsProvider,
+ )
+ } ?: return@execute
+ animator.start()
+ }
+ }
+ }
+
+ /**
+ * Fade indicator in as provided type. Animator fades it in while expanding the bounds outwards.
+ */
+ @VisibleForTesting
+ fun fadeInIndicator(layout: DisplayLayout, type: IndicatorType) {
+ desktopExecutor.assertCurrentThread()
+ indicatorView?.let {
+ it.setBackgroundResource(R.drawable.desktop_windowing_transition_background)
+ val animator =
+ VisualIndicatorAnimator.fadeBoundsIn(it, type, layout, bubbleBoundsProvider)
+ animator.start()
+ }
+ }
+
+ /**
+ * Fade out indicator without fully releasing it. Animator fades it out while shrinking bounds.
+ *
+ * @param finishCallback called when animation ends or gets cancelled
+ */
+ fun fadeOutIndicator(
+ layout: DisplayLayout,
+ currentType: IndicatorType,
+ finishCallback: Runnable?,
+ ) {
+ if (currentType == IndicatorType.NO_INDICATOR) {
+ // In rare cases, fade out can be requested before the indicator has determined its
+ // initial type and started animating in. In this case, no animator is needed.
+ finishCallback?.run()
+ return
+ }
+ desktopExecutor.execute {
+ indicatorView?.let {
+ val animStartType = IndicatorType.valueOf(currentType.name)
+ val animator =
+ VisualIndicatorAnimator.fadeBoundsOut(
+ it,
+ animStartType,
+ layout,
+ bubbleBoundsProvider,
+ )
+ animator.addListener(
+ object : AnimatorListenerAdapter() {
+ override fun onAnimationEnd(animation: Animator) {
+ if (finishCallback != null) {
+ mainExecutor.execute(finishCallback)
+ }
+ }
+ }
+ )
+ animator.start()
+ }
+ }
+ }
+
+ /** Release the indicator and its components when it is no longer needed. */
+ @ShellMainThread
+ fun releaseVisualIndicator() {
+ if (isReleased) return
+ desktopExecutor.execute {
+ indicatorViewHost?.release()
+ indicatorViewHost = null
+ }
+ indicatorLeash?.let {
+ val tx = SurfaceControl.Transaction()
+ tx.remove(it)
+ indicatorLeash = null
+ syncQueue.runInSync { transaction: SurfaceControl.Transaction ->
+ transaction.merge(tx)
+ tx.close()
+ }
+ }
+ isReleased = true
+ }
+
+ /**
+ * Animator for Desktop Mode transitions which supports bounds and alpha animation. Functions
+ * should only be called from the desktop executor.
+ */
+ @VisibleForTesting
+ class VisualIndicatorAnimator(view: View, startBounds: Rect, endBounds: Rect) :
+ ValueAnimator() {
+ /**
+ * Determines how this animator will interact with the view's alpha: Fade in, fade out, or
+ * no change to alpha
+ */
+ private enum class AlphaAnimType {
+ ALPHA_FADE_IN_ANIM,
+ ALPHA_FADE_OUT_ANIM,
+ ALPHA_NO_CHANGE_ANIM,
+ }
+
+ private val indicatorView: View = view
+ @VisibleForTesting val indicatorStartBounds = Rect(startBounds)
+ @VisibleForTesting val indicatorEndBounds = endBounds
+ private val mRectEvaluator: RectEvaluator
+
+ init {
+ setFloatValues(0f, 1f)
+ mRectEvaluator = RectEvaluator(Rect())
+ }
+
+ /**
+ * Update bounds of view based on current animation fraction. Use of delta is to animate
+ * bounds independently, in case we need to run multiple animations simultaneously.
+ *
+ * @param fraction fraction to use, compared against previous fraction
+ * @param view the view to update
+ */
+ @ShellDesktopThread
+ private fun updateBounds(fraction: Float, view: View?) {
+ if (indicatorStartBounds == indicatorEndBounds) {
+ return
+ }
+ val currentBounds =
+ mRectEvaluator.evaluate(fraction, indicatorStartBounds, indicatorEndBounds)
+ view?.background?.bounds = currentBounds
+ }
+
+ /**
+ * Fade in the fullscreen indicator
+ *
+ * @param fraction current animation fraction
+ */
+ @ShellDesktopThread
+ private fun updateIndicatorAlpha(fraction: Float, view: View?) {
+ val drawable = view?.background as LayerDrawable
+ drawable.findDrawableByLayerId(R.id.indicator_stroke).alpha =
+ (MAXIMUM_OPACITY * fraction).toInt()
+ drawable.findDrawableByLayerId(R.id.indicator_solid).alpha =
+ (MAXIMUM_OPACITY * fraction * INDICATOR_FINAL_OPACITY).toInt()
+ }
+
+ companion object {
+ private const val FULLSCREEN_INDICATOR_DURATION = 200
+ private const val FULLSCREEN_SCALE_ADJUSTMENT_PERCENT = 0.015f
+ private const val INDICATOR_FINAL_OPACITY = 0.35f
+ private const val MAXIMUM_OPACITY = 255
+
+ @ShellDesktopThread
+ fun fadeBoundsIn(
+ view: View,
+ type: IndicatorType,
+ displayLayout: DisplayLayout,
+ bubbleBoundsProvider: BubbleDropTargetBoundsProvider?,
+ ): VisualIndicatorAnimator {
+ val endBounds = getIndicatorBounds(displayLayout, type, bubbleBoundsProvider)
+ val startBounds = getMinBounds(endBounds)
+ view.background.bounds = startBounds
+
+ val animator = VisualIndicatorAnimator(view, startBounds, endBounds)
+ animator.interpolator = DecelerateInterpolator()
+ setupIndicatorAnimation(animator, AlphaAnimType.ALPHA_FADE_IN_ANIM)
+ return animator
+ }
+
+ @ShellDesktopThread
+ fun fadeBoundsOut(
+ view: View,
+ type: IndicatorType,
+ displayLayout: DisplayLayout,
+ bubbleBoundsProvider: BubbleDropTargetBoundsProvider?,
+ ): VisualIndicatorAnimator {
+ val startBounds = getIndicatorBounds(displayLayout, type, bubbleBoundsProvider)
+ val endBounds = getMinBounds(startBounds)
+ view.background.bounds = startBounds
+
+ val animator = VisualIndicatorAnimator(view, startBounds, endBounds)
+ animator.interpolator = DecelerateInterpolator()
+ setupIndicatorAnimation(animator, AlphaAnimType.ALPHA_FADE_OUT_ANIM)
+ return animator
+ }
+
+ /**
+ * Create animator for visual indicator changing type (i.e., fullscreen to freeform,
+ * freeform to split, etc.)
+ *
+ * @param view the view for this indicator
+ * @param displayLayout information about the display the transitioning task is
+ * currently on
+ * @param origType the original indicator type
+ * @param newType the new indicator type
+ * @param desktopExecutor: the executor for the ShellDesktopThread; should be the only
+ * thread this function runs on
+ */
+ @ShellDesktopThread
+ fun animateIndicatorType(
+ view: View,
+ displayLayout: DisplayLayout,
+ origType: IndicatorType,
+ newType: IndicatorType,
+ bubbleBoundsProvider: BubbleDropTargetBoundsProvider?,
+ ): VisualIndicatorAnimator {
+ val startBounds = getIndicatorBounds(displayLayout, origType, bubbleBoundsProvider)
+ val endBounds = getIndicatorBounds(displayLayout, newType, bubbleBoundsProvider)
+ val animator = VisualIndicatorAnimator(view, startBounds, endBounds)
+ animator.interpolator = DecelerateInterpolator()
+ setupIndicatorAnimation(animator, AlphaAnimType.ALPHA_NO_CHANGE_ANIM)
+ return animator
+ }
+
+ /** Calculates the bounds the indicator should have when fully faded in. */
+ private fun getIndicatorBounds(
+ layout: DisplayLayout,
+ type: IndicatorType,
+ bubbleBoundsProvider: BubbleDropTargetBoundsProvider?,
+ ): Rect {
+ val desktopStableBounds = Rect()
+ layout.getStableBounds(desktopStableBounds)
+ val padding = desktopStableBounds.top
+ when (type) {
+ IndicatorType.TO_FULLSCREEN_INDICATOR -> {
+ desktopStableBounds.top += padding
+ desktopStableBounds.bottom -= padding
+ desktopStableBounds.left += padding
+ desktopStableBounds.right -= padding
+ return desktopStableBounds
+ }
+
+ IndicatorType.TO_DESKTOP_INDICATOR -> {
+ val adjustmentPercentage =
+ (1f - DesktopTasksController.DESKTOP_MODE_INITIAL_BOUNDS_SCALE)
+ return Rect(
+ (adjustmentPercentage * desktopStableBounds.width() / 2).toInt(),
+ (adjustmentPercentage * desktopStableBounds.height() / 2).toInt(),
+ (desktopStableBounds.width() -
+ (adjustmentPercentage * desktopStableBounds.width() / 2))
+ .toInt(),
+ (desktopStableBounds.height() -
+ (adjustmentPercentage * desktopStableBounds.height() / 2))
+ .toInt(),
+ )
+ }
+
+ IndicatorType.TO_SPLIT_LEFT_INDICATOR ->
+ return Rect(
+ padding,
+ padding,
+ desktopStableBounds.width() / 2 - padding,
+ desktopStableBounds.height(),
+ )
+
+ IndicatorType.TO_SPLIT_RIGHT_INDICATOR ->
+ return Rect(
+ desktopStableBounds.width() / 2 + padding,
+ padding,
+ desktopStableBounds.width() - padding,
+ desktopStableBounds.height(),
+ )
+ IndicatorType.TO_BUBBLE_LEFT_INDICATOR ->
+ return bubbleBoundsProvider?.getBubbleBarExpandedViewDropTargetBounds(
+ /* onLeft= */ true
+ ) ?: Rect()
+ IndicatorType.TO_BUBBLE_RIGHT_INDICATOR ->
+ return bubbleBoundsProvider?.getBubbleBarExpandedViewDropTargetBounds(
+ /* onLeft= */ false
+ ) ?: Rect()
+ else -> throw IllegalArgumentException("Invalid indicator type provided.")
+ }
+ }
+
+ /** Add necessary listener for animation of indicator */
+ private fun setupIndicatorAnimation(
+ animator: VisualIndicatorAnimator,
+ animType: AlphaAnimType,
+ ) {
+ animator.addUpdateListener { a: ValueAnimator ->
+ animator.updateBounds(a.animatedFraction, animator.indicatorView)
+ if (animType == AlphaAnimType.ALPHA_FADE_IN_ANIM) {
+ animator.updateIndicatorAlpha(a.animatedFraction, animator.indicatorView)
+ } else if (animType == AlphaAnimType.ALPHA_FADE_OUT_ANIM) {
+ animator.updateIndicatorAlpha(
+ 1 - a.animatedFraction,
+ animator.indicatorView,
+ )
+ }
+ }
+ animator.addListener(
+ object : AnimatorListenerAdapter() {
+ override fun onAnimationEnd(animation: Animator) {
+ animator.indicatorView.background.bounds = animator.indicatorEndBounds
+ }
+ }
+ )
+ animator.setDuration(FULLSCREEN_INDICATOR_DURATION.toLong())
+ }
+
+ /**
+ * Return the minimum bounds of a visual indicator, to be used at the end of fading out
+ * and the start of fading in.
+ */
+ private fun getMinBounds(maxBounds: Rect): Rect {
+ return Rect(
+ (maxBounds.left + (FULLSCREEN_SCALE_ADJUSTMENT_PERCENT * maxBounds.width()))
+ .toInt(),
+ (maxBounds.top + (FULLSCREEN_SCALE_ADJUSTMENT_PERCENT * maxBounds.height()))
+ .toInt(),
+ (maxBounds.right - (FULLSCREEN_SCALE_ADJUSTMENT_PERCENT * maxBounds.width()))
+ .toInt(),
+ (maxBounds.bottom - (FULLSCREEN_SCALE_ADJUSTMENT_PERCENT * maxBounds.height()))
+ .toInt(),
+ )
+ }
+ }
+ }
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipDragToResizeHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipDragToResizeHandler.java
new file mode 100644
index 000000000000..bd0b810b2a44
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipDragToResizeHandler.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.wm.shell.pip2.phone;
+
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_BOTTOM;
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_LEFT;
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_RIGHT;
+import static com.android.internal.policy.TaskResizingAlgorithm.CTRL_TOP;
+import static com.android.wm.shell.pip2.phone.PipMenuView.ANIM_TYPE_NONE;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Point;
+import android.graphics.PointF;
+import android.graphics.Rect;
+import android.graphics.Region;
+import android.view.MotionEvent;
+
+import com.android.internal.policy.TaskResizingAlgorithm;
+import com.android.wm.shell.R;
+import com.android.wm.shell.common.pip.PipBoundsAlgorithm;
+import com.android.wm.shell.common.pip.PipBoundsState;
+
+import java.util.function.Function;
+
+/** Helper for handling drag-corner-to-resize gestures. */
+public class PipDragToResizeHandler {
+ private final Context mContext;
+ private final PipResizeGestureHandler mPipResizeGestureHandler;
+ private final PipBoundsState mPipBoundsState;
+ private final PhonePipMenuController mPhonePipMenuController;
+ private final PipBoundsAlgorithm mPipBoundsAlgorithm;
+ private final PipScheduler mPipScheduler;
+
+ private final Region mTmpRegion = new Region();
+ private final Rect mDragCornerSize = new Rect();
+ private final Rect mTmpTopLeftCorner = new Rect();
+ private final Rect mTmpTopRightCorner = new Rect();
+ private final Rect mTmpBottomLeftCorner = new Rect();
+ private final Rect mTmpBottomRightCorner = new Rect();
+ private final Rect mDisplayBounds = new Rect();
+ private final Function<Rect, Rect> mMovementBoundsSupplier;
+ private int mDelta;
+
+ public PipDragToResizeHandler(Context context, PipResizeGestureHandler pipResizeGestureHandler,
+ PipBoundsState pipBoundsState,
+ PhonePipMenuController phonePipMenuController, PipBoundsAlgorithm pipBoundsAlgorithm,
+ PipScheduler pipScheduler, Function<Rect, Rect> movementBoundsSupplier) {
+ mContext = context;
+ mPipResizeGestureHandler = pipResizeGestureHandler;
+ mPipBoundsState = pipBoundsState;
+ mPhonePipMenuController = phonePipMenuController;
+ mPipBoundsAlgorithm = pipBoundsAlgorithm;
+ mPipScheduler = pipScheduler;
+ mMovementBoundsSupplier = movementBoundsSupplier;
+ }
+
+ /** Invoked by {@link PipResizeGestureHandler#reloadResources}. */
+ void reloadResources() {
+ final Resources res = mContext.getResources();
+ mDelta = res.getDimensionPixelSize(R.dimen.pip_resize_edge_size);
+ }
+
+ /** Invoked by {@link PipResizeGestureHandler#onInputEvent} if drag-corner-to-resize is
+ * enabled. */
+ void onDragCornerResize(MotionEvent ev, Rect lastResizeBounds, PointF downPoint,
+ Rect downBounds, Point minSize, Point maxSize, float touchSlop) {
+ int action = ev.getActionMasked();
+ float x = ev.getX();
+ float y = ev.getY();
+ if (action == MotionEvent.ACTION_DOWN) {
+ lastResizeBounds.setEmpty();
+ final boolean allowGesture = isWithinDragResizeRegion((int) x, (int) y);
+ mPipResizeGestureHandler.setAllowGesture(allowGesture);
+ if (allowGesture) {
+ setCtrlType((int) x, (int) y);
+ downPoint.set(x, y);
+ downBounds.set(mPipBoundsState.getBounds());
+ }
+ } else if (mPipResizeGestureHandler.getAllowGesture()) {
+ switch (action) {
+ case MotionEvent.ACTION_POINTER_DOWN:
+ // We do not support multi touch for resizing via drag
+ mPipResizeGestureHandler.setAllowGesture(false);
+ break;
+ case MotionEvent.ACTION_MOVE:
+ final boolean thresholdCrossed = mPipResizeGestureHandler.getThresholdCrossed();
+ // Capture inputs
+ if (!mPipResizeGestureHandler.getThresholdCrossed()
+ && Math.hypot(x - downPoint.x, y - downPoint.y) > touchSlop) {
+ mPipResizeGestureHandler.setThresholdCrossed(true);
+ // Reset the down to begin resizing from this point
+ downPoint.set(x, y);
+ mPipResizeGestureHandler.pilferPointers();
+ }
+ if (mPipResizeGestureHandler.getThresholdCrossed()) {
+ if (mPhonePipMenuController.isMenuVisible()) {
+ mPhonePipMenuController.hideMenu(ANIM_TYPE_NONE,
+ false /* resize */);
+ }
+ final Rect currentPipBounds = mPipBoundsState.getBounds();
+ lastResizeBounds.set(TaskResizingAlgorithm.resizeDrag(x, y,
+ downPoint.x, downPoint.y, currentPipBounds,
+ mPipResizeGestureHandler.getCtrlType(), minSize.x,
+ minSize.y, maxSize, true,
+ downBounds.width() > downBounds.height()));
+ mPipBoundsAlgorithm.transformBoundsToAspectRatio(lastResizeBounds,
+ mPipBoundsState.getAspectRatio(), false /* useCurrentMinEdgeSize */,
+ true /* useCurrentSize */);
+ mPipScheduler.scheduleUserResizePip(lastResizeBounds);
+ mPipBoundsState.setHasUserResizedPip(true);
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL:
+ mPipResizeGestureHandler.finishResize();
+ break;
+ }
+ }
+ }
+
+ /**
+ * Check whether the current x,y coordinate is within the region in which drag-resize should
+ * start.
+ * This consists of 4 small squares on the 4 corners of the PIP window, a quarter of which
+ * overlaps with the PIP window while the rest goes outside of the PIP window.
+ * _ _ _ _
+ * |_|_|_________|_|_|
+ * |_|_| |_|_|
+ * | PIP |
+ * | WINDOW |
+ * _|_ _|_
+ * |_|_|_________|_|_|
+ * |_|_| |_|_|
+ */
+ boolean isWithinDragResizeRegion(int x, int y) {
+ final Rect currentPipBounds = mPipBoundsState.getBounds();
+ if (currentPipBounds == null) {
+ return false;
+ }
+ resetDragCorners();
+ mTmpTopLeftCorner.offset(currentPipBounds.left - mDelta / 2,
+ currentPipBounds.top - mDelta / 2);
+ mTmpTopRightCorner.offset(currentPipBounds.right - mDelta / 2,
+ currentPipBounds.top - mDelta / 2);
+ mTmpBottomLeftCorner.offset(currentPipBounds.left - mDelta / 2,
+ currentPipBounds.bottom - mDelta / 2);
+ mTmpBottomRightCorner.offset(currentPipBounds.right - mDelta / 2,
+ currentPipBounds.bottom - mDelta / 2);
+
+ mTmpRegion.setEmpty();
+ mTmpRegion.op(mTmpTopLeftCorner, Region.Op.UNION);
+ mTmpRegion.op(mTmpTopRightCorner, Region.Op.UNION);
+ mTmpRegion.op(mTmpBottomLeftCorner, Region.Op.UNION);
+ mTmpRegion.op(mTmpBottomRightCorner, Region.Op.UNION);
+
+ return mTmpRegion.contains(x, y);
+ }
+
+ private void resetDragCorners() {
+ mDragCornerSize.set(0, 0, mDelta, mDelta);
+ mTmpTopLeftCorner.set(mDragCornerSize);
+ mTmpTopRightCorner.set(mDragCornerSize);
+ mTmpBottomLeftCorner.set(mDragCornerSize);
+ mTmpBottomRightCorner.set(mDragCornerSize);
+ }
+
+ private void setCtrlType(int x, int y) {
+ final Rect currentPipBounds = mPipBoundsState.getBounds();
+ int ctrlType = mPipResizeGestureHandler.getCtrlType();
+
+ Rect movementBounds = mMovementBoundsSupplier.apply(currentPipBounds);
+
+ mDisplayBounds.set(movementBounds.left,
+ movementBounds.top,
+ movementBounds.right + currentPipBounds.width(),
+ movementBounds.bottom + currentPipBounds.height());
+
+ if (mTmpTopLeftCorner.contains(x, y) && currentPipBounds.top != mDisplayBounds.top
+ && currentPipBounds.left != mDisplayBounds.left) {
+ ctrlType |= CTRL_LEFT;
+ ctrlType |= CTRL_TOP;
+ }
+ if (mTmpTopRightCorner.contains(x, y) && currentPipBounds.top != mDisplayBounds.top
+ && currentPipBounds.right != mDisplayBounds.right) {
+ ctrlType |= CTRL_RIGHT;
+ ctrlType |= CTRL_TOP;
+ }
+ if (mTmpBottomRightCorner.contains(x, y)
+ && currentPipBounds.bottom != mDisplayBounds.bottom
+ && currentPipBounds.right != mDisplayBounds.right) {
+ ctrlType |= CTRL_RIGHT;
+ ctrlType |= CTRL_BOTTOM;
+ }
+ if (mTmpBottomLeftCorner.contains(x, y)
+ && currentPipBounds.bottom != mDisplayBounds.bottom
+ && currentPipBounds.left != mDisplayBounds.left) {
+ ctrlType |= CTRL_LEFT;
+ ctrlType |= CTRL_BOTTOM;
+ }
+
+ mPipResizeGestureHandler.setCtrlType(ctrlType);
+ }
+
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipPinchToResizeHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipPinchToResizeHandler.java
new file mode 100644
index 000000000000..1e41af379864
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipPinchToResizeHandler.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.wm.shell.pip2.phone;
+
+import android.graphics.Point;
+import android.graphics.PointF;
+import android.graphics.Rect;
+import android.view.MotionEvent;
+
+import com.android.wm.shell.common.pip.PipBoundsState;
+import com.android.wm.shell.common.pip.PipPinchResizingAlgorithm;
+
+/** Helper for handling pinch-to-resize gestures. */
+public class PipPinchToResizeHandler {
+ private final PipResizeGestureHandler mPipResizeGestureHandler;
+ private final PipBoundsState mPipBoundsState;
+ private final PhonePipMenuController mPhonePipMenuController;
+ private final PipScheduler mPipScheduler;
+ private final PipPinchResizingAlgorithm mPinchResizingAlgorithm;
+
+ private int mFirstIndex = -1;
+ private int mSecondIndex = -1;
+
+ public PipPinchToResizeHandler(PipResizeGestureHandler pipResizeGestureHandler,
+ PipBoundsState pipBoundsState, PhonePipMenuController phonePipMenuController,
+ PipScheduler pipScheduler) {
+ mPipResizeGestureHandler = pipResizeGestureHandler;
+ mPipBoundsState = pipBoundsState;
+ mPhonePipMenuController = phonePipMenuController;
+ mPipScheduler = pipScheduler;
+
+ mPinchResizingAlgorithm = new PipPinchResizingAlgorithm();
+ }
+
+ /** Invoked by {@link PipResizeGestureHandler#onInputEvent} if pinch-to-resize is enabled. */
+ void onPinchResize(MotionEvent ev, PointF downPoint, PointF downSecondPoint, Rect downBounds,
+ PointF lastPoint, PointF lastSecondPoint, Rect lastResizeBounds, float touchSlop,
+ Point minSize, Point maxSize) {
+ int action = ev.getActionMasked();
+
+ if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
+ mFirstIndex = -1;
+ mSecondIndex = -1;
+ mPipResizeGestureHandler.setAllowGesture(false);
+ mPipResizeGestureHandler.finishResize();
+ }
+
+ if (ev.getPointerCount() != 2) {
+ return;
+ }
+
+ final Rect pipBounds = mPipBoundsState.getBounds();
+ if (action == MotionEvent.ACTION_POINTER_DOWN) {
+ if (mFirstIndex == -1 && mSecondIndex == -1
+ && pipBounds.contains((int) ev.getRawX(0), (int) ev.getRawY(0))
+ && pipBounds.contains((int) ev.getRawX(1), (int) ev.getRawY(1))) {
+ mPipResizeGestureHandler.setAllowGesture(true);
+ mFirstIndex = 0;
+ mSecondIndex = 1;
+ downPoint.set(ev.getRawX(mFirstIndex), ev.getRawY(mFirstIndex));
+ downSecondPoint.set(ev.getRawX(mSecondIndex), ev.getRawY(mSecondIndex));
+ downBounds.set(pipBounds);
+
+ lastPoint.set(downPoint);
+ lastSecondPoint.set(lastSecondPoint);
+ lastResizeBounds.set(downBounds);
+
+ // start the high perf session as the second pointer gets detected
+ mPipResizeGestureHandler.startHighPerfSession();
+ }
+ }
+
+ if (action == MotionEvent.ACTION_MOVE) {
+ if (mFirstIndex == -1 || mSecondIndex == -1) {
+ return;
+ }
+
+ float x0 = ev.getRawX(mFirstIndex);
+ float y0 = ev.getRawY(mFirstIndex);
+ float x1 = ev.getRawX(mSecondIndex);
+ float y1 = ev.getRawY(mSecondIndex);
+ lastPoint.set(x0, y0);
+ lastSecondPoint.set(x1, y1);
+
+ // Capture inputs
+ if (!mPipResizeGestureHandler.getThresholdCrossed()
+ && (distanceBetween(downSecondPoint, lastSecondPoint) > touchSlop
+ || distanceBetween(downPoint, lastPoint) > touchSlop)) {
+ mPipResizeGestureHandler.pilferPointers();
+ mPipResizeGestureHandler.setThresholdCrossed(true);
+ // Reset the down to begin resizing from this point
+ downPoint.set(lastPoint);
+ downSecondPoint.set(lastSecondPoint);
+
+ if (mPhonePipMenuController.isMenuVisible()) {
+ mPhonePipMenuController.hideMenu();
+ }
+ }
+
+ if (mPipResizeGestureHandler.getThresholdCrossed()) {
+ final float angle = mPinchResizingAlgorithm.calculateBoundsAndAngle(downPoint,
+ downSecondPoint, lastPoint, lastSecondPoint, minSize, maxSize,
+ downBounds, lastResizeBounds);
+
+ mPipResizeGestureHandler.setAngle(angle);
+ mPipScheduler.scheduleUserResizePip(lastResizeBounds, angle);
+ mPipBoundsState.setHasUserResizedPip(true);
+ }
+ }
+ }
+
+ private float distanceBetween(PointF p1, PointF p2) {
+ return (float) Math.hypot(p2.x - p1.x, p2.y - p1.y);
+ }
+
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipResizeGestureHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipResizeGestureHandler.java
index e4be3f60f86e..b869bf153c34 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipResizeGestureHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipResizeGestureHandler.java
@@ -44,13 +44,14 @@ import com.android.wm.shell.R;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.pip.PipBoundsAlgorithm;
import com.android.wm.shell.common.pip.PipBoundsState;
+import com.android.wm.shell.common.pip.PipDesktopState;
import com.android.wm.shell.common.pip.PipDisplayLayoutState;
import com.android.wm.shell.common.pip.PipPerfHintController;
-import com.android.wm.shell.common.pip.PipPinchResizingAlgorithm;
import com.android.wm.shell.common.pip.PipUiEventLogger;
import com.android.wm.shell.pip2.animation.PipResizeAnimator;
import java.io.PrintWriter;
+import java.util.function.Function;
/**
* Helper on top of PipTouchHandler that handles inputs OUTSIDE of the PIP window, which is used to
@@ -72,8 +73,8 @@ public class PipResizeGestureHandler implements
private final PipTransitionState mPipTransitionState;
private final PhonePipMenuController mPhonePipMenuController;
private final PipDisplayLayoutState mPipDisplayLayoutState;
+ private final PipDesktopState mPipDesktopState;
private final PipUiEventLogger mPipUiEventLogger;
- private final PipPinchResizingAlgorithm mPinchResizingAlgorithm;
private final ShellExecutor mMainExecutor;
private final PointF mDownPoint = new PointF();
@@ -93,16 +94,18 @@ public class PipResizeGestureHandler implements
private boolean mIsAttached;
private boolean mIsEnabled;
private boolean mEnablePinchResize;
+ private boolean mEnableDragCornerResize;
private boolean mIsSysUiStateValid;
private boolean mThresholdCrossed;
private boolean mOngoingPinchToResize = false;
private boolean mWaitingForBoundsChangeTransition = false;
private float mAngle = 0;
- int mFirstIndex = -1;
- int mSecondIndex = -1;
+
private InputMonitor mInputMonitor;
private InputEventReceiver mInputEventReceiver;
+ private PipDragToResizeHandler mPipDragToResizeHandler;
+ private PipPinchToResizeHandler mPipPinchToResizeHandler;
@Nullable
private final PipPerfHintController mPipPerfHintController;
@@ -121,7 +124,9 @@ public class PipResizeGestureHandler implements
PipTransitionState pipTransitionState,
PipUiEventLogger pipUiEventLogger,
PhonePipMenuController menuActivityController,
+ Function<Rect, Rect> movementBoundsSupplier,
PipDisplayLayoutState pipDisplayLayoutState,
+ PipDesktopState pipDesktopState,
ShellExecutor mainExecutor,
@Nullable PipPerfHintController pipPerfHintController) {
mContext = context;
@@ -137,8 +142,13 @@ public class PipResizeGestureHandler implements
mPhonePipMenuController = menuActivityController;
mPipDisplayLayoutState = pipDisplayLayoutState;
+ mPipDesktopState = pipDesktopState;
mPipUiEventLogger = pipUiEventLogger;
- mPinchResizingAlgorithm = new PipPinchResizingAlgorithm();
+
+ mPipDragToResizeHandler = new PipDragToResizeHandler(context, this, pipBoundsState,
+ menuActivityController, pipBoundsAlgorithm, pipScheduler, movementBoundsSupplier);
+ mPipPinchToResizeHandler = new PipPinchToResizeHandler(this, pipBoundsState,
+ menuActivityController, pipScheduler);
}
void init() {
@@ -163,6 +173,7 @@ public class PipResizeGestureHandler implements
}
private void reloadResources() {
+ mPipDragToResizeHandler.reloadResources();
mTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop();
}
@@ -180,6 +191,8 @@ public class PipResizeGestureHandler implements
void onActivityPinned() {
mIsAttached = true;
updateIsEnabled();
+ // Only enable drag-corner-to-resize if PiP was entered when Desktop Mode session is active.
+ mEnableDragCornerResize = mPipDesktopState.isPipInDesktopMode();
}
void onActivityUnpinned() {
@@ -211,9 +224,44 @@ public class PipResizeGestureHandler implements
}
}
+ boolean getAllowGesture() {
+ return mAllowGesture;
+ }
+
+ void setAllowGesture(boolean allowGesture) {
+ mAllowGesture = allowGesture;
+ }
+
+ boolean getThresholdCrossed() {
+ return mThresholdCrossed;
+ }
+
+ void setThresholdCrossed(boolean thresholdCrossed) {
+ mThresholdCrossed = thresholdCrossed;
+ }
+
+ int getCtrlType() {
+ return mCtrlType;
+ }
+
+ void setCtrlType(int ctrlType) {
+ mCtrlType = ctrlType;
+ }
+
+ void setAngle(float angle) {
+ mAngle = angle;
+ }
+
+ void startHighPerfSession() {
+ if (mPipPerfHintController != null) {
+ mPipHighPerfSession = mPipPerfHintController.startSession(
+ this::onHighPerfSessionTimeout, "onPinchResize");
+ }
+ }
+
@VisibleForTesting
void onInputEvent(InputEvent ev) {
- if (!mEnablePinchResize) {
+ if (!mEnableDragCornerResize && !mEnablePinchResize) {
// No need to handle anything if resizing isn't enabled.
return;
}
@@ -240,7 +288,12 @@ public class PipResizeGestureHandler implements
}
if (mOngoingPinchToResize) {
- onPinchResize(mv);
+ mPipPinchToResizeHandler.onPinchResize(mv, mDownPoint, mDownSecondPoint,
+ mDownBounds, mLastPoint, mLastSecondPoint, mLastResizeBounds, mTouchSlop,
+ mMinSize, mMaxSize);
+ } else if (mEnableDragCornerResize) {
+ mPipDragToResizeHandler.onDragCornerResize(mv, mLastResizeBounds, mDownPoint,
+ mDownBounds, mMinSize, mMaxSize, mTouchSlop);
}
}
}
@@ -261,20 +314,31 @@ public class PipResizeGestureHandler implements
}
boolean willStartResizeGesture(MotionEvent ev) {
- if (ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) {
- if (mEnablePinchResize && ev.getPointerCount() == 2) {
- onPinchResize(ev);
- mOngoingPinchToResize = mAllowGesture;
- return mAllowGesture;
- }
+ switch (ev.getActionMasked()) {
+ case MotionEvent.ACTION_DOWN:
+ if (mEnableDragCornerResize && mPipDragToResizeHandler.isWithinDragResizeRegion(
+ (int) ev.getRawX(),
+ (int) ev.getRawY())) {
+ return true;
+ }
+ break;
+
+ case MotionEvent.ACTION_POINTER_DOWN:
+ if (mEnablePinchResize && ev.getPointerCount() == 2) {
+ mPipPinchToResizeHandler.onPinchResize(ev, mDownPoint, mDownSecondPoint,
+ mDownBounds, mLastPoint, mLastSecondPoint, mLastResizeBounds,
+ mTouchSlop, mMinSize, mMaxSize);
+ mOngoingPinchToResize = mAllowGesture;
+ return mAllowGesture;
+ }
+ break;
+
+ default:
+ break;
}
return false;
}
- private boolean isInValidSysUiState() {
- return mIsSysUiStateValid;
- }
-
private void onHighPerfSessionTimeout(PipPerfHintController.PipHighPerfSession session) {}
private void cleanUpHighPerfSessionMaybe() {
@@ -285,83 +349,6 @@ public class PipResizeGestureHandler implements
}
}
- @VisibleForTesting
- void onPinchResize(MotionEvent ev) {
- int action = ev.getActionMasked();
-
- if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
- mFirstIndex = -1;
- mSecondIndex = -1;
- mAllowGesture = false;
- finishResize();
- }
-
- if (ev.getPointerCount() != 2) {
- return;
- }
-
- final Rect pipBounds = mPipBoundsState.getBounds();
- if (action == MotionEvent.ACTION_POINTER_DOWN) {
- if (mFirstIndex == -1 && mSecondIndex == -1
- && pipBounds.contains((int) ev.getRawX(0), (int) ev.getRawY(0))
- && pipBounds.contains((int) ev.getRawX(1), (int) ev.getRawY(1))) {
- mAllowGesture = true;
- mFirstIndex = 0;
- mSecondIndex = 1;
- mDownPoint.set(ev.getRawX(mFirstIndex), ev.getRawY(mFirstIndex));
- mDownSecondPoint.set(ev.getRawX(mSecondIndex), ev.getRawY(mSecondIndex));
- mDownBounds.set(pipBounds);
-
- mLastPoint.set(mDownPoint);
- mLastSecondPoint.set(mLastSecondPoint);
- mLastResizeBounds.set(mDownBounds);
-
- // start the high perf session as the second pointer gets detected
- if (mPipPerfHintController != null) {
- mPipHighPerfSession = mPipPerfHintController.startSession(
- this::onHighPerfSessionTimeout, "onPinchResize");
- }
- }
- }
-
- if (action == MotionEvent.ACTION_MOVE) {
- if (mFirstIndex == -1 || mSecondIndex == -1) {
- return;
- }
-
- float x0 = ev.getRawX(mFirstIndex);
- float y0 = ev.getRawY(mFirstIndex);
- float x1 = ev.getRawX(mSecondIndex);
- float y1 = ev.getRawY(mSecondIndex);
- mLastPoint.set(x0, y0);
- mLastSecondPoint.set(x1, y1);
-
- // Capture inputs
- if (!mThresholdCrossed
- && (distanceBetween(mDownSecondPoint, mLastSecondPoint) > mTouchSlop
- || distanceBetween(mDownPoint, mLastPoint) > mTouchSlop)) {
- pilferPointers();
- mThresholdCrossed = true;
- // Reset the down to begin resizing from this point
- mDownPoint.set(mLastPoint);
- mDownSecondPoint.set(mLastSecondPoint);
-
- if (mPhonePipMenuController.isMenuVisible()) {
- mPhonePipMenuController.hideMenu();
- }
- }
-
- if (mThresholdCrossed) {
- mAngle = mPinchResizingAlgorithm.calculateBoundsAndAngle(mDownPoint,
- mDownSecondPoint, mLastPoint, mLastSecondPoint, mMinSize, mMaxSize,
- mDownBounds, mLastResizeBounds);
-
- mPipScheduler.scheduleUserResizePip(mLastResizeBounds, mAngle);
- mPipBoundsState.setHasUserResizedPip(true);
- }
- }
- }
-
private void snapToMovementBoundsEdge(Rect bounds, Rect movementBounds) {
final int leftEdge = bounds.left;
@@ -404,17 +391,21 @@ public class PipResizeGestureHandler implements
// mPipTaskOrganizer.scheduleFinishResizePip(finalBounds, mUpdateResizeBoundsCallback);
}
- private void finishResize() {
+ /** Handles additional resizing and state changes after gesture resizing is done. */
+ void finishResize() {
if (mLastResizeBounds.isEmpty()) {
resetState();
}
- if (!mOngoingPinchToResize) {
- return;
- }
// Cache initial bounds after release for animation before mLastResizeBounds are modified.
mStartBoundsAfterRelease.set(mLastResizeBounds);
+ // Drag-corner-to-resize - we don't need to adjust the bounds at this point
+ if (!mOngoingPinchToResize) {
+ scheduleBoundsChange();
+ return;
+ }
+
// If user resize is pretty close to max size, just auto resize to max.
if (mLastResizeBounds.width() >= PINCH_RESIZE_AUTO_MAX_RATIO * mMaxSize.x
|| mLastResizeBounds.height() >= PINCH_RESIZE_AUTO_MAX_RATIO * mMaxSize.y) {
@@ -438,6 +429,10 @@ public class PipResizeGestureHandler implements
mLastResizeBounds, movementBounds);
mPipBoundsAlgorithm.applySnapFraction(mLastResizeBounds, snapFraction);
+ scheduleBoundsChange();
+ }
+
+ private void scheduleBoundsChange() {
// Update the transition state to schedule a resize transition.
Bundle extra = new Bundle();
extra.putBoolean(RESIZE_BOUNDS_CHANGE, true);
@@ -489,10 +484,6 @@ public class PipResizeGestureHandler implements
mOhmOffset = offset;
}
- private float distanceBetween(PointF p1, PointF p2) {
- return (float) Math.hypot(p2.x - p1.x, p2.y - p1.y);
- }
-
private void resizeRectAboutCenter(Rect rect, int w, int h) {
int cx = rect.centerX();
int cy = rect.centerY();
@@ -573,6 +564,7 @@ public class PipResizeGestureHandler implements
pw.println(innerPrefix + "mIsAttached=" + mIsAttached);
pw.println(innerPrefix + "mIsEnabled=" + mIsEnabled);
pw.println(innerPrefix + "mEnablePinchResize=" + mEnablePinchResize);
+ pw.println(innerPrefix + "mEnableDragCornerResize=" + mEnableDragCornerResize);
pw.println(innerPrefix + "mThresholdCrossed=" + mThresholdCrossed);
pw.println(innerPrefix + "mOhmOffset=" + mOhmOffset);
pw.println(innerPrefix + "mMinSize=" + mMinSize);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTouchHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTouchHandler.java
index e405f3339054..72346b335a8e 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTouchHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTouchHandler.java
@@ -59,6 +59,7 @@ import com.android.wm.shell.common.FloatingContentCoordinator;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.pip.PipBoundsAlgorithm;
import com.android.wm.shell.common.pip.PipBoundsState;
+import com.android.wm.shell.common.pip.PipDesktopState;
import com.android.wm.shell.common.pip.PipDisplayLayoutState;
import com.android.wm.shell.common.pip.PipDoubleTapHelper;
import com.android.wm.shell.common.pip.PipPerfHintController;
@@ -187,6 +188,7 @@ public class PipTouchHandler implements PipTransitionState.PipTransitionStateCha
@NonNull PipScheduler pipScheduler,
@NonNull SizeSpecSource sizeSpecSource,
@NonNull PipDisplayLayoutState pipDisplayLayoutState,
+ PipDesktopState pipDesktopState,
DisplayController displayController,
PipMotionHelper pipMotionHelper,
FloatingContentCoordinator floatingContentCoordinator,
@@ -226,7 +228,8 @@ public class PipTouchHandler implements PipTransitionState.PipTransitionStateCha
mainExecutor);
mPipResizeGestureHandler = new PipResizeGestureHandler(context, pipBoundsAlgorithm,
pipBoundsState, mTouchState, mPipScheduler, mPipTransitionState, pipUiEventLogger,
- menuController, mPipDisplayLayoutState, mainExecutor, mPipPerfHintController);
+ menuController, this::getMovementBounds, mPipDisplayLayoutState, pipDesktopState,
+ mainExecutor, mPipPerfHintController);
mPipBoundsState.addOnAspectRatioChangedCallback(aspectRatio -> {
updateMinMaxSize(aspectRatio);
onAspectRatioChanged();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/IRecentsAnimationRunner.aidl b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/IRecentsAnimationRunner.aidl
index 8cdb8c4512a9..f8d84e4f3c21 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/IRecentsAnimationRunner.aidl
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/IRecentsAnimationRunner.aidl
@@ -59,11 +59,12 @@ oneway interface IRecentsAnimationRunner {
void onAnimationStart(in IRecentsAnimationController controller,
in RemoteAnimationTarget[] apps, in RemoteAnimationTarget[] wallpapers,
in Rect homeContentInsets, in Rect minimizedHomeBounds, in Bundle extras,
- in TransitionInfo info) = 2;
+ in @nullable TransitionInfo info) = 2;
/**
* Called when the task of an activity that has been started while the recents animation
* was running becomes ready for control.
*/
- void onTasksAppeared(in RemoteAnimationTarget[] app) = 3;
+ void onTasksAppeared(in RemoteAnimationTarget[] app,
+ in @nullable TransitionInfo transitionInfo) = 3;
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java
index 7751741ae082..a969845fb8e8 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java
@@ -1214,13 +1214,16 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
// Since we're accepting the merge, update the finish transaction so that changes via
// that transaction will be applied on top of those of the merged transitions
mFinishTransaction = finishT;
- // not using the incoming anim-only surfaces
- info.releaseAnimSurfaces();
+ boolean passTransitionInfo = ENABLE_DESKTOP_RECENTS_TRANSITIONS_CORNERS_BUGFIX.isTrue();
+ if (!passTransitionInfo) {
+ // not using the incoming anim-only surfaces
+ info.releaseAnimSurfaces();
+ }
if (appearedTargets != null) {
try {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
"[%d] RecentsController.merge: calling onTasksAppeared", mInstanceId);
- mListener.onTasksAppeared(appearedTargets);
+ mListener.onTasksAppeared(appearedTargets, passTransitionInfo ? info : null);
} catch (RemoteException e) {
Slog.e(TAG, "Error sending appeared tasks to recents animation", e);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
index e9f8a4a86d27..ba30d924e0b1 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
@@ -638,6 +638,14 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
}
/**
+ * Starts an existing task via StageCoordinator.
+ */
+ public void startTask(int taskId, @SplitPosition int position, @Nullable Bundle options,
+ @Nullable WindowContainerToken hideTaskToken, @SplitIndex int index) {
+ mStageCoordinator.startTask(taskId, position, options, hideTaskToken, index);
+ }
+
+ /**
* See {@link #startShortcut(String, String, int, Bundle, UserHandle)}
* @param instanceId to be used by {@link SplitscreenEventLogger}
*/
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java
index deb8839bd319..e28a7fa159c5 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/Transitions.java
@@ -197,6 +197,9 @@ public class Transitions implements RemoteCallable<Transitions>,
/** Transition type for app compat reachability. */
public static final int TRANSIT_MOVE_LETTERBOX_REACHABILITY = TRANSIT_FIRST_CUSTOM + 23;
+ /** Transition type for converting a task to a bubble. */
+ public static final int TRANSIT_CONVERT_TO_BUBBLE = TRANSIT_FIRST_CUSTOM + 24;
+
/** Transition type for desktop mode transitions. */
public static final int TRANSIT_DESKTOP_MODE_TYPES =
WindowManager.TRANSIT_FIRST_CUSTOM + 100;
@@ -1869,6 +1872,7 @@ public class Transitions implements RemoteCallable<Transitions>,
case TRANSIT_MINIMIZE -> "MINIMIZE";
case TRANSIT_START_RECENTS_TRANSITION -> "START_RECENTS_TRANSITION";
case TRANSIT_END_RECENTS_TRANSITION -> "END_RECENTS_TRANSITION";
+ case TRANSIT_CONVERT_TO_BUBBLE -> "CONVERT_TO_BUBBLE";
default -> "";
};
if (typeStr.isEmpty()) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleImageButton.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleImageButton.kt
index b21c3f522eab..458815d19658 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleImageButton.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/HandleImageButton.kt
@@ -17,9 +17,12 @@
package com.android.wm.shell.windowdecor
import android.animation.ValueAnimator
+import android.annotation.DimenRes
+import android.content.res.Resources;
import android.content.Context
import android.util.AttributeSet
import android.widget.ImageButton
+import com.android.wm.shell.R
/**
* [ImageButton] for the handle at the top of fullscreen apps. Has custom hover
@@ -30,13 +33,23 @@ class HandleImageButton (context: Context?, attrs: AttributeSet?) :
ImageButton(context, attrs) {
private val handleAnimator = ValueAnimator()
+ /** Final horizontal padding for hover enter. **/
+ private val HANDLE_HOVER_ENTER_PADDING = loadDimensionPixelSize(
+ R.dimen.desktop_mode_fullscreen_decor_caption_horizontal_padding_hovered)
+ /** Final horizontal padding for press down. **/
+ private val HANDLE_PRESS_DOWN_PADDING = loadDimensionPixelSize(
+ R.dimen.desktop_mode_fullscreen_decor_caption_horizontal_padding_touched)
+ /** Default horizontal padding. **/
+ private val HANDLE_DEFAULT_PADDING = loadDimensionPixelSize(
+ R.dimen.desktop_mode_fullscreen_decor_caption_horizontal_padding_default)
+
override fun onHoverChanged(hovered: Boolean) {
super.onHoverChanged(hovered)
if (hovered) {
- animateHandle(HANDLE_HOVER_ANIM_DURATION, HANDLE_HOVER_ENTER_SCALE)
+ animateHandle(HANDLE_HOVER_ANIM_DURATION, HANDLE_HOVER_ENTER_PADDING)
} else {
if (!isPressed) {
- animateHandle(HANDLE_HOVER_ANIM_DURATION, HANDLE_DEFAULT_SCALE)
+ animateHandle(HANDLE_HOVER_ANIM_DURATION, HANDLE_DEFAULT_PADDING)
}
}
}
@@ -45,35 +58,37 @@ class HandleImageButton (context: Context?, attrs: AttributeSet?) :
if (isPressed != pressed) {
super.setPressed(pressed)
if (pressed) {
- animateHandle(HANDLE_PRESS_ANIM_DURATION, HANDLE_PRESS_DOWN_SCALE)
+ animateHandle(HANDLE_PRESS_ANIM_DURATION, HANDLE_PRESS_DOWN_PADDING)
} else {
- animateHandle(HANDLE_PRESS_ANIM_DURATION, HANDLE_DEFAULT_SCALE)
+ animateHandle(HANDLE_PRESS_ANIM_DURATION, HANDLE_DEFAULT_PADDING)
}
}
}
- private fun animateHandle(duration: Long, endScale: Float) {
+ private fun animateHandle(duration: Long, endPadding: Int) {
if (handleAnimator.isRunning) {
handleAnimator.cancel()
}
handleAnimator.duration = duration
- handleAnimator.setFloatValues(scaleX, endScale)
+ handleAnimator.setIntValues(paddingLeft, endPadding)
handleAnimator.addUpdateListener { animator ->
- scaleX = animator.animatedValue as Float
+ val padding = animator.animatedValue as Int
+ setPadding(padding, paddingTop, padding, paddingBottom)
}
handleAnimator.start()
}
+ private fun loadDimensionPixelSize(@DimenRes resourceId: Int): Int {
+ if (resourceId == Resources.ID_NULL) {
+ return 0
+ }
+ return context.resources.getDimensionPixelSize(resourceId)
+ }
+
companion object {
/** The duration of animations related to hover state. **/
private const val HANDLE_HOVER_ANIM_DURATION = 300L
/** The duration of animations related to pressed state. **/
private const val HANDLE_PRESS_ANIM_DURATION = 200L
- /** Ending scale for hover enter. **/
- private const val HANDLE_HOVER_ENTER_SCALE = 1.2f
- /** Ending scale for press down. **/
- private const val HANDLE_PRESS_DOWN_SCALE = 0.85f
- /** Default scale for handle. **/
- private const val HANDLE_DEFAULT_SCALE = 1f
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt
index a9c2e68e62a6..bb20292a51d4 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt
@@ -237,8 +237,12 @@ class MultiDisplayVeiledResizeTaskPositioner(
val startDisplayLayout = displayController.getDisplayLayout(startDisplayId)
val currentDisplayLayout = displayController.getDisplayLayout(displayId)
- if (startDisplayLayout == null || currentDisplayLayout == null) {
- // Fall back to single-display drag behavior if any display layout is unavailable.
+ if (startDisplayId == displayId
+ || startDisplayLayout == null || currentDisplayLayout == null) {
+ // Fall back to single-display drag behavior if:
+ // 1. The drag destination display is the same as the start display. This prevents
+ // unnecessary animations caused by minor width/height changes due to DPI scaling.
+ // 2. Either the starting or current display layout is unavailable.
DragPositioningCallbackUtility.updateTaskBounds(
repositionTaskBounds,
taskBoundsAtDragStart,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
index 76005c22972a..25dadfde274d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
@@ -911,7 +911,6 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
}
}
- @VisibleForTesting
public interface SurfaceControlViewHostFactory {
default SurfaceControlViewHost create(Context c, Display d, WindowlessWindowManager wmm) {
return new SurfaceControlViewHost(c, d, wmm, "WindowDecoration");
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleTransitionsTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleTransitionsTest.java
index 4198f5904566..87ee4f58bfdd 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleTransitionsTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/bubbles/BubbleTransitionsTest.java
@@ -17,6 +17,10 @@ package com.android.wm.shell.bubbles;
import static android.view.WindowManager.TRANSIT_CHANGE;
+import static com.android.wm.shell.transition.Transitions.TRANSIT_CONVERT_TO_BUBBLE;
+
+import static com.google.common.truth.Truth.assertThat;
+
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
@@ -31,12 +35,14 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.ActivityManager;
+import android.graphics.Rect;
import android.os.IBinder;
import android.view.SurfaceControl;
import android.view.ViewRootImpl;
import android.window.IWindowContainerToken;
import android.window.TransitionInfo;
import android.window.WindowContainerToken;
+import android.window.WindowContainerTransaction;
import androidx.test.filters.SmallTest;
@@ -65,6 +71,10 @@ import org.mockito.MockitoAnnotations;
*/
@SmallTest
public class BubbleTransitionsTest extends ShellTestCase {
+
+ private static final int FULLSCREEN_TASK_WIDTH = 200;
+ private static final int FULLSCREEN_TASK_HEIGHT = 100;
+
@Mock
private BubbleData mBubbleData;
@Mock
@@ -117,10 +127,7 @@ public class BubbleTransitionsTest extends ShellTestCase {
private ActivityManager.RunningTaskInfo setupBubble() {
ActivityManager.RunningTaskInfo taskInfo = new ActivityManager.RunningTaskInfo();
- final IWindowContainerToken itoken = mock(IWindowContainerToken.class);
- final IBinder asBinder = mock(IBinder.class);
- when(itoken.asBinder()).thenReturn(asBinder);
- WindowContainerToken token = new WindowContainerToken(itoken);
+ WindowContainerToken token = createMockToken();
taskInfo.token = token;
final TaskView tv = mock(TaskView.class);
final TaskViewTaskController tvtc = mock(TaskViewTaskController.class);
@@ -131,13 +138,32 @@ public class BubbleTransitionsTest extends ShellTestCase {
return taskInfo;
}
+ private TransitionInfo setupFullscreenTaskTransition(ActivityManager.RunningTaskInfo taskInfo) {
+ final TransitionInfo info = new TransitionInfo(TRANSIT_CONVERT_TO_BUBBLE, 0);
+ final TransitionInfo.Change chg = new TransitionInfo.Change(taskInfo.token,
+ mock(SurfaceControl.class));
+ chg.setTaskInfo(taskInfo);
+ chg.setMode(TRANSIT_CHANGE);
+ chg.setStartAbsBounds(new Rect(0, 0, FULLSCREEN_TASK_WIDTH, FULLSCREEN_TASK_HEIGHT));
+ info.addChange(chg);
+ info.addRoot(new TransitionInfo.Root(0, mock(SurfaceControl.class), 0, 0));
+ return info;
+ }
+
+ private WindowContainerToken createMockToken() {
+ final IWindowContainerToken itoken = mock(IWindowContainerToken.class);
+ final IBinder asBinder = mock(IBinder.class);
+ when(itoken.asBinder()).thenReturn(asBinder);
+ return new WindowContainerToken(itoken);
+ }
+
@Test
public void testConvertToBubble() {
// Basic walk-through of convert-to-bubble transition stages
ActivityManager.RunningTaskInfo taskInfo = setupBubble();
final BubbleTransitions.BubbleTransition bt = mBubbleTransitions.startConvertToBubble(
mBubble, taskInfo, mExpandedViewManager, mTaskViewFactory, mBubblePositioner,
- mStackView, mLayerView, mIconFactory, false);
+ mStackView, mLayerView, mIconFactory, null, false);
final BubbleTransitions.ConvertToBubble ctb = (BubbleTransitions.ConvertToBubble) bt;
ctb.onInflated(mBubble);
when(mLayerView.canExpandView(any())).thenReturn(true);
@@ -146,13 +172,7 @@ public class BubbleTransitionsTest extends ShellTestCase {
// Ensure we are communicating with the taskviewtransitions queue
assertTrue(mTaskViewTransitions.hasPending());
- final TransitionInfo info = new TransitionInfo(TRANSIT_CHANGE, 0);
- final TransitionInfo.Change chg = new TransitionInfo.Change(taskInfo.token,
- mock(SurfaceControl.class));
- chg.setTaskInfo(taskInfo);
- chg.setMode(TRANSIT_CHANGE);
- info.addChange(chg);
- info.addRoot(new TransitionInfo.Root(0, mock(SurfaceControl.class), 0, 0));
+ final TransitionInfo info = setupFullscreenTaskTransition(taskInfo);
SurfaceControl.Transaction startT = mock(SurfaceControl.Transaction.class);
SurfaceControl.Transaction finishT = mock(SurfaceControl.Transaction.class);
final boolean[] finishCalled = new boolean[]{false};
@@ -163,22 +183,69 @@ public class BubbleTransitionsTest extends ShellTestCase {
ctb.startAnimation(ctb.mTransition, info, startT, finishT, finishCb);
assertFalse(mTaskViewTransitions.hasPending());
+ verify(startT).setPosition(any(), eq(0f), eq(0f));
+
verify(mBubbleData).notificationEntryUpdated(eq(mBubble), anyBoolean(), anyBoolean());
- ctb.continueExpand();
clearInvocations(mBubble);
verify(mBubble, never()).setPreparingTransition(any());
ctb.surfaceCreated();
- verify(mBubble).setPreparingTransition(isNull());
+ // Check that preparing transition is not reset before continueExpand is called
+ verify(mBubble, never()).setPreparingTransition(any());
ArgumentCaptor<Runnable> animCb = ArgumentCaptor.forClass(Runnable.class);
verify(mLayerView).animateConvert(any(), any(), any(), any(), animCb.capture());
+
+ // continueExpand is now called, check that preparing transition is cleared
+ ctb.continueExpand();
+ verify(mBubble).setPreparingTransition(isNull());
+
assertFalse(finishCalled[0]);
animCb.getValue().run();
assertTrue(finishCalled[0]);
}
@Test
+ public void testConvertToBubble_drag() {
+ ActivityManager.RunningTaskInfo taskInfo = setupBubble();
+
+ Rect draggedTaskBounds = new Rect(10, 20, 30, 40);
+ WindowContainerTransaction pendingWct = new WindowContainerTransaction();
+ WindowContainerToken pendingDragOpToken = createMockToken();
+ pendingWct.reorder(pendingDragOpToken, /* onTop= */ false);
+
+ BubbleTransitions.DragData dragData = new BubbleTransitions.DragData(
+ draggedTaskBounds, pendingWct
+ );
+
+ final BubbleTransitions.BubbleTransition bt = mBubbleTransitions.startConvertToBubble(
+ mBubble, taskInfo, mExpandedViewManager, mTaskViewFactory, mBubblePositioner,
+ mStackView, mLayerView, mIconFactory, dragData, false);
+ final BubbleTransitions.ConvertToBubble ctb = (BubbleTransitions.ConvertToBubble) bt;
+
+ ArgumentCaptor<WindowContainerTransaction> wctCaptor = ArgumentCaptor.forClass(
+ WindowContainerTransaction.class);
+ ctb.onInflated(mBubble);
+ verify(mTransitions).startTransition(anyInt(), wctCaptor.capture(), eq(ctb));
+
+ // Verify that the WCT has the pending operation from drag data
+ WindowContainerTransaction transitionWct = wctCaptor.getValue();
+ assertThat(transitionWct.getHierarchyOps().stream().anyMatch(op -> op.getType()
+ == WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_REORDER
+ && op.getContainer() == pendingDragOpToken.asBinder())).isTrue();
+
+ final TransitionInfo info = setupFullscreenTaskTransition(taskInfo);
+ SurfaceControl.Transaction startT = mock(SurfaceControl.Transaction.class);
+ SurfaceControl.Transaction finishT = mock(SurfaceControl.Transaction.class);
+ Transitions.TransitionFinishCallback finishCb = wct -> {};
+ ctb.startAnimation(ctb.mTransition, info, startT, finishT, finishCb);
+
+ // Verify that dragged task bounds are used for the position
+ verify(startT).setPosition(any(), eq((float) draggedTaskBounds.left),
+ eq((float) draggedTaskBounds.top));
+ }
+
+ @Test
public void testConvertFromBubble() {
ActivityManager.RunningTaskInfo taskInfo = setupBubble();
final BubbleTransitions.BubbleTransition bt = mBubbleTransitions.startConvertFromBubble(
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeVisualIndicatorTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeVisualIndicatorTest.kt
index 8f45cf4d08fc..20d50aa32f7f 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeVisualIndicatorTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeVisualIndicatorTest.kt
@@ -23,6 +23,7 @@ import android.graphics.Rect
import android.platform.test.annotations.EnableFlags
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper.RunWithLooper
+import android.view.Display
import android.view.SurfaceControl
import androidx.test.filters.SmallTest
import com.android.internal.policy.SystemBarUtils
@@ -30,6 +31,7 @@ import com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE
import com.android.wm.shell.R
import com.android.wm.shell.RootTaskDisplayAreaOrganizer
import com.android.wm.shell.ShellTestCase
+import com.android.wm.shell.TestShellExecutor
import com.android.wm.shell.common.DisplayController
import com.android.wm.shell.common.DisplayLayout
import com.android.wm.shell.common.SyncTransactionQueue
@@ -60,18 +62,22 @@ class DesktopModeVisualIndicatorTest : ShellTestCase() {
private lateinit var taskInfo: RunningTaskInfo
@Mock private lateinit var syncQueue: SyncTransactionQueue
@Mock private lateinit var displayController: DisplayController
+ @Mock private lateinit var display: Display
@Mock private lateinit var taskSurface: SurfaceControl
@Mock private lateinit var taskDisplayAreaOrganizer: RootTaskDisplayAreaOrganizer
@Mock private lateinit var displayLayout: DisplayLayout
@Mock private lateinit var bubbleBoundsProvider: BubbleDropTargetBoundsProvider
private lateinit var visualIndicator: DesktopModeVisualIndicator
+ private val desktopExecutor = TestShellExecutor()
+ private val mainExecutor = TestShellExecutor()
@Before
fun setUp() {
whenever(displayLayout.width()).thenReturn(DISPLAY_BOUNDS.width())
whenever(displayLayout.height()).thenReturn(DISPLAY_BOUNDS.height())
whenever(displayLayout.stableInsets()).thenReturn(STABLE_INSETS)
+ whenever(displayController.getDisplay(anyInt())).thenReturn(display)
whenever(displayController.getDisplayLayout(anyInt())).thenReturn(displayLayout)
whenever(displayController.getDisplay(anyInt())).thenReturn(mContext.display)
whenever(bubbleBoundsProvider.getBubbleBarExpandedViewDropTargetBounds(any()))
@@ -305,7 +311,11 @@ class DesktopModeVisualIndicatorTest : ShellTestCase() {
whenever(bubbleBoundsProvider.getBubbleBarExpandedViewDropTargetBounds(/* onLeft= */ true))
.thenReturn(dropTargetBounds)
createVisualIndicator(DesktopModeVisualIndicator.DragStartState.FROM_FULLSCREEN)
+ desktopExecutor.flushAll()
+ mainExecutor.flushAll()
visualIndicator.updateIndicatorType(PointF(100f, 1500f))
+ desktopExecutor.flushAll()
+ mainExecutor.flushAll()
animatorTestRule.advanceTimeBy(200)
@@ -322,7 +332,11 @@ class DesktopModeVisualIndicatorTest : ShellTestCase() {
whenever(bubbleBoundsProvider.getBubbleBarExpandedViewDropTargetBounds(/* onLeft= */ false))
.thenReturn(dropTargetBounds)
createVisualIndicator(DesktopModeVisualIndicator.DragStartState.FROM_FULLSCREEN)
+ desktopExecutor.flushAll()
+ mainExecutor.flushAll()
visualIndicator.updateIndicatorType(PointF(2300f, 1500f))
+ desktopExecutor.flushAll()
+ mainExecutor.flushAll()
animatorTestRule.advanceTimeBy(200)
@@ -332,6 +346,8 @@ class DesktopModeVisualIndicatorTest : ShellTestCase() {
private fun createVisualIndicator(dragStartState: DesktopModeVisualIndicator.DragStartState) {
visualIndicator =
DesktopModeVisualIndicator(
+ desktopExecutor,
+ mainExecutor,
syncQueue,
taskInfo,
displayController,
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
index be53272185b6..3ee9501dd8dd 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
@@ -29,6 +29,7 @@ import android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN
import android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW
import android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED
import android.content.ComponentName
+import android.content.Context
import android.content.Intent
import android.content.pm.ActivityInfo
import android.content.pm.ActivityInfo.CONFIG_DENSITY
@@ -52,6 +53,7 @@ import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.FlagsParameterization
import android.testing.TestableContext
+import android.view.Display
import android.view.Display.DEFAULT_DISPLAY
import android.view.DragEvent
import android.view.Gravity
@@ -210,6 +212,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
@Mock lateinit var shellController: ShellController
@Mock lateinit var displayController: DisplayController
@Mock lateinit var displayLayout: DisplayLayout
+ @Mock lateinit var display: Display
@Mock lateinit var shellTaskOrganizer: ShellTaskOrganizer
@Mock lateinit var syncQueue: SyncTransactionQueue
@Mock lateinit var rootTaskDisplayAreaOrganizer: RootTaskDisplayAreaOrganizer
@@ -258,6 +261,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
@Mock private lateinit var userProfileContexts: UserProfileContexts
@Mock private lateinit var desksTransitionsObserver: DesksTransitionObserver
@Mock private lateinit var packageManager: PackageManager
+ @Mock private lateinit var mockDisplayContext: Context
private lateinit var controller: DesktopTasksController
private lateinit var shellInit: ShellInit
@@ -270,6 +274,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
private lateinit var spyContext: TestableContext
private val shellExecutor = TestShellExecutor()
+ private val bgExecutor = TestShellExecutor()
// Mock running tasks are registered here so we can get the list from mock shell task organizer
private val runningTasks = mutableListOf<RunningTaskInfo>()
@@ -326,6 +331,8 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
whenever(transitions.startTransition(anyInt(), any(), isNull())).thenAnswer { Binder() }
whenever(enterDesktopTransitionHandler.moveToDesktop(any(), any())).thenAnswer { Binder() }
whenever(displayController.getDisplayLayout(anyInt())).thenReturn(displayLayout)
+ whenever(displayController.getDisplayContext(anyInt())).thenReturn(mockDisplayContext)
+ whenever(displayController.getDisplay(anyInt())).thenReturn(display)
whenever(displayLayout.getStableBounds(any())).thenAnswer { i ->
(i.arguments.first() as Rect).set(STABLE_BOUNDS)
}
@@ -408,6 +415,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
recentsTransitionHandler,
multiInstanceHelper,
shellExecutor,
+ bgExecutor,
Optional.of(desktopTasksLimiter),
recentTasksController,
mockInteractionJankMonitor,
@@ -4857,7 +4865,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
val optionsCaptor = argumentCaptor<Bundle>()
runOpenInstance(task, taskToRequest.taskId)
verify(splitScreenController)
- .startTask(anyInt(), anyInt(), optionsCaptor.capture(), anyOrNull())
+ .startTask(anyInt(), anyInt(), optionsCaptor.capture(), anyOrNull(), any())
assertThat(ActivityOptions.fromBundle(optionsCaptor.firstValue).launchWindowingMode)
.isEqualTo(WINDOWING_MODE_MULTI_WINDOW)
}
@@ -4871,7 +4879,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
val optionsCaptor = argumentCaptor<Bundle>()
runOpenInstance(task, taskToRequest.taskId)
verify(splitScreenController)
- .startTask(anyInt(), anyInt(), optionsCaptor.capture(), anyOrNull())
+ .startTask(anyInt(), anyInt(), optionsCaptor.capture(), anyOrNull(), any())
assertThat(ActivityOptions.fromBundle(optionsCaptor.firstValue).launchWindowingMode)
.isEqualTo(WINDOWING_MODE_MULTI_WINDOW)
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt
index 1732875f1d57..ba26d1df94f6 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt
@@ -25,6 +25,8 @@ import com.android.internal.jank.InteractionJankMonitor
import com.android.wm.shell.RootTaskDisplayAreaOrganizer
import com.android.wm.shell.ShellTestCase
import com.android.wm.shell.TestRunningTaskInfoBuilder
+import com.android.wm.shell.bubbles.BubbleController
+import com.android.wm.shell.bubbles.BubbleTransitions
import com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.TRANSIT_DESKTOP_MODE_CANCEL_DRAG_TO_DESKTOP
import com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.TRANSIT_DESKTOP_MODE_END_DRAG_TO_DESKTOP
import com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.TRANSIT_DESKTOP_MODE_START_DRAG_TO_DESKTOP
@@ -34,6 +36,7 @@ import com.android.wm.shell.shared.split.SplitScreenConstants.SPLIT_POSITION_TOP
import com.android.wm.shell.splitscreen.SplitScreenController
import com.android.wm.shell.transition.Transitions
import com.android.wm.shell.windowdecor.MoveToDesktopAnimator
+import java.util.Optional
import java.util.function.Supplier
import junit.framework.Assert.assertEquals
import junit.framework.Assert.assertFalse
@@ -71,6 +74,7 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() {
@Mock private lateinit var draggedTaskLeash: SurfaceControl
@Mock private lateinit var homeTaskLeash: SurfaceControl
@Mock private lateinit var desktopUserRepositories: DesktopUserRepositories
+ @Mock private lateinit var bubbleController: BubbleController
private val transactionSupplier = Supplier { mock<SurfaceControl.Transaction>() }
@@ -87,6 +91,7 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() {
taskDisplayAreaOrganizer,
desktopUserRepositories,
mockInteractionJankMonitor,
+ Optional.of(bubbleController),
transactionSupplier,
)
.apply { setSplitScreenController(splitScreenController) }
@@ -97,6 +102,7 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() {
taskDisplayAreaOrganizer,
desktopUserRepositories,
mockInteractionJankMonitor,
+ Optional.of(bubbleController),
transactionSupplier,
)
.apply { setSplitScreenController(splitScreenController) }
@@ -169,6 +175,30 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() {
}
@Test
+ fun startDragToDesktop_cancelledBeforeReady_verifyBubbleLeftCancel() {
+ performEarlyCancel(
+ defaultHandler,
+ DragToDesktopTransitionHandler.CancelState.CANCEL_BUBBLE_LEFT,
+ )
+ verify(bubbleController).expandStackAndSelectBubble(
+ any<RunningTaskInfo>(),
+ any<BubbleTransitions.DragData>()
+ )
+ }
+
+ @Test
+ fun startDragToDesktop_cancelledBeforeReady_verifyBubbleRightCancel() {
+ performEarlyCancel(
+ defaultHandler,
+ DragToDesktopTransitionHandler.CancelState.CANCEL_BUBBLE_RIGHT,
+ )
+ verify(bubbleController).expandStackAndSelectBubble(
+ any<RunningTaskInfo>(),
+ any<BubbleTransitions.DragData>()
+ )
+ }
+
+ @Test
fun startDragToDesktop_aborted_finishDropped() {
val task = createTask()
// Simulate transition is started.
@@ -343,6 +373,38 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() {
}
@Test
+ fun cancelDragToDesktop_bubbleLeftCancelType_bubbleRequested() {
+ startDrag(defaultHandler)
+
+ // Then user cancelled it, requesting bubble.
+ defaultHandler.cancelDragToDesktopTransition(
+ DragToDesktopTransitionHandler.CancelState.CANCEL_BUBBLE_LEFT
+ )
+
+ // Verify the request went through bubble controller.
+ verify(bubbleController).expandStackAndSelectBubble(
+ any<RunningTaskInfo>(),
+ any<BubbleTransitions.DragData>()
+ )
+ }
+
+ @Test
+ fun cancelDragToDesktop_bubbleRightCancelType_bubbleRequested() {
+ startDrag(defaultHandler)
+
+ // Then user cancelled it, requesting bubble.
+ defaultHandler.cancelDragToDesktopTransition(
+ DragToDesktopTransitionHandler.CancelState.CANCEL_BUBBLE_RIGHT
+ )
+
+ // Verify the request went through bubble controller.
+ verify(bubbleController).expandStackAndSelectBubble(
+ any<RunningTaskInfo>(),
+ any<BubbleTransitions.DragData>()
+ )
+ }
+
+ @Test
fun cancelDragToDesktop_startWasNotReady_animateCancel() {
val task = createTask()
// Simulate transition is started and is ready to animate.
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/VisualIndicatorViewContainerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/VisualIndicatorViewContainerTest.kt
new file mode 100644
index 000000000000..79b0f1c7eadd
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/VisualIndicatorViewContainerTest.kt
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.wm.shell.desktopmode
+
+import android.app.ActivityManager
+import android.app.ActivityManager.RunningTaskInfo
+import android.graphics.Rect
+import android.graphics.drawable.Drawable
+import android.graphics.drawable.LayerDrawable
+import android.platform.test.annotations.EnableFlags
+import android.testing.AndroidTestingRunner
+import android.testing.TestableLooper.RunWithLooper
+import android.view.Display
+import android.view.SurfaceControl
+import android.view.SurfaceControlViewHost
+import android.view.View
+import androidx.test.filters.SmallTest
+import com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE
+import com.android.wm.shell.ShellTestCase
+import com.android.wm.shell.TestRunningTaskInfoBuilder
+import com.android.wm.shell.TestShellExecutor
+import com.android.wm.shell.common.DisplayController
+import com.android.wm.shell.common.DisplayLayout
+import com.android.wm.shell.common.SyncTransactionQueue
+import com.android.wm.shell.shared.bubbles.BubbleDropTargetBoundsProvider
+import com.android.wm.shell.windowdecor.WindowDecoration.SurfaceControlViewHostFactory
+import com.google.common.truth.Truth.assertThat
+import kotlin.test.Test
+import org.junit.Before
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.Mock
+import org.mockito.Mockito.mock
+import org.mockito.kotlin.any
+import org.mockito.kotlin.anyOrNull
+import org.mockito.kotlin.eq
+import org.mockito.kotlin.spy
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.verifyZeroInteractions
+import org.mockito.kotlin.whenever
+
+/**
+ * Test class for [VisualIndicatorViewContainer] and [VisualIndicatorAnimator]
+ *
+ * Usage: atest WMShellUnitTests:VisualIndicatorViewContainerTest
+ */
+@SmallTest
+@RunWithLooper
+@RunWith(AndroidTestingRunner::class)
+@EnableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
+class VisualIndicatorViewContainerTest : ShellTestCase() {
+ @Mock private lateinit var view: View
+ @Mock private lateinit var displayLayout: DisplayLayout
+ @Mock private lateinit var displayController: DisplayController
+ @Mock private lateinit var taskSurface: SurfaceControl
+ @Mock private lateinit var syncQueue: SyncTransactionQueue
+ @Mock private lateinit var mockSurfaceControlViewHostFactory: SurfaceControlViewHostFactory
+ @Mock private lateinit var mockBackground: LayerDrawable
+ @Mock private lateinit var bubbleDropTargetBoundsProvider: BubbleDropTargetBoundsProvider
+ private val taskInfo: RunningTaskInfo = createTaskInfo()
+ private val mainExecutor = TestShellExecutor()
+ private val desktopExecutor = TestShellExecutor()
+
+ @Before
+ fun setUp() {
+ whenever(displayController.getDisplayLayout(anyInt())).thenReturn(displayLayout)
+ whenever(displayLayout.getStableBounds(any())).thenAnswer { i ->
+ (i.arguments.first() as Rect).set(DISPLAY_BOUNDS)
+ }
+ whenever(mockSurfaceControlViewHostFactory.create(any(), any(), any()))
+ .thenReturn(mock(SurfaceControlViewHost::class.java))
+ }
+
+ @Test
+ fun testTransitionIndicator_sameTypeReturnsEarly() {
+ val spyViewContainer = setupSpyViewContainer()
+ // Test early return on startType == endType.
+ spyViewContainer.transitionIndicator(
+ taskInfo,
+ displayController,
+ DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR,
+ DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR,
+ )
+ desktopExecutor.flushAll()
+ verify(spyViewContainer)
+ .transitionIndicator(
+ eq(taskInfo),
+ eq(displayController),
+ eq(DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR),
+ eq(DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR),
+ )
+ // Assert fadeIn, fadeOut, and animateIndicatorType were not called.
+ verifyZeroInteractions(spyViewContainer)
+ }
+
+ @Test
+ fun testTransitionIndicator_firstTypeNoIndicator_callsFadeIn() {
+ val spyViewContainer = setupSpyViewContainer()
+ spyViewContainer.transitionIndicator(
+ taskInfo,
+ displayController,
+ DesktopModeVisualIndicator.IndicatorType.NO_INDICATOR,
+ DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR,
+ )
+ desktopExecutor.flushAll()
+ verify(spyViewContainer).fadeInIndicator(any(), any())
+ }
+
+ @Test
+ fun testTransitionIndicator_secondTypeNoIndicator_callsFadeOut() {
+ val spyViewContainer = setupSpyViewContainer()
+ spyViewContainer.transitionIndicator(
+ taskInfo,
+ displayController,
+ DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR,
+ DesktopModeVisualIndicator.IndicatorType.NO_INDICATOR,
+ )
+ desktopExecutor.flushAll()
+ verify(spyViewContainer)
+ .fadeOutIndicator(
+ any(),
+ eq(DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR),
+ anyOrNull(),
+ )
+ }
+
+ @Test
+ fun testTransitionIndicator_differentTypes_callsTransitionIndicator() {
+ val spyViewContainer = setupSpyViewContainer()
+ spyViewContainer.transitionIndicator(
+ taskInfo,
+ displayController,
+ DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR,
+ DesktopModeVisualIndicator.IndicatorType.TO_SPLIT_LEFT_INDICATOR,
+ )
+ desktopExecutor.flushAll()
+ verify(spyViewContainer)
+ .transitionIndicator(
+ any(),
+ any(),
+ eq(DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR),
+ eq(DesktopModeVisualIndicator.IndicatorType.TO_SPLIT_LEFT_INDICATOR),
+ )
+ }
+
+ @Test
+ fun testFadeInBoundsCalculation() {
+ val spyIndicator = setupSpyViewContainer()
+ val animator =
+ spyIndicator.indicatorView?.let {
+ VisualIndicatorViewContainer.VisualIndicatorAnimator.fadeBoundsIn(
+ it,
+ DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR,
+ displayLayout,
+ bubbleDropTargetBoundsProvider,
+ )
+ }
+ assertThat(animator?.indicatorStartBounds).isEqualTo(Rect(15, 15, 985, 985))
+ assertThat(animator?.indicatorEndBounds).isEqualTo(Rect(0, 0, 1000, 1000))
+ }
+
+ @Test
+ fun testFadeOutBoundsCalculation() {
+ val spyIndicator = setupSpyViewContainer()
+ val animator =
+ spyIndicator.indicatorView?.let {
+ VisualIndicatorViewContainer.VisualIndicatorAnimator.fadeBoundsOut(
+ it,
+ DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR,
+ displayLayout,
+ bubbleDropTargetBoundsProvider,
+ )
+ }
+ assertThat(animator?.indicatorStartBounds).isEqualTo(Rect(0, 0, 1000, 1000))
+ assertThat(animator?.indicatorEndBounds).isEqualTo(Rect(15, 15, 985, 985))
+ }
+
+ @Test
+ fun testChangeIndicatorTypeBoundsCalculation() {
+ // Test fullscreen to split-left bounds.
+ var animator =
+ VisualIndicatorViewContainer.VisualIndicatorAnimator.animateIndicatorType(
+ view,
+ displayLayout,
+ DesktopModeVisualIndicator.IndicatorType.TO_FULLSCREEN_INDICATOR,
+ DesktopModeVisualIndicator.IndicatorType.TO_SPLIT_LEFT_INDICATOR,
+ bubbleDropTargetBoundsProvider,
+ )
+ // Test desktop to split-right bounds.
+ animator =
+ VisualIndicatorViewContainer.VisualIndicatorAnimator.animateIndicatorType(
+ view,
+ displayLayout,
+ DesktopModeVisualIndicator.IndicatorType.TO_DESKTOP_INDICATOR,
+ DesktopModeVisualIndicator.IndicatorType.TO_SPLIT_RIGHT_INDICATOR,
+ bubbleDropTargetBoundsProvider,
+ )
+ }
+
+ private fun setupSpyViewContainer(): VisualIndicatorViewContainer {
+ val viewContainer =
+ VisualIndicatorViewContainer(
+ desktopExecutor,
+ mainExecutor,
+ SurfaceControl.Builder(),
+ syncQueue,
+ mockSurfaceControlViewHostFactory,
+ bubbleDropTargetBoundsProvider,
+ )
+ viewContainer.createView(
+ context,
+ mock(Display::class.java),
+ displayLayout,
+ taskInfo,
+ taskSurface,
+ )
+ desktopExecutor.flushAll()
+ viewContainer.indicatorView?.background = mockBackground
+ whenever(mockBackground.findDrawableByLayerId(anyInt()))
+ .thenReturn(mock(Drawable::class.java))
+ return spy(viewContainer)
+ }
+
+ private fun createTaskInfo(): RunningTaskInfo {
+ val taskDescriptionBuilder = ActivityManager.TaskDescription.Builder()
+ return TestRunningTaskInfoBuilder()
+ .setDisplayId(Display.DEFAULT_DISPLAY)
+ .setTaskDescriptionBuilder(taskDescriptionBuilder)
+ .setVisible(true)
+ .build()
+ }
+
+ companion object {
+ private val DISPLAY_BOUNDS = Rect(0, 0, 1000, 1000)
+ }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentsTransitionHandlerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentsTransitionHandlerTest.java
index 439be9155b26..fd5e567f69ed 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentsTransitionHandlerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentsTransitionHandlerTest.java
@@ -34,6 +34,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
@@ -293,6 +294,31 @@ public class RecentsTransitionHandlerTest extends ShellTestCase {
@Test
@EnableFlags(FLAG_ENABLE_DESKTOP_RECENTS_TRANSITIONS_CORNERS_BUGFIX)
+ public void testMerge_openingTasks_callsOnTasksAppeared() throws Exception {
+ final IRecentsAnimationRunner animationRunner = mock(IRecentsAnimationRunner.class);
+ TransitionInfo mergeTransitionInfo = new TransitionInfoBuilder(TRANSIT_OPEN)
+ .addChange(TRANSIT_OPEN, new TestRunningTaskInfoBuilder().build())
+ .build();
+ final IBinder transition = startRecentsTransition(/* synthetic= */ false, animationRunner);
+ SurfaceControl.Transaction finishT = mock(SurfaceControl.Transaction.class);
+ mRecentsTransitionHandler.startAnimation(
+ transition, createTransitionInfo(), new StubTransaction(), new StubTransaction(),
+ mock(Transitions.TransitionFinishCallback.class));
+
+ mRecentsTransitionHandler.findController(transition).merge(
+ mergeTransitionInfo,
+ new StubTransaction(),
+ finishT,
+ transition,
+ mock(Transitions.TransitionFinishCallback.class));
+ mMainExecutor.flushAll();
+
+ verify(animationRunner).onTasksAppeared(
+ /* appearedTargets= */ any(), eq(mergeTransitionInfo));
+ }
+
+ @Test
+ @EnableFlags(FLAG_ENABLE_DESKTOP_RECENTS_TRANSITIONS_CORNERS_BUGFIX)
public void testMergeAndFinish_openingFreeformTasks_setsCornerRadius() {
ActivityManager.RunningTaskInfo freeformTask =
new TestRunningTaskInfoBuilder().setWindowingMode(WINDOWING_MODE_FREEFORM).build();
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositionerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositionerTest.kt
index 63babc5e1c3c..937938df82c8 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositionerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositionerTest.kt
@@ -249,6 +249,25 @@ class MultiDisplayVeiledResizeTaskPositionerTest : ShellTestCase() {
}
@Test
+ fun testDragResize_movesTaskOnSameDisplay_noPxDpConversion() = runOnUiThread {
+ taskPositioner.onDragPositioningStart(
+ CTRL_TYPE_UNDEFINED,
+ DISPLAY_ID_0,
+ STARTING_BOUNDS.left.toFloat(),
+ STARTING_BOUNDS.top.toFloat(),
+ )
+
+ taskPositioner.onDragPositioningEnd(
+ DISPLAY_ID_0,
+ STARTING_BOUNDS.left.toFloat() + 70,
+ STARTING_BOUNDS.top.toFloat() + 20,
+ )
+
+ verify(spyDisplayLayout0, never()).localPxToGlobalDp(any(), any())
+ verify(spyDisplayLayout0, never()).globalDpToLocalPx(any(), any())
+ }
+
+ @Test
fun testDragResize_movesTaskToNewDisplay() = runOnUiThread {
taskPositioner.onDragPositioningStart(
CTRL_TYPE_UNDEFINED,
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp
index 647b55353257..9d197f48ed8d 100644
--- a/media/jni/android_media_MediaPlayer.cpp
+++ b/media/jni/android_media_MediaPlayer.cpp
@@ -1378,7 +1378,7 @@ static jintArray android_media_MediaPlayer_getRoutedDeviceIds(JNIEnv *env, jobje
}
jint* values = env->GetIntArrayElements(result, 0);
for (unsigned int i = 0; i < deviceIds.size(); i++) {
- values[i++] = static_cast<jint>(deviceIds[i]);
+ values[i] = static_cast<jint>(deviceIds[i]);
}
env->ReleaseIntArrayElements(result, values, 0);
return result;
diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp
index 643fc8a2d925..2975a39c5fa5 100644
--- a/media/jni/android_media_MediaRecorder.cpp
+++ b/media/jni/android_media_MediaRecorder.cpp
@@ -743,7 +743,7 @@ android_media_MediaRecorder_getRoutedDeviceIds(JNIEnv *env, jobject thiz)
}
jint* values = env->GetIntArrayElements(result, 0);
for (unsigned int i = 0; i < deviceIds.size(); i++) {
- values[i++] = static_cast<jint>(deviceIds[i]);
+ values[i] = static_cast<jint>(deviceIds[i]);
}
env->ReleaseIntArrayElements(result, values, 0);
return result;
diff --git a/nfc-extras/OWNERS b/nfc-extras/OWNERS
index 35e9713f5715..2b82bc8ad073 100644
--- a/nfc-extras/OWNERS
+++ b/nfc-extras/OWNERS
@@ -1,2 +1,2 @@
# Bug component: 48448
-include platform/packages/apps/Nfc:/OWNERS
+include platform/packages/modules/Nfc:/OWNERS
diff --git a/nfc-non-updatable/OWNERS b/nfc-non-updatable/OWNERS
index f46dccd97974..47f209ffa9fa 100644
--- a/nfc-non-updatable/OWNERS
+++ b/nfc-non-updatable/OWNERS
@@ -1,2 +1,2 @@
# Bug component: 48448
-include platform/packages/apps/Nfc:/OWNERS \ No newline at end of file
+include platform/packages/modules/Nfc:/OWNERS \ No newline at end of file
diff --git a/nfc-non-updatable/java/android/nfc/cardemulation/ApduServiceInfo.java b/nfc-non-updatable/java/android/nfc/cardemulation/ApduServiceInfo.java
index d0de1fc14b0e..f2a68afbfcbe 100644
--- a/nfc-non-updatable/java/android/nfc/cardemulation/ApduServiceInfo.java
+++ b/nfc-non-updatable/java/android/nfc/cardemulation/ApduServiceInfo.java
@@ -70,6 +70,11 @@ import java.util.regex.Pattern;
public final class ApduServiceInfo implements Parcelable {
private static final String TAG = "ApduServiceInfo";
+ private static final Pattern PLPF_PATTERN =
+ Pattern.compile("[0-9A-Fa-f]{2,}[0-9A-Fa-f,\\?,\\*\\.]*");
+ private static final Pattern PLF_PATTERN =
+ Pattern.compile("[0-9A-Fa-f]{2,}");
+
/**
* Component level {@link android.content.pm.PackageManager.Property PackageManager
* .Property} for a system application to change its icon and label
@@ -472,7 +477,12 @@ public final class ApduServiceInfo implements Parcelable {
boolean autoTransact = a.getBoolean(
com.android.internal.R.styleable.PollingLoopFilter_autoTransact,
false);
- if (!mOnHost && !autoTransact) {
+ boolean isValidFilter = PLF_PATTERN.matcher(plf).matches()
+ && plf.length() % 2 == 0;
+ if (!isValidFilter) {
+ Log.e(TAG, "Ignoring polling-loop-filter " + plf
+ + " it is not a valid filter");
+ } else if (!mOnHost && !autoTransact) {
Log.e(TAG, "Ignoring polling-loop-filter " + plf
+ " for offhost service that isn't autoTransact");
} else {
@@ -489,8 +499,12 @@ public final class ApduServiceInfo implements Parcelable {
boolean autoTransact = a.getBoolean(
com.android.internal.R.styleable.PollingLoopFilter_autoTransact,
false);
- if (!mOnHost && !autoTransact) {
- Log.e(TAG, "Ignoring polling-loop-filter " + plf
+ boolean isValidFilter = PLPF_PATTERN.matcher(plf).matches();
+ if (!isValidFilter) {
+ Log.e(TAG, "Ignoring polling-loop-pattern-filter " + plf
+ + " it is not a valid pattern filter");
+ } else if (!mOnHost && !autoTransact) {
+ Log.e(TAG, "Ignoring polling-loop-pattern-filter " + plf
+ " for offhost service that isn't autoTransact");
} else {
mAutoTransactPatterns.put(Pattern.compile(plf), autoTransact);
@@ -814,6 +828,12 @@ public final class ApduServiceInfo implements Parcelable {
@FlaggedApi(Flags.FLAG_NFC_READ_POLLING_LOOP)
public void addPollingLoopFilter(@NonNull String pollingLoopFilter,
boolean autoTransact) {
+ if (!PLF_PATTERN.matcher(pollingLoopFilter).matches()
+ || pollingLoopFilter.length() % 2 != 0) {
+ throw new IllegalArgumentException(
+ "Polling loop filter must contain an even number of characters 0-9 or A-F"
+ );
+ }
if (!mOnHost && !autoTransact) {
return;
}
@@ -842,6 +862,11 @@ public final class ApduServiceInfo implements Parcelable {
@FlaggedApi(Flags.FLAG_NFC_READ_POLLING_LOOP)
public void addPollingLoopPatternFilter(@NonNull String pollingLoopPatternFilter,
boolean autoTransact) {
+ if (!PLPF_PATTERN.matcher(pollingLoopPatternFilter).matches()) {
+ throw new IllegalArgumentException(
+ "Polling loop pattern filter is invalid"
+ );
+ }
if (!mOnHost && !autoTransact) {
return;
}
diff --git a/omapi/OWNERS b/omapi/OWNERS
index 39c5c5bdeb09..375d643f7ed1 100644
--- a/omapi/OWNERS
+++ b/omapi/OWNERS
@@ -1,2 +1,2 @@
# Bug component: 456592
-include platform/packages/apps/Nfc:/OWNERS
+include platform/packages/modules/Nfc:/OWNERS
diff --git a/omapi/java/android/se/OWNERS b/omapi/java/android/se/OWNERS
index 39c5c5bdeb09..375d643f7ed1 100644
--- a/omapi/java/android/se/OWNERS
+++ b/omapi/java/android/se/OWNERS
@@ -1,2 +1,2 @@
# Bug component: 456592
-include platform/packages/apps/Nfc:/OWNERS
+include platform/packages/modules/Nfc:/OWNERS
diff --git a/omapi/java/android/se/omapi/OWNERS b/omapi/java/android/se/omapi/OWNERS
index 39c5c5bdeb09..375d643f7ed1 100644
--- a/omapi/java/android/se/omapi/OWNERS
+++ b/omapi/java/android/se/omapi/OWNERS
@@ -1,2 +1,2 @@
# Bug component: 456592
-include platform/packages/apps/Nfc:/OWNERS
+include platform/packages/modules/Nfc:/OWNERS
diff --git a/packages/CompanionDeviceManager/res/values-ar/strings.xml b/packages/CompanionDeviceManager/res/values-ar/strings.xml
index efbc6d92981a..5b6ea65e42ed 100644
--- a/packages/CompanionDeviceManager/res/values-ar/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ar/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"تطبيق \"مدير الجهاز المصاحب\""</string>
<string name="confirmation_title" msgid="2244241995958340998">"‏هل تريد السماح لـ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; بالوصول إلى &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;؟"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"يُرجى التأكّد من أنّ <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> مفعَّل في <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>، وجعل <xliff:g id="PROFILE_NAME">%3$s</xliff:g> بالقرب منك."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"يُرجى التأكّد من تفعيل <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> في <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>، وإبقاء <xliff:g id="PROFILE_NAME">%3$s</xliff:g> بالقرب منك."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"لم يتم العثور على أي أجهزة. يُرجى إعادة المحاولة لاحقًا."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"البلوتوث"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
@@ -63,7 +63,7 @@
<string name="permission_microphone" msgid="2152206421428732949">"الميكروفون"</string>
<string name="permission_call_logs" msgid="5546761417694586041">"سجلّ المكالمات"</string>
<string name="permission_nearby_devices" msgid="7530973297737123481">"الأجهزة المجاورة"</string>
- <string name="permission_media_routing_control" msgid="5498639511586715253">"تغيير جهاز إخراج الوسائط"</string>
+ <string name="permission_media_routing_control" msgid="5498639511586715253">"تغيير جهاز بث الوسائط"</string>
<string name="permission_storage" msgid="6831099350839392343">"الصور والوسائط"</string>
<string name="permission_notifications" msgid="4099418516590632909">"الإشعارات"</string>
<string name="permission_phone_summary" msgid="8246321093970051702">"إجراء المكالمات الهاتفية وإدارتها"</string>
@@ -77,7 +77,7 @@
<string name="permission_notifications_summary" msgid="2272810466047367030">"‏• قراءة كل الإشعارات بما فيها المعلومات، مثل جهات الاتصال والرسائل والصور&lt;br/&gt;• إرسال الإشعارات&lt;br/&gt;&lt;br/&gt;يمكنك إدارة الإذن الممنوح لهذا التطبيق بقراءة الإشعارات وإرسالها في أي وقت من خلال الإعدادات &gt; الإشعارات."</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_media_routing_control_summary" msgid="2714631092321412250">"يتيح لك هذا الإذن الاطّلاع على مجموعة من الأجهزة المتاحة وتحديد الجهاز المسموح له بتشغيل الصوت أو الفيديو أو بثّهما من التطبيقات الأخرى."</string>
- <string name="device_type" product="default" msgid="8268703872070046263">"هاتف"</string>
+ <string name="device_type" product="default" msgid="8268703872070046263">"الهاتف"</string>
<string name="device_type" product="tablet" msgid="5038791954983067774">"جهاز لوحي"</string>
<string name="device_type" product="tv" msgid="5355611506659405636">"تلفزيون"</string>
<string name="device_type" product="device" msgid="1526125965802507189">"جهاز"</string>
diff --git a/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml b/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
index ab52c39b34b9..dfe3cbefcb5b 100644
--- a/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-b+sr+Latn/strings.xml
@@ -18,16 +18,16 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Menadžer pridruženog uređaja"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Dozvolite da aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; pristupa uređaju &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Uverite se da je za <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> uključen <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> i da u blizini imate <xliff:g id="PROFILE_NAME">%3$s</xliff:g>."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Uverite se da je na <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> uključen <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> i da u blizini imate <xliff:g id="PROFILE_NAME">%3$s</xliff:g>."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Nije pronađen nijedan uređaj. Probajte ponovo kasnije."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"WiFi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth i WiFi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"sat"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Odaberite uređaj kojim će upravljati aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Odaberite profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g> koji želite da podesite"</string>
+ <string name="chooser_title" msgid="2235819929238267637">"Odaberite <xliff:g id="PROFILE_NAME">%1$s</xliff:g> koji želite da podesite"</string>
<string name="single_device_title" msgid="4199861437545438606">"Traži se <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
- <string name="summary_watch" msgid="8134580124808507407">"Ovoj aplikaciji će biti dozvoljeno da sinhronizuje podatke, poput imena pozivaoca, i pristupa tim dozvolama na uređaju <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+ <string name="summary_watch" msgid="8134580124808507407">"Ovoj aplikaciji će biti dozvoljeno da sinhronizuje podatke, poput imena pozivaoca, i pristupa sledećim dozvolama na <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Želite li da dozvolite da &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; upravlja uređajem &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"uređaj"</string>
<string name="summary_glasses" msgid="5469208629679579157">"Ovoj aplikaciji će biti dozvoljeno da pristupa ovim dozvolama na uređaju <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
diff --git a/packages/CompanionDeviceManager/res/values-be/strings.xml b/packages/CompanionDeviceManager/res/values-be/strings.xml
index 884101fe718d..6e5e1b58f362 100644
--- a/packages/CompanionDeviceManager/res/values-be/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-be/strings.xml
@@ -18,15 +18,15 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Менеджар спадарожнай прылады"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Дазволіць праграме &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; доступ да прылады &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Упэўніцеся, што на гэтай прыладзе (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>) уключаны <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g>, і трымайце <xliff:g id="PROFILE_NAME">%3$s</xliff:g> паблізу."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Упэўніцеся, што на гэтай прыладзе (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>) уключаны <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g>, а <xliff:g id="PROFILE_NAME">%3$s</xliff:g> знаходзіцца паблізу."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Прылады не знойдзены. Паўтарыце спробу пазней."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth і Wi-Fi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"гадзіннік"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Выберыце прыладу (<xliff:g id="APP_NAME">%1$s</xliff:g>), якой будзе кіраваць праграма &lt;strong&gt;&lt;/strong&gt;"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Выберыце імя <xliff:g id="PROFILE_NAME">%1$s</xliff:g> для наладжвання"</string>
- <string name="single_device_title" msgid="4199861437545438606">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g>: ідзе пошук"</string>
+ <string name="chooser_title" msgid="2235819929238267637">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g>: выберыце, каб наладзіць"</string>
+ <string name="single_device_title" msgid="4199861437545438606">"Ідзе пошук: <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"Гэта праграма зможа сінхранізаваць інфармацыю (напрыклад, імя таго, хто звоніць) на вашай прыладзе тыпу \"<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>\" і атрымае наступныя дазволы"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Дазволіць праграме &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; кіраваць прыладай &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"прылада"</string>
@@ -63,7 +63,7 @@
<string name="permission_microphone" msgid="2152206421428732949">"Мікрафон"</string>
<string name="permission_call_logs" msgid="5546761417694586041">"Журналы выклікаў"</string>
<string name="permission_nearby_devices" msgid="7530973297737123481">"Прылады паблізу"</string>
- <string name="permission_media_routing_control" msgid="5498639511586715253">"Змяніць прыладу вываду медыя"</string>
+ <string name="permission_media_routing_control" msgid="5498639511586715253">"Змяненне прылады вываду медыя"</string>
<string name="permission_storage" msgid="6831099350839392343">"Фота і медыяфайлы"</string>
<string name="permission_notifications" msgid="4099418516590632909">"Апавяшчэнні"</string>
<string name="permission_phone_summary" msgid="8246321093970051702">"Ажыццяўленне тэлефонных выклікаў і кіраванне імі"</string>
diff --git a/packages/CompanionDeviceManager/res/values-bs/strings.xml b/packages/CompanionDeviceManager/res/values-bs/strings.xml
index e7f9b146133e..bc74b1aaefbc 100644
--- a/packages/CompanionDeviceManager/res/values-bs/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-bs/strings.xml
@@ -25,7 +25,7 @@
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth i WiFi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"sat"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Odaberite uređaj kojim će upravljati aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Odaberite <xliff:g id="PROFILE_NAME">%1$s</xliff:g> da postavite"</string>
+ <string name="chooser_title" msgid="2235819929238267637">"Odaberite <xliff:g id="PROFILE_NAME">%1$s</xliff:g> za postavljanje"</string>
<string name="single_device_title" msgid="4199861437545438606">"Traži se <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"Aplikaciji će biti dozvoljeno da sinhronizira informacije, kao što je ime osobe koja upućuje poziv, i pristupa ovim odobrenjima koje sadržava vaš <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Dozvoliti aplikaciji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; da upravlja uređajem &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-da/strings.xml b/packages/CompanionDeviceManager/res/values-da/strings.xml
index 08a1ae1a8623..1062af845c9f 100644
--- a/packages/CompanionDeviceManager/res/values-da/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-da/strings.xml
@@ -26,7 +26,7 @@
<string name="profile_name_watch" msgid="576290739483672360">"ur"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Vælg en enhed, som skal administreres af &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
<string name="chooser_title" msgid="2235819929238267637">"Vælg en <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, som du vil konfigurere"</string>
- <string name="single_device_title" msgid="4199861437545438606">"Søger efter et <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
+ <string name="single_device_title" msgid="4199861437545438606">"Søger efter <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"Denne app får tilladelse til at synkronisere oplysninger, f.eks. navne på dem, der ringer, og adgang til disse tilladelser på din <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Vil du tillade, at &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; administrerer &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"enhed"</string>
diff --git a/packages/CompanionDeviceManager/res/values-de/strings.xml b/packages/CompanionDeviceManager/res/values-de/strings.xml
index 30528c528518..6f8a902edc91 100644
--- a/packages/CompanionDeviceManager/res/values-de/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-de/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Begleitgerät-Manager"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Zulassen, dass &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; auf &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; zugreifen darf?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Achte darauf, dass die Option „<xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g>“ auf diesem <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> aktiviert ist und dein Begleitgerät vom Typ „<xliff:g id="PROFILE_NAME">%3$s</xliff:g>“ in der Nähe ist."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"<xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> muss auf diesem <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> aktiviert und dein Gerät „<xliff:g id="PROFILE_NAME">%3$s</xliff:g>“ in der Nähe sein."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Keine Geräte gefunden. Bitte versuche es später noch einmal."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"WLAN"</string>
@@ -26,7 +26,7 @@
<string name="profile_name_watch" msgid="576290739483672360">"Smartwatch"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Gerät auswählen, das von &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; verwaltet werden soll"</string>
<string name="chooser_title" msgid="2235819929238267637">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> zum Einrichten auswählen"</string>
- <string name="single_device_title" msgid="4199861437545438606">"Nach einem Begleitgerät vom Typ „<xliff:g id="PROFILE_NAME">%1$s</xliff:g>“ suchen"</string>
+ <string name="single_device_title" msgid="4199861437545438606">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> wird gesucht"</string>
<string name="summary_watch" msgid="8134580124808507407">"Diese App darf dann Daten wie den Namen eines Anrufers synchronisieren und auf diese Berechtigungen auf deinem Gerät (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>) zugreifen"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Zulassen, dass &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; das Gerät &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; verwalten darf?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"Gerät"</string>
diff --git a/packages/CompanionDeviceManager/res/values-el/strings.xml b/packages/CompanionDeviceManager/res/values-el/strings.xml
index cffb365974f4..c90bf21c87ab 100644
--- a/packages/CompanionDeviceManager/res/values-el/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-el/strings.xml
@@ -18,16 +18,16 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Διαχείριση συνοδευτικής εφαρμογής"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Να επιτρέπεται στην εφαρμογή &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; να έχει πρόσβαση στη συσκευή &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;;"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Βεβαιωθείτε ότι αυτή η συσκευή <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> έχει ενεργοποιημένο το <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> και κρατήστε τη συσκευή <xliff:g id="PROFILE_NAME">%3$s</xliff:g> κοντά."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Βεβαιωθείτε ότι αυτό το <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> έχει ενεργοποιημένο το <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> και κρατήστε το <xliff:g id="PROFILE_NAME">%3$s</xliff:g> κοντά."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Δεν βρέθηκαν συσκευές. Δοκιμάστε ξανά αργότερα."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth και Wi-Fi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ρολόι"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Επιλέξτε μια συσκευή για διαχείριση μέσω της εφαρμογής &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Επιλέξτε ένα προφίλ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> για ρύθμιση"</string>
+ <string name="chooser_title" msgid="2235819929238267637">"Επιλέξτε ένα <xliff:g id="PROFILE_NAME">%1$s</xliff:g> για ρύθμιση"</string>
<string name="single_device_title" msgid="4199861437545438606">"Αναζήτηση για <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
- <string name="summary_watch" msgid="8134580124808507407">"Αυτή η εφαρμογή θα μπορεί να συγχρονίζει πληροφορίες, όπως το όνομα ενός ατόμου που σας καλεί, και να αποκτά πρόσβαση σε αυτές τις άδειες στη συσκευή <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+ <string name="summary_watch" msgid="8134580124808507407">"Αυτή η εφαρμογή θα μπορεί να συγχρονίζει πληροφορίες, όπως το όνομα ενός ατόμου που σας καλεί, και να αποκτά πρόσβαση σε αυτές τις άδειες στο <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Να επιτρέπεται στην εφαρμογή &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; να διαχειρίζεται τη συσκευή &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ;"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"συσκευή"</string>
<string name="summary_glasses" msgid="5469208629679579157">"Αυτή η εφαρμογή θα μπορεί να έχει πρόσβαση σε αυτές τις άδειες στη συσκευή <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
diff --git a/packages/CompanionDeviceManager/res/values-es/strings.xml b/packages/CompanionDeviceManager/res/values-es/strings.xml
index ac8c79a61496..a309d7cb4d27 100644
--- a/packages/CompanionDeviceManager/res/values-es/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-es/strings.xml
@@ -46,7 +46,7 @@
<string name="summary_sensor_device_streaming" msgid="3413105061195145547">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> tendrá acceso a todo lo que se reproduzca en tu <xliff:g id="DEVICE_NAME_1">%3$s</xliff:g>.&lt;br/&gt;&lt;br/&gt;<xliff:g id="APP_NAME_2">%1$s</xliff:g> podrá emitir audio en <xliff:g id="DEVICE_NAME_3">%3$s</xliff:g> hasta que quites el acceso a este permiso."</string>
<string name="helper_summary_sensor_device_streaming" msgid="8860174545653786353">"<xliff:g id="APP_NAME">%1$s</xliff:g> está pidiendo permiso en nombre de <xliff:g id="DEVICE_NAME">%2$s</xliff:g> para emitir audio y funciones del sistema en otros dispositivos tuyos."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
- <string name="summary_generic" msgid="1761976003668044801">"Esta aplicación podrá sincronizar información (por ejemplo, el nombre de la persona que te llama) entre tu teléfono y el dispositivo que elijas"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Esta aplicación podrá sincronizar información, como el nombre de la persona que llama, entre tu teléfono y el dispositivo que elijas"</string>
<string name="consent_yes" msgid="8344487259618762872">"Permitir"</string>
<string name="consent_no" msgid="2640796915611404382">"No permitir"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Cancelar"</string>
diff --git a/packages/CompanionDeviceManager/res/values-et/strings.xml b/packages/CompanionDeviceManager/res/values-et/strings.xml
index 9c22847df868..91d1b6914e23 100644
--- a/packages/CompanionDeviceManager/res/values-et/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-et/strings.xml
@@ -18,16 +18,16 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Kaasseadme haldur"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Kas anda rakendusele &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; juurdepääs seadmele &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Veenduge, et seadmes <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> oleks <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> sisse lülitatud, ja hoidke oma seade <xliff:g id="PROFILE_NAME">%3$s</xliff:g> läheduses."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Veenduge, et seadmes <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> oleks <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> sisse lülitatud, ja hoidke oma <xliff:g id="PROFILE_NAME">%3$s</xliff:g> läheduses."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Seadmeid ei leitud. Proovige hiljem uuesti."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"WiFi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth ja WiFi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"käekell"</string>
- <string name="chooser_title_non_profile" msgid="6035023914517087400">"Valige seade, mida haldab rakendus &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Valige <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, mis seadistada"</string>
- <string name="single_device_title" msgid="4199861437545438606">"Seadme <xliff:g id="PROFILE_NAME">%1$s</xliff:g> otsimine"</string>
- <string name="summary_watch" msgid="8134580124808507407">"Sellel rakendusel lubatakse sünkroonida teavet (nt helistaja nime) ja antakse juurdepääs nendele lubadele, mille asukoht on teie <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+ <string name="chooser_title_non_profile" msgid="6035023914517087400">"Valige seade, mida rakendus &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; hakkab haldama"</string>
+ <string name="chooser_title" msgid="2235819929238267637">"Valige seadistatav <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
+ <string name="single_device_title" msgid="4199861437545438606">"Otsimine: <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_watch" msgid="8134580124808507407">"Sellel rakendusel lubatakse sünkroonida teavet (nt helistaja nime) ja antakse juurdepääs nendele teie seadme <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> lubadele."</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Lubage rakendusel &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; hallata seadet &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"seade"</string>
<string name="summary_glasses" msgid="5469208629679579157">"Sellel rakendusel lubatakse juurde pääseda nendele lubadele, mille asukoht on teie <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
@@ -46,7 +46,7 @@
<string name="summary_sensor_device_streaming" msgid="3413105061195145547">"Rakendus <xliff:g id="APP_NAME_0">%1$s</xliff:g> saab juurdepääsu kõigele, mida teie seadmes <xliff:g id="DEVICE_NAME_1">%3$s</xliff:g> esitatakse.&lt;br/&gt;&lt;br/&gt;<xliff:g id="APP_NAME_2">%1$s</xliff:g> saab edastada heli seadmesse <xliff:g id="DEVICE_NAME_3">%3$s</xliff:g>, kuni selle loa eemaldate."</string>
<string name="helper_summary_sensor_device_streaming" msgid="8860174545653786353">"<xliff:g id="APP_NAME">%1$s</xliff:g> taotleb teie seadme <xliff:g id="DEVICE_NAME">%2$s</xliff:g> nimel luba teie seadmete vahel heli ja süsteemifunktsioonide edastamiseks."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"seade"</string>
- <string name="summary_generic" msgid="1761976003668044801">"See rakendus saab sünkroonida teavet, näiteks helistaja nime, teie telefoni ja valitud seadme vahel"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"See rakendus saab sünkroonida teavet (näiteks helistaja nime) teie telefoni ja valitud seadme vahel."</string>
<string name="consent_yes" msgid="8344487259618762872">"Luba"</string>
<string name="consent_no" msgid="2640796915611404382">"Ära luba"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Tühista"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fa/strings.xml b/packages/CompanionDeviceManager/res/values-fa/strings.xml
index 2f4f9380171e..048bf3e7b0b4 100644
--- a/packages/CompanionDeviceManager/res/values-fa/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fa/strings.xml
@@ -24,7 +24,7 @@
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"‏بلوتوث و Wi-Fi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ساعت"</string>
- <string name="chooser_title_non_profile" msgid="6035023914517087400">"‏انتخاب دستگاه برای مدیریت کردن با &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
+ <string name="chooser_title_non_profile" msgid="6035023914517087400">"‏انتخاب دستگاه برای مدیریت شدن توسط &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
<string name="chooser_title" msgid="2235819929238267637">"انتخاب <xliff:g id="PROFILE_NAME">%1$s</xliff:g> برای راه‌اندازی"</string>
<string name="single_device_title" msgid="4199861437545438606">"درحال یافتن <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"به این برنامه اجازه داده می‌شود اطلاعاتی مثل نام تماس‌گیرنده را همگام‌سازی کند و به این اجازه‌ها در <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> شما دسترسی داشته باشد"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fi/strings.xml b/packages/CompanionDeviceManager/res/values-fi/strings.xml
index be4076abde4b..3f4a9d3cc1e0 100644
--- a/packages/CompanionDeviceManager/res/values-fi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fi/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <string name="confirmation_title" msgid="2244241995958340998">"Sallitaanko, että soellus (&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;) saa pääsyn laitteeseen: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+ <string name="confirmation_title" msgid="2244241995958340998">"Sallitaanko, että sovellus (&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;) saa pääsyn laitteeseen: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="message_discovery_soft_timeout" msgid="473346859407859161">"Varmista, että <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> on päällä laitteella (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>), ja pidä <xliff:g id="PROFILE_NAME">%3$s</xliff:g> lähellä."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Laitteita ei löydy. Yritä myöhemmin uudelleen."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
diff --git a/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml b/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
index 0aa462bee90e..52b136c0c322 100644
--- a/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-fr-rCA/strings.xml
@@ -18,15 +18,15 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Gestionnaire d\'appareil compagnon"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Autoriser l\'appli &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à accéder à &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Assurez-vous que le <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> est activé sur cet appareil (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>) et gardez votre <xliff:g id="PROFILE_NAME">%3$s</xliff:g> à proximité."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Assurez-vous que le <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> est activé sur votre <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> et gardez votre <xliff:g id="PROFILE_NAME">%3$s</xliff:g> à proximité."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Aucun appareil détecté. Veuillez réessayer plus tard."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth et Wi-Fi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"montre"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Choisir un appareil qui sera géré par &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Choisir un appareil (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>) pour le configurer"</string>
- <string name="single_device_title" msgid="4199861437545438606">"À la recherche de l\'appareil suivant : <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
+ <string name="chooser_title" msgid="2235819929238267637">"Choisir votre <xliff:g id="PROFILE_NAME">%1$s</xliff:g> à configurer"</string>
+ <string name="single_device_title" msgid="4199861437545438606">"Recherche de votre <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"Cette appli sera autorisée à synchroniser des informations, comme le nom de l\'appelant, et à accéder à ces autorisations sur votre <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Autoriser &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; à gérer &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"appareil"</string>
diff --git a/packages/CompanionDeviceManager/res/values-gu/strings.xml b/packages/CompanionDeviceManager/res/values-gu/strings.xml
index d3db96eedb6b..9df54dac3470 100644
--- a/packages/CompanionDeviceManager/res/values-gu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-gu/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"કમ્પેનિયન ડિવાઇસ મેનેજર"</string>
<string name="confirmation_title" msgid="2244241995958340998">"શું &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;ને ઍક્સેસ કરવા માટે, &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ઍપને મંજૂરી આપીએ?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"ખાતરી કરો કે આ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> દ્વારા <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> ચાલુ કરવામાં આવી છે અને તમારી <xliff:g id="PROFILE_NAME">%3$s</xliff:g> નજીકમાં રાખો."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"ખાતરી કરો કે આ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> દ્વારા <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> ચાલુ કરવામાં આવ્યું છે અને તમારી <xliff:g id="PROFILE_NAME">%3$s</xliff:g> નજીકમાં રાખો."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"કોઈ ડિવાઇસ મળ્યું નથી. કૃપા કરીને થોડા સમય પછી ફરી પ્રયાસ કરો."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"બ્લૂટૂથ"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"વાઇ-ફાઇ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-hi/strings.xml b/packages/CompanionDeviceManager/res/values-hi/strings.xml
index 2d38a00e9fcb..fe04cbd3503f 100644
--- a/packages/CompanionDeviceManager/res/values-hi/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hi/strings.xml
@@ -17,8 +17,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"कंपैनियन डिवाइस मैनेजर"</string>
- <string name="confirmation_title" msgid="2244241995958340998">"क्या &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; को ऐक्सेस करने के लिए &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ऐप्लिकेशन को अनुमति देनी है?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"पक्का करें कि इस <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> का <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> चालू हो और <xliff:g id="PROFILE_NAME">%3$s</xliff:g> आपके आस-पास हो."</string>
+ <string name="confirmation_title" msgid="2244241995958340998">"क्या &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ऐप्लिकेशन को &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ऐक्सेस करने की अनुमति देनी है?"</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"पक्का करें कि इस <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> का <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> चालू हो और <xliff:g id="PROFILE_NAME">%3$s</xliff:g> आस-पास हो."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"कोई डिवाइस नहीं मिला. कृपया बाद में कोशिश करें."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"ब्लूटूथ"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"वाई-फ़ाई"</string>
@@ -27,7 +27,7 @@
<string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; से मैनेज किया जाने वाला डिवाइस चुनें"</string>
<string name="chooser_title" msgid="2235819929238267637">"सेट अप करने के लिए कोई <xliff:g id="PROFILE_NAME">%1$s</xliff:g> चुनें"</string>
<string name="single_device_title" msgid="4199861437545438606">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> को ढूंढा जा रहा है"</string>
- <string name="summary_watch" msgid="8134580124808507407">"यह ऐप्लिकेशन, आपके <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> पर इन अनुमतियों को ऐक्सेस करने के साथ-साथ कॉल करने वाले व्यक्ति के नाम जैसी जानकारी सिंक कर पाएगा"</string>
+ <string name="summary_watch" msgid="8134580124808507407">"यह ऐप्लिकेशन, कॉल करने वाले व्यक्ति के नाम जैसी जानकारी सिंक करने के साथ-साथ, आपके <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> पर इन अनुमतियों को ऐक्सेस कर पाएगा"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"क्या &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; को &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; मैनेज करने की अनुमति देनी है?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"डिवाइस"</string>
<string name="summary_glasses" msgid="5469208629679579157">"यह ऐप्लिकेशन, आपके <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> पर इन अनुमतियों को ऐक्सेस कर पाएगा"</string>
@@ -63,7 +63,7 @@
<string name="permission_microphone" msgid="2152206421428732949">"माइक्रोफ़ोन"</string>
<string name="permission_call_logs" msgid="5546761417694586041">"कॉल लॉग"</string>
<string name="permission_nearby_devices" msgid="7530973297737123481">"आस-पास मौजूद डिवाइस"</string>
- <string name="permission_media_routing_control" msgid="5498639511586715253">"मीडिया आउटपुट में बदलाव करे"</string>
+ <string name="permission_media_routing_control" msgid="5498639511586715253">"मीडिया आउटपुट में बदलाव"</string>
<string name="permission_storage" msgid="6831099350839392343">"फ़ोटो और मीडिया"</string>
<string name="permission_notifications" msgid="4099418516590632909">"सूचनाएं"</string>
<string name="permission_phone_summary" msgid="8246321093970051702">"फ़ोन कॉल करने और उन्हें मैनेज करने की अनुमति दें"</string>
diff --git a/packages/CompanionDeviceManager/res/values-hu/strings.xml b/packages/CompanionDeviceManager/res/values-hu/strings.xml
index 8b11dac56f9c..9fb92c31b836 100644
--- a/packages/CompanionDeviceManager/res/values-hu/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hu/strings.xml
@@ -18,16 +18,16 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Társeszközök kezelője"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Engedélyezi a(z) &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; alkalmazás számára, hogy hozzáférjen a következőhöz: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Győződjön meg arról, hogy a <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> be van kapcsolva ezen a(z) <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> eszközön, és hogy a(z) <xliff:g id="PROFILE_NAME">%3$s</xliff:g> eszköz a közelben van."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Győződjön meg arról, hogy a <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> be van kapcsolva a(z) <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>, és hogy a(z) <xliff:g id="PROFILE_NAME">%3$s</xliff:g> a közelben van."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Nem található eszköz. Próbálja újra később."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth és Wi-Fi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"óra"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"A(z) &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; alkalmazással kezelni kívánt eszköz kiválasztása"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Válassza ki a beállítani kívánt <xliff:g id="PROFILE_NAME">%1$s</xliff:g> nevet."</string>
+ <string name="chooser_title" msgid="2235819929238267637">"Válassza ki a beállítani kívánt <xliff:g id="PROFILE_NAME">%1$s</xliff:g> nevét."</string>
<string name="single_device_title" msgid="4199861437545438606">"Keresés – <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
- <string name="summary_watch" msgid="8134580124808507407">"Ez az alkalmazás képes lesz szinkronizálni információkat (például a hívó fél nevét), és hozzáférhet majd ezekhez az engedélyekhez a következőn: <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+ <string name="summary_watch" msgid="8134580124808507407">"Ez az alkalmazás képes lesz szinkronizálni információkat (például a hívó fél nevét), és hozzáférhet majd ezekhez az engedélyekhez a <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Engedélyezi, hogy a(z) &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; kezelje a következő eszközt: &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"eszköz"</string>
<string name="summary_glasses" msgid="5469208629679579157">"Az alkalmazás hozzáférhet majd ezekhez az engedélyekhez a következőn: <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
diff --git a/packages/CompanionDeviceManager/res/values-hy/strings.xml b/packages/CompanionDeviceManager/res/values-hy/strings.xml
index 9d45928eeb5f..b398b94c0c3f 100644
--- a/packages/CompanionDeviceManager/res/values-hy/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-hy/strings.xml
@@ -18,15 +18,15 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Թույլատրե՞լ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; հավելվածին կառավարել &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; սարքը"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Համոզվեք, որ այս <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> սարքի <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g>-ը միացված է, և ձեր <xliff:g id="PROFILE_NAME">%3$s</xliff:g>-ը մոտ պահեք։"</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Համոզվեք, որ այս <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ի <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g>-ը միացված է, և ձեր <xliff:g id="PROFILE_NAME">%3$s</xliff:g>ը մոտ պահեք։"</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Սարքեր չեն գտնվել։ Փորձեք ավելի ուշ։"</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth և Wi-Fi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ժամացույց"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Ընտրեք սարքը, որը պետք է կառավարվի &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; հավելվածի միջոցով"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Կարգավորելու համար ընտրեք <xliff:g id="PROFILE_NAME">%1$s</xliff:g>ը"</string>
- <string name="single_device_title" msgid="4199861437545438606">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> սարքի որոնում"</string>
+ <string name="chooser_title" msgid="2235819929238267637">"Կարգավորելու համար ընտրեք <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
+ <string name="single_device_title" msgid="4199861437545438606">"Որոնվում է <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"Այս հավելվածը կկարողանա համաժամացնել տվյալները, օր․՝ զանգողի անունը, և կստանա հետևյալ թույլտվությունները ձեր <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ում"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Թույլատրե՞լ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; հավելվածին կառավարել &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; սարքը"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"սարք"</string>
diff --git a/packages/CompanionDeviceManager/res/values-it/strings.xml b/packages/CompanionDeviceManager/res/values-it/strings.xml
index 3fa0419832e8..36647ada789c 100644
--- a/packages/CompanionDeviceManager/res/values-it/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-it/strings.xml
@@ -27,7 +27,7 @@
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Scegli un dispositivo che sia gestito da &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
<string name="chooser_title" msgid="2235819929238267637">"Scegli un <xliff:g id="PROFILE_NAME">%1$s</xliff:g> da configurare"</string>
<string name="single_device_title" msgid="4199861437545438606">"Ricerca di un <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
- <string name="summary_watch" msgid="8134580124808507407">"Questa app potrà sincronizzare informazioni, ad esempio il nome di un chiamante, e accedere alle seguenti autorizzazioni <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+ <string name="summary_watch" msgid="8134580124808507407">"Questa app potrà sincronizzare informazioni, ad esempio il nome di un chiamante, e accedere alle seguenti autorizzazioni sul <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Vuoi consentire all\'app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; di gestire &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"dispositivo"</string>
<string name="summary_glasses" msgid="5469208629679579157">"Questa app potrà accedere alle seguenti autorizzazioni <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>:"</string>
@@ -46,7 +46,7 @@
<string name="summary_sensor_device_streaming" msgid="3413105061195145547">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> avrà accesso a tutto ciò che viene riprodotto sul tuo <xliff:g id="DEVICE_NAME_1">%3$s</xliff:g>.&lt;br/&gt;&lt;br/&gt;<xliff:g id="APP_NAME_2">%1$s</xliff:g> sarà in grado di riprodurre in streaming l\'audio su <xliff:g id="DEVICE_NAME_3">%3$s</xliff:g> finché non rimuoverai l\'accesso a questa autorizzazione."</string>
<string name="helper_summary_sensor_device_streaming" msgid="8860174545653786353">"<xliff:g id="APP_NAME">%1$s</xliff:g> richiede l\'autorizzazione per conto di <xliff:g id="DEVICE_NAME">%2$s</xliff:g> per riprodurre in streaming funzionalità di sistema e audio tra i tuoi dispositivi."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"dispositivo"</string>
- <string name="summary_generic" msgid="1761976003668044801">"Questa app potrà sincronizzare informazioni, ad esempio il nome di un chiamante, tra il telefono e il dispositivo scelto"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Questa app potrà sincronizzare informazioni, ad esempio il nome di un chiamante, tra lo smartphone e il dispositivo scelto"</string>
<string name="consent_yes" msgid="8344487259618762872">"Consenti"</string>
<string name="consent_no" msgid="2640796915611404382">"Non consentire"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Annulla"</string>
diff --git a/packages/CompanionDeviceManager/res/values-iw/strings.xml b/packages/CompanionDeviceManager/res/values-iw/strings.xml
index f775a7f16f81..f08ee6e674d2 100644
--- a/packages/CompanionDeviceManager/res/values-iw/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-iw/strings.xml
@@ -27,7 +27,7 @@
<string name="chooser_title_non_profile" msgid="6035023914517087400">"‏בחירה של מכשיר לניהול באמצעות &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
<string name="chooser_title" msgid="2235819929238267637">"בחירת <xliff:g id="PROFILE_NAME">%1$s</xliff:g> להגדרה"</string>
<string name="single_device_title" msgid="4199861437545438606">"מתבצע חיפוש של <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
- <string name="summary_watch" msgid="8134580124808507407">"האפליקציה הזו תוכל לסנכרן מידע, כמו השם של מישהו שמתקשר, ולגשת להרשאות האלה ב<xliff:g id="DEVICE_TYPE">%1$s</xliff:g> שלך"</string>
+ <string name="summary_watch" msgid="8134580124808507407">"האפליקציה הזו תוכל לסנכרן מידע, כמו השם של מי שמתקשר, ולגשת להרשאות האלה ב<xliff:g id="DEVICE_TYPE">%1$s</xliff:g> שלך"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"‏מתן הרשאה לאפליקציה ‎&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&amp;g;‎‏ לנהל את ‎&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;‎‏"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"מכשיר"</string>
<string name="summary_glasses" msgid="5469208629679579157">"האפליקציה הזו תוכל לגשת להרשאות האלה ב<xliff:g id="DEVICE_TYPE">%1$s</xliff:g> שלך"</string>
@@ -46,7 +46,7 @@
<string name="summary_sensor_device_streaming" msgid="3413105061195145547">"‏לאפליקציה <xliff:g id="APP_NAME_0">%1$s</xliff:g> תהיה גישה לכל מה שיופעל במכשיר <xliff:g id="DEVICE_NAME_1">%3$s</xliff:g>.&lt;br/&gt;&lt;br/&gt;האפליקציה <xliff:g id="APP_NAME_2">%1$s</xliff:g> תוכל לשדר אודיו אל <xliff:g id="DEVICE_NAME_3">%3$s</xliff:g> עד שההרשאה הזו תוסר."</string>
<string name="helper_summary_sensor_device_streaming" msgid="8860174545653786353">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> מבקשת בשם <xliff:g id="DEVICE_NAME">%2$s</xliff:g> הרשאה כדי לשדר תכונות מערכת ואודיו בין המכשירים שלך."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"מכשיר"</string>
- <string name="summary_generic" msgid="1761976003668044801">"האפליקציה הזו תוכל לסנכרן מידע, כמו השם של מישהו שמתקשר, מהטלפון שלך למכשיר שבחרת"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"האפליקציה הזו תוכל לסנכרן מידע, כמו השם של מי שמתקשר, בין הטלפון שלך למכשיר שבחרת"</string>
<string name="consent_yes" msgid="8344487259618762872">"יש אישור"</string>
<string name="consent_no" msgid="2640796915611404382">"אין אישור"</string>
<string name="consent_cancel" msgid="5655005528379285841">"ביטול"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ka/strings.xml b/packages/CompanionDeviceManager/res/values-ka/strings.xml
index d9bc50a4f9f5..3fb5519b8177 100644
--- a/packages/CompanionDeviceManager/res/values-ka/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ka/strings.xml
@@ -26,7 +26,7 @@
<string name="profile_name_watch" msgid="576290739483672360">"საათი"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"აირჩიეთ მოწყობილობა, რომელიც უნდა მართოს &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; აპმა"</string>
<string name="chooser_title" msgid="2235819929238267637">"აირჩიეთ <xliff:g id="PROFILE_NAME">%1$s</xliff:g> დასაყენებლად"</string>
- <string name="single_device_title" msgid="4199861437545438606">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g>-ის ძებნა"</string>
+ <string name="single_device_title" msgid="4199861437545438606">"იძებნება <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"ეს აპი შეძლებს ინფორმაციის (მაგალითად, იმ ადამიანის სახელი, რომელიც გირეკავთ) სინქრონიზებას და თქვენს <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>-ზე არსებულ ამ ნებართვებზე წვდომას"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"ნება დართეთ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>-ს&lt;/strong&gt; მართოს &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"მოწყობილობა"</string>
diff --git a/packages/CompanionDeviceManager/res/values-kk/strings.xml b/packages/CompanionDeviceManager/res/values-kk/strings.xml
index 2fd8d96dfd7f..06b82ec171ee 100644
--- a/packages/CompanionDeviceManager/res/values-kk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-kk/strings.xml
@@ -17,16 +17,16 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; қолданбасына &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;? құрылғысына кіруге рұқсат беріңіз"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Құрылғыдағы (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>) <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> қосулы болуын тексеріп, <xliff:g id="PROFILE_NAME">%3$s</xliff:g> құрылғысын маңайында ұстаңыз."</string>
+ <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; қолданбасына &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; құрылғысының дерегін пайдалануға рұқсат беру керек пе?"</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Құрылғыдағы (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>) <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> қосулы болуын тексеріп, <xliff:g id="PROFILE_NAME">%3$s</xliff:g> одан алыстамауын қадағалаңыз."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Ешқандай құрылғы табылмады. Кейінірек қайталап көріңіз."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth және Wi-Fi"</string>
- <string name="profile_name_watch" msgid="576290739483672360">"сағат"</string>
+ <string name="profile_name_watch" msgid="576290739483672360">"Сағат"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; арқылы басқарылатын құрылғыны таңдаңыз"</string>
<string name="chooser_title" msgid="2235819929238267637">"Реттеу үшін <xliff:g id="PROFILE_NAME">%1$s</xliff:g> таңдаңыз"</string>
- <string name="single_device_title" msgid="4199861437545438606">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> құрылғысын іздеу"</string>
+ <string name="single_device_title" msgid="4199861437545438606">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> ізделіп жатыр"</string>
<string name="summary_watch" msgid="8134580124808507407">"Бұл қолданба қоңырау шалушының аты сияқты деректі синхрондай алады және құрылғыдағы (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>) осы рұқсаттарды пайдалана алады."</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; қолданбасына &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; құрылғысын басқаруға рұқсат беру керек пе?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"құрылғы"</string>
@@ -45,7 +45,7 @@
<string name="title_sensor_device_streaming" msgid="2395553261097861497">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; қолданбасына <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> құрылғыңыз бен &lt;strong&gt;<xliff:g id="DEVICE_NAME">%3$s</xliff:g>&lt;/strong&gt; құрылғысы арасында аудио және жүйе функцияларын трансляциялауға рұқсат берілсін бе?"</string>
<string name="summary_sensor_device_streaming" msgid="3413105061195145547">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> қолданбасы <xliff:g id="DEVICE_NAME_1">%3$s</xliff:g> құрылғыңызда ойнатылатын барлық контентті пайдалана алады.&lt;br/&gt;&lt;br/&gt;Бұл рұқсатты өшірмесеңіз, <xliff:g id="APP_NAME_2">%1$s</xliff:g> қолданбасы <xliff:g id="DEVICE_NAME_3">%3$s</xliff:g> құрылғысына аудионы трансляциялай алады."</string>
<string name="helper_summary_sensor_device_streaming" msgid="8860174545653786353">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасы <xliff:g id="DEVICE_NAME">%2$s</xliff:g> атынан құрылғыларыңыз арасында аудио және жүйе функцияларын трансляциялауға рұқсат сұрайды."</string>
- <string name="profile_name_generic" msgid="6851028682723034988">"құрылғы"</string>
+ <string name="profile_name_generic" msgid="6851028682723034988">"Құрылғы"</string>
<string name="summary_generic" msgid="1761976003668044801">"Бұл қолданба телефон мен таңдалған құрылғы арасында деректі (мысалы, қоңырау шалушының атын) синхрондай алады."</string>
<string name="consent_yes" msgid="8344487259618762872">"Рұқсат беру"</string>
<string name="consent_no" msgid="2640796915611404382">"Рұқсат бермеу"</string>
diff --git a/packages/CompanionDeviceManager/res/values-kn/strings.xml b/packages/CompanionDeviceManager/res/values-kn/strings.xml
index 8320708da102..269d729db9b1 100644
--- a/packages/CompanionDeviceManager/res/values-kn/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-kn/strings.xml
@@ -17,13 +17,13 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"ಕಂಪ್ಯಾನಿಯನ್ ಸಾಧನ ನಿರ್ವಾಹಕರು"</string>
- <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ಅನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸಬೇಕೆ?"</string>
+ <string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; ಅನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ಗೆ ಅನುಮತಿಸಬೇಕೆ?"</string>
<string name="message_discovery_soft_timeout" msgid="473346859407859161">"ಈ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ನಲ್ಲಿ <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> ಆನ್ ಆಗಿದೆಯೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ ಮತ್ತು ನಿಮ್ಮ <xliff:g id="PROFILE_NAME">%3$s</xliff:g> ಅನ್ನು ಸಮೀಪಲ್ಲಿಡಿ."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"ಯಾವುದೇ ಸಾಧನಗಳು ಕಂಡುಬಂದಿಲ್ಲ. ನಂತರ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"ಬ್ಲೂಟೂತ್"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"ವೈ-ಫೈ"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"ಬ್ಲೂಟೂತ್ ಮತ್ತು ವೈ-ಫೈ"</string>
- <string name="profile_name_watch" msgid="576290739483672360">"ವೀಕ್ಷಿಸಿ"</string>
+ <string name="profile_name_watch" msgid="576290739483672360">"ವಾಚ್"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ಮೂಲಕ ನಿರ್ವಹಿಸಬೇಕಾದ ಸಾಧನವನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
<string name="chooser_title" msgid="2235819929238267637">"ಸೆಟಪ್ ಮಾಡಲು <xliff:g id="PROFILE_NAME">%1$s</xliff:g> ಅನ್ನು ಆರಿಸಿ"</string>
<string name="single_device_title" msgid="4199861437545438606">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> ಗಾಗಿ ಹುಡುಕಲಾಗುತ್ತಿದೆ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ky/strings.xml b/packages/CompanionDeviceManager/res/values-ky/strings.xml
index af01cf7c8d7d..a7b4f40eecd1 100644
--- a/packages/CompanionDeviceManager/res/values-ky/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ky/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
<string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; колдонмосуна &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; түзмөгүнө кирүүгө уруксат бересизби?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"<xliff:g id="DEVICE_TYPE">%1$s</xliff:g> түзмөгүңүздөгү <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g>ыкмасын күйгүзүп, <xliff:g id="PROFILE_NAME">%3$s</xliff:g> профилиңизди жакын кармаңыз."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"<xliff:g id="DEVICE_TYPE">%1$s</xliff:g> түзмөгүңүз <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> аркылуу башка түзмөктөр менен байланыша аларын текшериңиз. <xliff:g id="PROFILE_NAME">%3$s</xliff:g> жакын кармаңыз."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Түзмөктөр табылган жок. Кийинчерээк кайталап көрүңүз."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
@@ -26,7 +26,7 @@
<string name="profile_name_watch" msgid="576290739483672360">"саат"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; аркылуу башкарыла турган түзмөктү тандаңыз"</string>
<string name="chooser_title" msgid="2235819929238267637">"Тууралоо үчүн <xliff:g id="PROFILE_NAME">%1$s</xliff:g> тандаңыз"</string>
- <string name="single_device_title" msgid="4199861437545438606">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> профилин издөө"</string>
+ <string name="single_device_title" msgid="4199861437545438606">"Түзмөк издөө (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>)"</string>
<string name="summary_watch" msgid="8134580124808507407">"Бул колдонмого маалыматты, мисалы, чалып жаткан адамдын аты-жөнүн шайкештирүүгө жана <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> түзмөгүңүздө төмөнкүлөрдү аткарууга уруксат берилет"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; колдонмосуна &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; түзмөгүн тескөөгө уруксат бересизби?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"түзмөк"</string>
diff --git a/packages/CompanionDeviceManager/res/values-lt/strings.xml b/packages/CompanionDeviceManager/res/values-lt/strings.xml
index 9fcf0fa22c67..5dd1d06d545e 100644
--- a/packages/CompanionDeviceManager/res/values-lt/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lt/strings.xml
@@ -26,7 +26,7 @@
<string name="profile_name_watch" msgid="576290739483672360">"laikrodį"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Įrenginio, kuris bus valdomas naudojant programą &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;, pasirinkimas"</string>
<string name="chooser_title" msgid="2235819929238267637">"Norimo nustatyti <xliff:g id="PROFILE_NAME">%1$s</xliff:g> pasirinkimas"</string>
- <string name="single_device_title" msgid="4199861437545438606">"Ieškoma <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
+ <string name="single_device_title" msgid="4199861437545438606">"Ieškoma: <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"Šiai programai bus leidžiama sinchronizuoti tam tikrą informaciją, pvz., skambinančio asmens vardą, ir pasiekti toliau nurodytus <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> leidimus"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Leisti &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; valdyti &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"įrenginio"</string>
diff --git a/packages/CompanionDeviceManager/res/values-lv/strings.xml b/packages/CompanionDeviceManager/res/values-lv/strings.xml
index 39b158d58666..40de5d1afad4 100644
--- a/packages/CompanionDeviceManager/res/values-lv/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-lv/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Palīgierīču pārzinis"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Vai atļaut lietotnei &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; piekļūt lietotnei &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Noteikti ieslēdziet šajā ierīcē (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>) <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> un gādājiet, lai <xliff:g id="PROFILE_NAME">%3$s</xliff:g> būtu tuvumā."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Pārliecinieties, vai <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> var izveidot savienojumu ar citām ierīcēm ar <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g>, un gādājiet, lai <xliff:g id="PROFILE_NAME">%3$s</xliff:g> būtu tuvumā."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Nav atrasta neviena ierīce. Lūdzu, vēlāk mēģiniet vēlreiz."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi‑Fi"</string>
@@ -26,7 +26,7 @@
<string name="profile_name_watch" msgid="576290739483672360">"pulkstenis"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Izvēlieties ierīci, ko pārvaldīt lietotnē &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
<string name="chooser_title" msgid="2235819929238267637">"Jāizvēlas <xliff:g id="PROFILE_NAME">%1$s</xliff:g> iestatīšanai"</string>
- <string name="single_device_title" msgid="4199861437545438606">"Tiek meklēta ierīce (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>)…"</string>
+ <string name="single_device_title" msgid="4199861437545438606">"Tiek meklēts <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"Šī lietotne drīkstēs sinhronizēt informāciju, piemēram, zvanītāja vārdu, un piekļūt šīm <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> atļaujām."</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Vai atļaut lietotnei &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; piekļūt ierīcei &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"ierīce"</string>
diff --git a/packages/CompanionDeviceManager/res/values-mk/strings.xml b/packages/CompanionDeviceManager/res/values-mk/strings.xml
index 107895d5a8da..db1c06a78b55 100644
--- a/packages/CompanionDeviceManager/res/values-mk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mk/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
- <string name="confirmation_title" msgid="2244241995958340998">"Дозволувате апликацијата &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; да пристапува до &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+ <string name="confirmation_title" msgid="2244241995958340998">"Дали дозволувате апликацијата &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; да пристапува до &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="message_discovery_soft_timeout" msgid="473346859407859161">"Погрижете се <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> да биде вклучен на овој <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> и вашиот <xliff:g id="PROFILE_NAME">%3$s</xliff:g> да биде во близина."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Не се најдени уреди. Обидете се повторно подоцна."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
@@ -77,8 +77,8 @@
<string name="permission_notifications_summary" msgid="2272810466047367030">"• Ги чита сите известувања, меѓу кои и податоци како контакти, пораки и фотографии&lt;br/&gt;• Испраќа известувања&lt;br/&gt;&lt;br/&gt;Може да управувате со способноста на апликацијава да чита и испраќа известувања кога било во „Поставки &gt; Известувања“."</string>
<string name="permission_storage_summary" msgid="3918240895519506417"></string>
<string name="permission_media_routing_control_summary" msgid="2714631092321412250">"Пристап до списокот со достапни уреди и контрола кои стримуваат или емитуваат аудио или видео од други апликации"</string>
- <string name="device_type" product="default" msgid="8268703872070046263">"Телефон"</string>
- <string name="device_type" product="tablet" msgid="5038791954983067774">"Таблет"</string>
+ <string name="device_type" product="default" msgid="8268703872070046263">"телефон"</string>
+ <string name="device_type" product="tablet" msgid="5038791954983067774">"таблет"</string>
<string name="device_type" product="tv" msgid="5355611506659405636">"ТВ"</string>
<string name="device_type" product="device" msgid="1526125965802507189">"уред"</string>
</resources>
diff --git a/packages/CompanionDeviceManager/res/values-mr/strings.xml b/packages/CompanionDeviceManager/res/values-mr/strings.xml
index 722156213623..03a5271df0d6 100644
--- a/packages/CompanionDeviceManager/res/values-mr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-mr/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"सहयोगी डिव्हाइस व्यवस्थापक"</string>
<string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; अ‍ॅपला &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; अ‍ॅक्सेस करण्याची अनुमती द्यायची आहे का?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"या <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> चे <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> सुरू असल्याची खात्री करा आणि तुमचे<xliff:g id="PROFILE_NAME">%3$s</xliff:g> जवळ ठेवा."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"या <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> चे <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> सुरू असल्याची खात्री करा आणि तुमचे <xliff:g id="PROFILE_NAME">%3$s</xliff:g> जवळ ठेवा."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"डिव्हाइस आढळली नाहीत. कृपया नंतर पुन्हा प्रयत्न करा."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"ब्लूटूथ"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"वाय-फाय"</string>
diff --git a/packages/CompanionDeviceManager/res/values-nb/strings.xml b/packages/CompanionDeviceManager/res/values-nb/strings.xml
index 1d62349da406..6008299e1ee0 100644
--- a/packages/CompanionDeviceManager/res/values-nb/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-nb/strings.xml
@@ -18,16 +18,16 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Vil du gi &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;-appen tilgang til &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Sørg for at <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> har <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> slått på, og hold <xliff:g id="PROFILE_NAME">%3$s</xliff:g> i nærheten."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Sørg for at denne enheten (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>) har <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> slått på, og hold den andre enheten (<xliff:g id="PROFILE_NAME">%3$s</xliff:g>) i nærheten."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Fant ingen enheter. Prøv på nytt senere."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wifi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth og wifi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"klokke"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Velg en enhet som skal administreres av &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Velg <xliff:g id="PROFILE_NAME">%1$s</xliff:g> som skal konfigureres"</string>
+ <string name="chooser_title" msgid="2235819929238267637">"Velg enheten (<xliff:g id="PROFILE_NAME">%1$s</xliff:g>) som skal konfigureres"</string>
<string name="single_device_title" msgid="4199861437545438606">"Ser etter en <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
- <string name="summary_watch" msgid="8134580124808507407">"Denne appen får tillatelse til å synkronisere informasjon, for eksempel navnet til folk som ringer, og har disse tillatelsene på <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+ <string name="summary_watch" msgid="8134580124808507407">"Denne appen får tillatelse til å synkronisere informasjon, for eksempel navnet til folk som ringer, og har disse tillatelsene på enheten din (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Vil du la &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; administrere &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"enheten"</string>
<string name="summary_glasses" msgid="5469208629679579157">"Denne appen får disse tillatelsene på <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ne/strings.xml b/packages/CompanionDeviceManager/res/values-ne/strings.xml
index 694abdd20814..dd8b1ae345ec 100644
--- a/packages/CompanionDeviceManager/res/values-ne/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ne/strings.xml
@@ -18,16 +18,16 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"सहयोगी डिभाइसको प्रबन्धक"</string>
<string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; एपलाई &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; प्रयोग गर्ने अनुमति दिने हो?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"यो <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> को <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> अन गरिएको छ भन्ने कुरा सुनिश्चित गर्नुहोस् अनि आफ्नो <xliff:g id="PROFILE_NAME">%3$s</xliff:g> नजिकै राख्नुहोस्।"</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"यो <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>को <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> अन गरिएको छ भन्ने कुरा सुनिश्चित गर्नुहोस् अनि आफ्नो <xliff:g id="PROFILE_NAME">%3$s</xliff:g> नजिकै राख्नुहोस्।"</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"कुनै पनि डिभाइस भेटिएन। कृपया पछि फेरि प्रयास गर्नुहोस्।"</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"ब्लुटुथ"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"ब्लुटुथ तथा Wi-Fi"</string>
- <string name="profile_name_watch" msgid="576290739483672360">"घडी"</string>
+ <string name="profile_name_watch" msgid="576290739483672360">"स्मार्ट वाच"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"आफूले &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; प्रयोग गरी व्यवस्थापन गर्न चाहेको डिभाइस चयन गर्नुहोस्"</string>
<string name="chooser_title" msgid="2235819929238267637">"सेट अप गर्नका लागि <xliff:g id="PROFILE_NAME">%1$s</xliff:g> छनौट गर्नुहोस्"</string>
<string name="single_device_title" msgid="4199861437545438606">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> खोजिँदै छ"</string>
- <string name="summary_watch" msgid="8134580124808507407">"तपाईंको <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> मा यो एपलाई कल गर्ने व्यक्तिको नाम जस्ता जानकारी सिंक गर्ने र यी कुराहरू गर्ने अनुमति दिइने छ"</string>
+ <string name="summary_watch" msgid="8134580124808507407">"तपाईंको <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>मा यो एपलाई कल गर्ने व्यक्तिको नाम जस्ता जानकारी सिंक गर्ने र निम्न कुरासँग सम्बन्धित अनुमतिहरू दिइने छ"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; लाई &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt; व्यवस्थापन गर्ने अनुमति दिने हो?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"डिभाइस"</string>
<string name="summary_glasses" msgid="5469208629679579157">"तपाईंको <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> मा यो एपलाई निम्न अनुमति दिइने छ:"</string>
@@ -45,8 +45,8 @@
<string name="title_sensor_device_streaming" msgid="2395553261097861497">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; लाई तपाईंको <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> र &lt;strong&gt;<xliff:g id="DEVICE_NAME">%3$s</xliff:g>&lt;/strong&gt; का बिचमा अडियो र सिस्टमका सुविधाहरू स्ट्रिम गर्ने अनुमति दिने हो?"</string>
<string name="summary_sensor_device_streaming" msgid="3413105061195145547">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> ले तपाईंको <xliff:g id="DEVICE_NAME_1">%3$s</xliff:g> मा प्ले गरिने सबै कुरा एक्सेस गर्न सक्ने छ।&lt;br/&gt;&lt;br/&gt;तपाईंले यो अनुमति रद्द नगरेसम्म <xliff:g id="APP_NAME_2">%1$s</xliff:g> ले <xliff:g id="DEVICE_NAME_3">%3$s</xliff:g> मा अडियो स्ट्रिम गर्न पाइराख्ने छ।"</string>
<string name="helper_summary_sensor_device_streaming" msgid="8860174545653786353">"<xliff:g id="APP_NAME">%1$s</xliff:g> ले डिभाइस <xliff:g id="DEVICE_NAME">%2$s</xliff:g> को तर्फबाट तपाईंका डिभाइसहरूका बिचमा अडियो र सिस्टमका सुविधाहरू स्ट्रिम गर्ने अनुमति माग्दै छ।"</string>
- <string name="profile_name_generic" msgid="6851028682723034988">"यन्त्र"</string>
- <string name="summary_generic" msgid="1761976003668044801">"यो एपले तपाईंको फोन र तपाईंले छनौट गर्ने डिभाइसका बिचमा कल गर्ने व्यक्तिको नाम जस्ता जानकारी सिंक गर्न सक्ने छ।"</string>
+ <string name="profile_name_generic" msgid="6851028682723034988">"डिभाइस"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"यो एपले तपाईंको फोन र छनौट गरिएको डिभाइसका बिचमा कल गर्ने व्यक्तिको नाम जस्ता जानकारी सिंक गर्न सक्ने छ"</string>
<string name="consent_yes" msgid="8344487259618762872">"अनुमति दिनुहोस्"</string>
<string name="consent_no" msgid="2640796915611404382">"अनुमति नदिनुहोस्"</string>
<string name="consent_cancel" msgid="5655005528379285841">"रद्द गर्नुहोस्"</string>
@@ -63,7 +63,7 @@
<string name="permission_microphone" msgid="2152206421428732949">"माइक्रोफोन"</string>
<string name="permission_call_logs" msgid="5546761417694586041">"कल लगहरू"</string>
<string name="permission_nearby_devices" msgid="7530973297737123481">"नजिकैका डिभाइसहरू"</string>
- <string name="permission_media_routing_control" msgid="5498639511586715253">"मिडिया आउटपुट बदल्नुहोस्"</string>
+ <string name="permission_media_routing_control" msgid="5498639511586715253">"मिडिया आउटपुट बदल्ने"</string>
<string name="permission_storage" msgid="6831099350839392343">"फोटो र मिडिया"</string>
<string name="permission_notifications" msgid="4099418516590632909">"नोटिफिकेसनहरू"</string>
<string name="permission_phone_summary" msgid="8246321093970051702">"फोन कल गर्ने र व्यवस्थापन गर्ने"</string>
diff --git a/packages/CompanionDeviceManager/res/values-nl/strings.xml b/packages/CompanionDeviceManager/res/values-nl/strings.xml
index 5e389611eaa4..22feb9deca17 100644
--- a/packages/CompanionDeviceManager/res/values-nl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-nl/strings.xml
@@ -46,7 +46,7 @@
<string name="summary_sensor_device_streaming" msgid="3413105061195145547">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> krijgt toegang tot alles wat wordt afgespeeld op je <xliff:g id="DEVICE_NAME_1">%3$s</xliff:g>.&lt;br/&gt;&lt;br/&gt;<xliff:g id="APP_NAME_2">%1$s</xliff:g> kan audio naar <xliff:g id="DEVICE_NAME_3">%3$s</xliff:g> streamen totdat je de toegang tot dit recht intrekt."</string>
<string name="helper_summary_sensor_device_streaming" msgid="8860174545653786353">"<xliff:g id="APP_NAME">%1$s</xliff:g> vraagt namens <xliff:g id="DEVICE_NAME">%2$s</xliff:g> toestemming om audio en systeemfuncties te streamen tussen je apparaten."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"apparaat"</string>
- <string name="summary_generic" msgid="1761976003668044801">"Deze app kan informatie, zoals de naam van iemand die belt, synchroniseren tussen je telefoon en het gekozen apparaat"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Deze app kan informatie synchroniseren (zoals de naam van iemand die belt) tussen je telefoon en het gekozen apparaat"</string>
<string name="consent_yes" msgid="8344487259618762872">"Toestaan"</string>
<string name="consent_no" msgid="2640796915611404382">"Niet toestaan"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Annuleren"</string>
diff --git a/packages/CompanionDeviceManager/res/values-or/strings.xml b/packages/CompanionDeviceManager/res/values-or/strings.xml
index 14dcc18a532d..96c62070ee62 100644
--- a/packages/CompanionDeviceManager/res/values-or/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-or/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"ସହଯୋଗୀ ଡିଭାଇସ୍ ପରିଚାଳକ"</string>
<string name="confirmation_title" msgid="2244241995958340998">"&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;କୁ ଆକ୍ସେସ କରିବା ପାଇଁ &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ଆପକୁ ଅନୁମତି ଦେବେ?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"ସୁନିଶ୍ଚିତ ହୁଏନ୍ତୁ ଏହି <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ରେ <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> ଚାଲୁ କରାଯାଇଛି ଏବଂ ଆପଣଙ୍କର <xliff:g id="PROFILE_NAME">%3$s</xliff:g> ଆଖପାଖରେ ରଖନ୍ତୁ।"</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"ସୁନିଶ୍ଚିତ ହୁଏନ୍ତୁ ଯେ ଏହି <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>ରେ <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> ଚାଲୁ କରାଯାଇଛି ଏବଂ ଆପଣଙ୍କର <xliff:g id="PROFILE_NAME">%3$s</xliff:g> ଆଖପାଖରେ ରଖନ୍ତୁ।"</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"କୌଣସି ଡିଭାଇସ ମିଳିଲା ନାହିଁ। ଦୟାକରି ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"ବ୍ଲୁଟୁଥ"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"ୱାଇ-ଫାଇ"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pl/strings.xml b/packages/CompanionDeviceManager/res/values-pl/strings.xml
index 90bc1e3bc34b..62a0d407d7ad 100644
--- a/packages/CompanionDeviceManager/res/values-pl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pl/strings.xml
@@ -18,14 +18,14 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Menedżer urządzeń towarzyszących"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Zezwolić aplikacji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; na dostęp do urządzenia &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Upewnij się, że <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ma włączoną funkcję <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g>, i trzymaj urządzenie <xliff:g id="PROFILE_NAME">%3$s</xliff:g> w pobliżu."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Upewnij się, że <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> ma włączoną funkcję <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g>, i trzymaj <xliff:g id="PROFILE_NAME">%3$s</xliff:g> w pobliżu."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Nie znaleziono urządzeń. Spróbuj ponownie później."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth i Wi-Fi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"zegarek"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Wybierz urządzenie, którym ma zarządzać aplikacja &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Wybierz profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, aby go skonfigurować"</string>
+ <string name="chooser_title" msgid="2235819929238267637">"Wybierz <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, aby go skonfigurować"</string>
<string name="single_device_title" msgid="4199861437545438606">"Szukam: <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"Aplikacja będzie mogła synchronizować informacje takie jak nazwa dzwoniącego oraz korzystać z tych uprawnień na Twoim urządzeniu (<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>)"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Zezwolić na dostęp aplikacji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; do urządzenia &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml b/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
index 073fa260c401..81c50c1c9142 100644
--- a/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt-rBR/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Gerenciador de dispositivos complementar"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Permitir que o app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acesse o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Confira se o <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> tem o <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> ativado e se o <xliff:g id="PROFILE_NAME">%3$s</xliff:g> está por perto."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Confira se o <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> está com o <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> ativado e se o <xliff:g id="PROFILE_NAME">%3$s</xliff:g> está por perto."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Nenhum dispositivo foi encontrado. Tente de novo mais tarde."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
diff --git a/packages/CompanionDeviceManager/res/values-pt/strings.xml b/packages/CompanionDeviceManager/res/values-pt/strings.xml
index 073fa260c401..81c50c1c9142 100644
--- a/packages/CompanionDeviceManager/res/values-pt/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-pt/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Gerenciador de dispositivos complementar"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Permitir que o app &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; acesse o dispositivo &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Confira se o <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> tem o <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> ativado e se o <xliff:g id="PROFILE_NAME">%3$s</xliff:g> está por perto."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Confira se o <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> está com o <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> ativado e se o <xliff:g id="PROFILE_NAME">%3$s</xliff:g> está por perto."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Nenhum dispositivo foi encontrado. Tente de novo mais tarde."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ru/strings.xml b/packages/CompanionDeviceManager/res/values-ru/strings.xml
index 42acfb7a4d36..a5b5b594608c 100644
--- a/packages/CompanionDeviceManager/res/values-ru/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ru/strings.xml
@@ -46,7 +46,7 @@
<string name="summary_sensor_device_streaming" msgid="3413105061195145547">"Приложение \"<xliff:g id="APP_NAME_0">%1$s</xliff:g>\" получит доступ ко всему, что воспроизводится на устройстве \"<xliff:g id="DEVICE_NAME_1">%3$s</xliff:g>\".&lt;br/&gt;&lt;br/&gt;Приложение \"<xliff:g id="APP_NAME_2">%1$s</xliff:g>\" сможет транслировать аудио на устройство \"<xliff:g id="DEVICE_NAME_3">%3$s</xliff:g>\", пока вы не отзовете это разрешение."</string>
<string name="helper_summary_sensor_device_streaming" msgid="8860174545653786353">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" от имени устройства \"<xliff:g id="DEVICE_NAME">%2$s</xliff:g>\" запрашивает разрешение транслировать аудио и системные функции между устройствами."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"устройство"</string>
- <string name="summary_generic" msgid="1761976003668044801">"Приложение сможет синхронизировать информацию между телефоном и выбранным устройством, например данные из журнала звонков."</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Приложение сможет синхронизировать информацию между телефоном и выбранным устройством, например имя того, кто вам звонит."</string>
<string name="consent_yes" msgid="8344487259618762872">"Разрешить"</string>
<string name="consent_no" msgid="2640796915611404382">"Запретить"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Отмена"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sk/strings.xml b/packages/CompanionDeviceManager/res/values-sk/strings.xml
index 9ee2ce574cc0..f46252eda366 100644
--- a/packages/CompanionDeviceManager/res/values-sk/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sk/strings.xml
@@ -25,7 +25,7 @@
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth a Wi-Fi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"hodinky"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Vyberte zariadenie, ktoré bude spravovať aplikácia &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Vyberte profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, ktorý nastavíte"</string>
+ <string name="chooser_title" msgid="2235819929238267637">"Vyberte profil <xliff:g id="PROFILE_NAME">%1$s</xliff:g>, ktorý chcete nastaviť"</string>
<string name="single_device_title" msgid="4199861437545438606">"Hľadá sa zariadenie <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"Táto aplikácia bude môcť synchronizovať informácie, napríklad meno volajúceho, a získavať prístup k týmto povoleniam v zariadení <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Chcete povoliť aplikácii &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; spravovať zariadenie &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sl/strings.xml b/packages/CompanionDeviceManager/res/values-sl/strings.xml
index 3d08276d0e19..0696c986d3a4 100644
--- a/packages/CompanionDeviceManager/res/values-sl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sl/strings.xml
@@ -18,16 +18,16 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Upravitelj spremljevalnih naprav"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Želite aplikaciji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; dovoliti dostop do naprave &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Poskrbite, da je v napravi <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> vklopljena nastavitev »<xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g>«, in napravo <xliff:g id="PROFILE_NAME">%3$s</xliff:g> imejte v bližini."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Poskrbite, da ima <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> vklopljen <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g>, <xliff:g id="PROFILE_NAME">%3$s</xliff:g> pa naj bo v bližini."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Ni naprav. Poskusite znova pozneje."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth in Wi-Fi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"ura"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Izbira naprave, ki jo bo upravljala aplikacija &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Izberite profil naprave »<xliff:g id="PROFILE_NAME">%1$s</xliff:g>« za nastavitev"</string>
- <string name="single_device_title" msgid="4199861437545438606">"Iskanje naprave <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
- <string name="summary_watch" msgid="8134580124808507407">"Ta aplikacija bo lahko sinhronizirala podatke, na primer ime klicatelja, in dostopala do teh dovoljenj v napravi »<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>«."</string>
+ <string name="chooser_title" msgid="2235819929238267637">"Izberite za nastavitev: <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
+ <string name="single_device_title" msgid="4199861437545438606">"Iskanje: <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
+ <string name="summary_watch" msgid="8134580124808507407">"Ta aplikacija bo lahko sinhronizirala podatke, na primer ime klicatelja, in dostopala do teh dovoljenj v: <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>."</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Želite aplikaciji &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; dovoliti upravljanje naprave &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"naprava"</string>
<string name="summary_glasses" msgid="5469208629679579157">"Ta aplikacija bo lahko dostopala do teh dovoljenj v napravi »<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>«."</string>
diff --git a/packages/CompanionDeviceManager/res/values-sq/strings.xml b/packages/CompanionDeviceManager/res/values-sq/strings.xml
index de3232201da0..02f88ce11637 100644
--- a/packages/CompanionDeviceManager/res/values-sq/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sq/strings.xml
@@ -18,12 +18,12 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Menaxheri i pajisjes shoqëruese"</string>
<string name="confirmation_title" msgid="2244241995958340998">"T\'i lejohet aplikacionit &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; qasja te &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Sigurohu që ky <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> të ketë të aktivizuar<xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> dhe mbaje <xliff:g id="PROFILE_NAME">%3$s</xliff:g> tënde pranë."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Sigurohu që ky <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> të ketë të aktivizuar <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> dhe kjo <xliff:g id="PROFILE_NAME">%3$s</xliff:g> të mbahet pranë."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Nuk u gjet asnjë pajisje. Provo përsëri më vonë."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth-in"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth-in dhe Wi-Fi"</string>
- <string name="profile_name_watch" msgid="576290739483672360">"ora inteligjente"</string>
+ <string name="profile_name_watch" msgid="576290739483672360">"orë inteligjente"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Zgjidh një pajisje që do të menaxhohet nga &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
<string name="chooser_title" msgid="2235819929238267637">"Zgjidh një <xliff:g id="PROFILE_NAME">%1$s</xliff:g> për konfigurimin"</string>
<string name="single_device_title" msgid="4199861437545438606">"Po kërkon për një <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
@@ -45,7 +45,7 @@
<string name="title_sensor_device_streaming" msgid="2395553261097861497">"Të lejohet që &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; të transmetojë audion dhe veçoritë e sistemit mes <xliff:g id="DEVICE_TYPE">%2$s</xliff:g> dhe &lt;strong&gt;<xliff:g id="DEVICE_NAME">%3$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="summary_sensor_device_streaming" msgid="3413105061195145547">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> do të ketë qasje në çdo gjë që luhet në pajisjen tënde <xliff:g id="DEVICE_NAME_1">%3$s</xliff:g>.&lt;br/&gt;&lt;br/&gt;<xliff:g id="APP_NAME_2">%1$s</xliff:g> do të mund të transmetojë audion te <xliff:g id="DEVICE_NAME_3">%3$s</xliff:g> derisa të heqësh qasjen për këtë leje."</string>
<string name="helper_summary_sensor_device_streaming" msgid="8860174545653786353">"<xliff:g id="APP_NAME">%1$s</xliff:g> po kërkon leje në emër të <xliff:g id="DEVICE_NAME">%2$s</xliff:g> për të transmetuar audion dhe veçoritë e sistemit mes pajisjeve të tua"</string>
- <string name="profile_name_generic" msgid="6851028682723034988">"pajisja"</string>
+ <string name="profile_name_generic" msgid="6851028682723034988">"pajisje"</string>
<string name="summary_generic" msgid="1761976003668044801">"Ky aplikacion do të mund të sinkronizojë informacione, si p.sh emrin e dikujt që po telefonon, mes telefonit tënd dhe pajisjes së zgjedhur."</string>
<string name="consent_yes" msgid="8344487259618762872">"Lejo"</string>
<string name="consent_no" msgid="2640796915611404382">"Mos lejo"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sr/strings.xml b/packages/CompanionDeviceManager/res/values-sr/strings.xml
index a86d1e1a5639..5f7e53dadbae 100644
--- a/packages/CompanionDeviceManager/res/values-sr/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sr/strings.xml
@@ -18,16 +18,16 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Менаџер придруженог уређаја"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Дозволите да апликација &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; приступа уређају &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Уверите се да је за <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> укључен <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> и да у близини имате <xliff:g id="PROFILE_NAME">%3$s</xliff:g>."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Уверите се да је на <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> укључен <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> и да у близини имате <xliff:g id="PROFILE_NAME">%3$s</xliff:g>."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Није пронађен ниједан уређај. Пробајте поново касније."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"WiFi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth и WiFi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"сат"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Одаберите уређај којим ће управљати апликација &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Одаберите профил <xliff:g id="PROFILE_NAME">%1$s</xliff:g> који желите да подесите"</string>
+ <string name="chooser_title" msgid="2235819929238267637">"Одаберите <xliff:g id="PROFILE_NAME">%1$s</xliff:g> који желите да подесите"</string>
<string name="single_device_title" msgid="4199861437545438606">"Тражи се <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
- <string name="summary_watch" msgid="8134580124808507407">"Овој апликацији ће бити дозвољено да синхронизује податке, попут имена позиваоца, и приступа тим дозволама на уређају <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
+ <string name="summary_watch" msgid="8134580124808507407">"Овој апликацији ће бити дозвољено да синхронизује податке, попут имена позиваоца, и приступа следећим дозволама на <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Желите ли да дозволите да &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; управља уређајем &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"уређај"</string>
<string name="summary_glasses" msgid="5469208629679579157">"Овој апликацији ће бити дозвољено да приступа овим дозволама на уређају <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
diff --git a/packages/CompanionDeviceManager/res/values-sv/strings.xml b/packages/CompanionDeviceManager/res/values-sv/strings.xml
index 779079092f50..a622ff4465bd 100644
--- a/packages/CompanionDeviceManager/res/values-sv/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-sv/strings.xml
@@ -18,7 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"Companion Device Manager"</string>
<string name="confirmation_title" msgid="2244241995958340998">"Vill du tillåta att appen &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; får åtkomst till &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
- <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Se till att <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> har <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> aktiverat och håll <xliff:g id="PROFILE_NAME">%3$s</xliff:g> i närheten."</string>
+ <string name="message_discovery_soft_timeout" msgid="473346859407859161">"Se till att denna <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> har <xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g> aktiverat och håll din <xliff:g id="PROFILE_NAME">%3$s</xliff:g> i närheten."</string>
<string name="message_discovery_hard_timeout" msgid="677514663495711424">"Inga enheter hittades. Försök igen senare."</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"Bluetooth"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"Wifi"</string>
@@ -26,7 +26,7 @@
<string name="profile_name_watch" msgid="576290739483672360">"klocka"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Välj en enhet för hantering av &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
<string name="chooser_title" msgid="2235819929238267637">"Välj en <xliff:g id="PROFILE_NAME">%1$s</xliff:g> för konfigurering"</string>
- <string name="single_device_title" msgid="4199861437545438606">"Söker efter ett <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
+ <string name="single_device_title" msgid="4199861437545438606">"Söker efter en <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"Appen får synkronisera information, till exempel namnet på någon som ringer, och får åtkomst till dessa behörigheter på din <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Tillåt att &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; hanterar &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"enhet"</string>
diff --git a/packages/CompanionDeviceManager/res/values-te/strings.xml b/packages/CompanionDeviceManager/res/values-te/strings.xml
index b39b58a39df7..f353b800cc3e 100644
--- a/packages/CompanionDeviceManager/res/values-te/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-te/strings.xml
@@ -24,7 +24,7 @@
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"బ్లూటూత్, Wi-Fi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"వాచ్"</string>
- <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; ద్వారా మేనేజ్ చేయబడే పరికరాన్ని ఎంచుకోండి"</string>
+ <string name="chooser_title_non_profile" msgid="6035023914517087400">"&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; మేనేజ్ చేయాల్సిన పరికరాన్ని ఎంచుకోండి"</string>
<string name="chooser_title" msgid="2235819929238267637">"సెటప్ చేయడానికి <xliff:g id="PROFILE_NAME">%1$s</xliff:g>‌ను ఎంచుకోండి"</string>
<string name="single_device_title" msgid="4199861437545438606">"<xliff:g id="PROFILE_NAME">%1$s</xliff:g> కోసం స్కాన్ చేస్తోంది"</string>
<string name="summary_watch" msgid="8134580124808507407">"కాల్ చేస్తున్న వారి పేరు వంటి సమాచారాన్ని సింక్ చేయడానికి, మీ <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>‌లో ఈ అనుమతులను యాక్సెస్ చేయడానికి ఈ యాప్ అనుమతించబడుతుంది"</string>
@@ -46,7 +46,7 @@
<string name="summary_sensor_device_streaming" msgid="3413105061195145547">"<xliff:g id="APP_NAME_0">%1$s</xliff:g> మీ <xliff:g id="DEVICE_NAME_1">%3$s</xliff:g>‌లో ప్లే చేయబడిన దేనికైనా యాక్సెస్ కలిగి ఉంటుంది.&lt;br/&gt;&lt;br/&gt;మీరు ఈ అనుమతికి యాక్సెస్‌ను తీసివేసే వరకు <xliff:g id="APP_NAME_2">%1$s</xliff:g> ఆడియోను <xliff:g id="DEVICE_NAME_3">%3$s</xliff:g>‌కు స్ట్రీమ్ చేయగలదు."</string>
<string name="helper_summary_sensor_device_streaming" msgid="8860174545653786353">"మీ పరికరాల మధ్య ఆడియో, సిస్టమ్ ఫీచర్‌లను స్ట్రీమ్ చేయడానికి <xliff:g id="DEVICE_NAME">%2$s</xliff:g> తరపున <xliff:g id="APP_NAME">%1$s</xliff:g> యాప్ అనుమతిని రిక్వెస్ట్ చేస్తోంది."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"పరికరం"</string>
- <string name="summary_generic" msgid="1761976003668044801">"కాల్ చేస్తున్న వారి పేరు వంటి సమాచారాన్ని ఈ యాప్ మీ ఫోన్ కు, ఎంచుకున్న పరికరానికీ మధ్య సింక్ చేయగలుగుతుంది"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"ఈ యాప్, కాల్ చేస్తున్న వారి పేరు లాంటి సమాచారాన్ని మీ ఫోన్‌కు, సెలెక్ట్ అయిన పరికరానికి మధ్య సింక్ చేస్తుంది."</string>
<string name="consent_yes" msgid="8344487259618762872">"అనుమతించండి"</string>
<string name="consent_no" msgid="2640796915611404382">"అనుమతించవద్దు"</string>
<string name="consent_cancel" msgid="5655005528379285841">"రద్దు చేయండి"</string>
diff --git a/packages/CompanionDeviceManager/res/values-tl/strings.xml b/packages/CompanionDeviceManager/res/values-tl/strings.xml
index 9150a48fafdd..8d5470c68c3f 100644
--- a/packages/CompanionDeviceManager/res/values-tl/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-tl/strings.xml
@@ -25,7 +25,7 @@
<string name="discovery_mixed" msgid="7071466134150760127">"Bluetooth at Wi-Fi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"relo"</string>
<string name="chooser_title_non_profile" msgid="6035023914517087400">"Pumili ng device na papamahalaan ng &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;"</string>
- <string name="chooser_title" msgid="2235819929238267637">"Pumili ng <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para mag-set up"</string>
+ <string name="chooser_title" msgid="2235819929238267637">"Pumili ng <xliff:g id="PROFILE_NAME">%1$s</xliff:g> para i-set up"</string>
<string name="single_device_title" msgid="4199861437545438606">"Hinahanap ang <xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"Papayagan ang app na ito na mag-sync ng impormasyon, tulad ng pangalan ng isang taong tumatawag, at ma-access ang mga pahintulot na ito sa iyong <xliff:g id="DEVICE_TYPE">%1$s</xliff:g>"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"Payagan ang &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; na pamahalaan ang &lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
@@ -46,7 +46,7 @@
<string name="summary_sensor_device_streaming" msgid="3413105061195145547">"Magkakaroon ng access ang <xliff:g id="APP_NAME_0">%1$s</xliff:g> sa anumang pine-play sa iyong <xliff:g id="DEVICE_NAME_1">%3$s</xliff:g>.&lt;br/&gt;&lt;br/&gt;Makakapag-stream ang <xliff:g id="APP_NAME_2">%1$s</xliff:g> ng audio sa <xliff:g id="DEVICE_NAME_3">%3$s</xliff:g> hanggang sa alisin mo ang access sa pahintulot na ito."</string>
<string name="helper_summary_sensor_device_streaming" msgid="8860174545653786353">"Humihingi ang <xliff:g id="APP_NAME">%1$s</xliff:g> ng pahintulot para sa <xliff:g id="DEVICE_NAME">%2$s</xliff:g> na mag-stream ng audio at mga feature ng system sa pagitan ng iyong mga device."</string>
<string name="profile_name_generic" msgid="6851028682723034988">"device"</string>
- <string name="summary_generic" msgid="1761976003668044801">"Magagawa ng app na ito na mag-sync ng impormasyon, tulad ng pangalan ng isang taong tumatawag, sa pagitan ng iyong telepono at ng napiling device"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"Magagawa ng app na ito na mag-sync ng impormasyon, tulad ng pangalan ng taong tumatawag, sa pagitan ng telepono mo at ng napiling device"</string>
<string name="consent_yes" msgid="8344487259618762872">"Payagan"</string>
<string name="consent_no" msgid="2640796915611404382">"Huwag payagan"</string>
<string name="consent_cancel" msgid="5655005528379285841">"Kanselahin"</string>
diff --git a/packages/CompanionDeviceManager/res/values-ur/strings.xml b/packages/CompanionDeviceManager/res/values-ur/strings.xml
index e502a792d23b..f517742973ff 100644
--- a/packages/CompanionDeviceManager/res/values-ur/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-ur/strings.xml
@@ -24,7 +24,7 @@
<string name="discovery_wifi" msgid="1551782459721758773">"Wi-Fi"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"‏بلوٹوتھ اور Wi-Fi"</string>
<string name="profile_name_watch" msgid="576290739483672360">"دیکھیں"</string>
- <string name="chooser_title_non_profile" msgid="6035023914517087400">"‏‎&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;‎ کے ذریعے منتخب کیے جانے کیلئے آلہ منتخب کریں"</string>
+ <string name="chooser_title_non_profile" msgid="6035023914517087400">"‏کوئی آلہ منتخب کریں جس کا نظم و نسق &lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt; کرے"</string>
<string name="chooser_title" msgid="2235819929238267637">"سیٹ اپ کرنے کے لیے <xliff:g id="PROFILE_NAME">%1$s</xliff:g> کا انتخاب کریں"</string>
<string name="single_device_title" msgid="4199861437545438606">"‫<xliff:g id="PROFILE_NAME">%1$s</xliff:g> کو تلاش کیا جا رہا ہے"</string>
<string name="summary_watch" msgid="8134580124808507407">"اس ایپ کو آپ کے <xliff:g id="DEVICE_TYPE">%1$s</xliff:g> پر کسی کال کرنے والے کے نام جیسی معلومات کی مطابقت پذیری کرنے اور ان اجازتوں تک رسائی کی اجازت ہوگی"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
index 4360092564ea..ccc046b3c3f7 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rCN/strings.xml
@@ -17,15 +17,15 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="4470785958457506021">"配套设备管理器"</string>
- <string name="confirmation_title" msgid="2244241995958340998">"允许应用&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;访问&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
+ <string name="confirmation_title" msgid="2244241995958340998">"要允许“&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;”应用访问“&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;”吗?"</string>
<string name="message_discovery_soft_timeout" msgid="473346859407859161">"请确保此<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>已开启<xliff:g id="DISCOVERY_METHOD">%2$s</xliff:g>,并将<xliff:g id="PROFILE_NAME">%3$s</xliff:g>放在附近。"</string>
- <string name="message_discovery_hard_timeout" msgid="677514663495711424">"找不到设备,请稍后重试。"</string>
+ <string name="message_discovery_hard_timeout" msgid="677514663495711424">"未找到设备,请稍后重试。"</string>
<string name="discovery_bluetooth" msgid="5693557668470016164">"蓝牙"</string>
<string name="discovery_wifi" msgid="1551782459721758773">"WLAN"</string>
<string name="discovery_mixed" msgid="7071466134150760127">"蓝牙和 WLAN"</string>
<string name="profile_name_watch" msgid="576290739483672360">"手表"</string>
- <string name="chooser_title_non_profile" msgid="6035023914517087400">"选择要由&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;管理的设备"</string>
- <string name="chooser_title" msgid="2235819929238267637">"选择 <xliff:g id="PROFILE_NAME">%1$s</xliff:g> 进行设置"</string>
+ <string name="chooser_title_non_profile" msgid="6035023914517087400">"选择要由“&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;”管理的设备"</string>
+ <string name="chooser_title" msgid="2235819929238267637">"选择要设置的<xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="single_device_title" msgid="4199861437545438606">"寻找<xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="summary_watch" msgid="8134580124808507407">"该应用将能同步信息(例如来电者的姓名),并能获得您<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上的以下权限"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"允许&lt;strong&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/strong&gt;管理&lt;strong&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/strong&gt;?"</string>
diff --git a/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml b/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
index 2bfcaf296420..a96e43fb135e 100644
--- a/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
+++ b/packages/CompanionDeviceManager/res/values-zh-rTW/strings.xml
@@ -27,7 +27,7 @@
<string name="chooser_title_non_profile" msgid="6035023914517087400">"選擇要讓「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;管理的裝置"</string>
<string name="chooser_title" msgid="2235819929238267637">"選擇要設定的<xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
<string name="single_device_title" msgid="4199861437545438606">"尋找<xliff:g id="PROFILE_NAME">%1$s</xliff:g>"</string>
- <string name="summary_watch" msgid="8134580124808507407">"這個應用程式將可同步處理資訊 (例如來電者名稱) 及取得<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上的這些權限"</string>
+ <string name="summary_watch" msgid="8134580124808507407">"這個應用程式可同步處理資訊 (例如來電者名稱) 和取得<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上的這些權限"</string>
<string name="confirmation_title_glasses" msgid="8288346850537727333">"要允許「<xliff:g id="APP_NAME">%1$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;管理「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」&lt;strong&gt;&lt;/strong&gt;嗎?"</string>
<string name="profile_name_glasses" msgid="3506504967216601277">"裝置"</string>
<string name="summary_glasses" msgid="5469208629679579157">"這個應用程式將可取得<xliff:g id="DEVICE_TYPE">%1$s</xliff:g>上的這些權限"</string>
@@ -46,7 +46,7 @@
<string name="summary_sensor_device_streaming" msgid="3413105061195145547">"「<xliff:g id="APP_NAME_0">%1$s</xliff:g>」將可存取「<xliff:g id="DEVICE_NAME_1">%3$s</xliff:g>」播放的所有內容。&lt;br/&gt;&lt;br/&gt;「<xliff:g id="APP_NAME_2">%1$s</xliff:g>」可將音訊串流傳輸到「<xliff:g id="DEVICE_NAME_3">%3$s</xliff:g>」,直到你移除這個權限為止。"</string>
<string name="helper_summary_sensor_device_streaming" msgid="8860174545653786353">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」正在代表「<xliff:g id="DEVICE_NAME">%2$s</xliff:g>」要求必要權限,以便在裝置間串流傳輸音訊和系統功能。"</string>
<string name="profile_name_generic" msgid="6851028682723034988">"裝置"</string>
- <string name="summary_generic" msgid="1761976003668044801">"這個應用程式將可在手機和指定裝置間同步資訊,例如來電者名稱"</string>
+ <string name="summary_generic" msgid="1761976003668044801">"這個應用程式可在手機和指定裝置間同步資訊,例如來電者名稱"</string>
<string name="consent_yes" msgid="8344487259618762872">"允許"</string>
<string name="consent_no" msgid="2640796915611404382">"不允許"</string>
<string name="consent_cancel" msgid="5655005528379285841">"取消"</string>
diff --git a/packages/CredentialManager/res/values-pl/strings.xml b/packages/CredentialManager/res/values-pl/strings.xml
index 651488776c22..86dd090dc7c1 100644
--- a/packages/CredentialManager/res/values-pl/strings.xml
+++ b/packages/CredentialManager/res/values-pl/strings.xml
@@ -42,7 +42,7 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Utworzyć klucz dostępu do logowania w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Zapisać hasło do logowania w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Zapisać dane używane do logowania w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="passkey" msgid="632353688396759522">"klucz"</string>
+ <string name="passkey" msgid="632353688396759522">"klucz dostępu"</string>
<string name="password" msgid="6738570945182936667">"hasło"</string>
<string name="passkeys" msgid="5733880786866559847">"klucze dostępu"</string>
<string name="passwords" msgid="5419394230391253816">"hasła"</string>
@@ -61,7 +61,7 @@
<string name="more_options_usage_passwords" msgid="1632047277723187813">"Hasła: <xliff:g id="PASSWORDSNUMBER">%1$s</xliff:g>"</string>
<string name="more_options_usage_passkeys" msgid="5390320437243042237">"Klucze dostępu: <xliff:g id="PASSKEYSNUMBER">%1$s</xliff:g>"</string>
<string name="more_options_usage_credentials" msgid="1785697001787193984">"Dane logowania: <xliff:g id="TOTALCREDENTIALSNUMBER">%1$s</xliff:g>"</string>
- <string name="passkey_before_subtitle" msgid="2448119456208647444">"Klucz"</string>
+ <string name="passkey_before_subtitle" msgid="2448119456208647444">"Klucz dostępu"</string>
<string name="another_device" msgid="5147276802037801217">"Inne urządzenie"</string>
<string name="other_password_manager" msgid="565790221427004141">"Inne menedżery haseł"</string>
<string name="close_sheet" msgid="1393792015338908262">"Zamknij arkusz"</string>
diff --git a/packages/PackageInstaller/res/values-my/strings.xml b/packages/PackageInstaller/res/values-my/strings.xml
index 98eae5abe9a1..bbcf90065168 100644
--- a/packages/PackageInstaller/res/values-my/strings.xml
+++ b/packages/PackageInstaller/res/values-my/strings.xml
@@ -58,7 +58,7 @@
<string name="uninstall_application_title" msgid="4045420072401428123">"အက်ပ်ကို ဖယ်ရှားရန်"</string>
<string name="uninstall_update_title" msgid="824411791011583031">"အပ်ဒိတ်ကို ဖယ်ရှားရန်"</string>
<string name="uninstall_activity_text" msgid="1928194674397770771">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> သည် အောက်ပါအက်ပ်၏ တစ်စိတ်တစ်ဒေသဖြစ်သည်−"</string>
- <string name="uninstall_application_text" msgid="3816830743706143980">"ဤအက်ပ်ကို ဖယ်ရှားလိုပါသလား။"</string>
+ <string name="uninstall_application_text" msgid="3816830743706143980">"ဤအက်ပ်ကို ဖြုတ်လိုပါသလား။"</string>
<string name="archive_application_text" msgid="8482325710714386348">"သင့်ကိုယ်ရေးအချက်အလက်ကို သိမ်းပါမည်"</string>
<string name="archive_application_text_all_users" msgid="3151229641681672580">"ဤအက်ပ်ကို အသုံးပြုသူအားလုံးအတွက် သိမ်းမလား။ သင့်ကိုယ်ရေးအချက်အလက်ကို သိမ်းပါမည်"</string>
<string name="archive_application_text_current_user_work_profile" msgid="1450487362134779752">"ဤအက်ပ်ကို သင့်အလုပ်ပရိုဖိုင်တွင် သိမ်းမလား။ သင့်ကိုယ်ရေးအချက်အလက်ကို သိမ်းပါမည်"</string>
diff --git a/packages/PackageInstaller/res/values-pt-rBR/strings.xml b/packages/PackageInstaller/res/values-pt-rBR/strings.xml
index 332517a775f4..f356bb462565 100644
--- a/packages/PackageInstaller/res/values-pt-rBR/strings.xml
+++ b/packages/PackageInstaller/res/values-pt-rBR/strings.xml
@@ -58,7 +58,7 @@
<string name="uninstall_application_title" msgid="4045420072401428123">"Desinstalar app"</string>
<string name="uninstall_update_title" msgid="824411791011583031">"Desinstalar atualização"</string>
<string name="uninstall_activity_text" msgid="1928194674397770771">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> é parte do seguinte app:"</string>
- <string name="uninstall_application_text" msgid="3816830743706143980">"Você quer desinstalar este app?"</string>
+ <string name="uninstall_application_text" msgid="3816830743706143980">"Você quer desinstalar esse app?"</string>
<string name="archive_application_text" msgid="8482325710714386348">"Seus dados pessoais serão salvos"</string>
<string name="archive_application_text_all_users" msgid="3151229641681672580">"Arquivar esse app para todos os usuários? Seus dados pessoais serão salvos"</string>
<string name="archive_application_text_current_user_work_profile" msgid="1450487362134779752">"Arquivar esse app no seu perfil de trabalho? Seus dados pessoais serão salvos"</string>
diff --git a/packages/PackageInstaller/res/values-pt/strings.xml b/packages/PackageInstaller/res/values-pt/strings.xml
index 332517a775f4..f356bb462565 100644
--- a/packages/PackageInstaller/res/values-pt/strings.xml
+++ b/packages/PackageInstaller/res/values-pt/strings.xml
@@ -58,7 +58,7 @@
<string name="uninstall_application_title" msgid="4045420072401428123">"Desinstalar app"</string>
<string name="uninstall_update_title" msgid="824411791011583031">"Desinstalar atualização"</string>
<string name="uninstall_activity_text" msgid="1928194674397770771">"<xliff:g id="ACTIVITY_NAME">%1$s</xliff:g> é parte do seguinte app:"</string>
- <string name="uninstall_application_text" msgid="3816830743706143980">"Você quer desinstalar este app?"</string>
+ <string name="uninstall_application_text" msgid="3816830743706143980">"Você quer desinstalar esse app?"</string>
<string name="archive_application_text" msgid="8482325710714386348">"Seus dados pessoais serão salvos"</string>
<string name="archive_application_text_all_users" msgid="3151229641681672580">"Arquivar esse app para todos os usuários? Seus dados pessoais serão salvos"</string>
<string name="archive_application_text_current_user_work_profile" msgid="1450487362134779752">"Arquivar esse app no seu perfil de trabalho? Seus dados pessoais serão salvos"</string>
diff --git a/packages/SettingsLib/IntroPreference/res/layout/settingslib_expressive_preference_intro.xml b/packages/SettingsLib/IntroPreference/res/layout/settingslib_expressive_preference_intro.xml
index 7adcbf6c6601..cacd2740818c 100644
--- a/packages/SettingsLib/IntroPreference/res/layout/settingslib_expressive_preference_intro.xml
+++ b/packages/SettingsLib/IntroPreference/res/layout/settingslib_expressive_preference_intro.xml
@@ -17,6 +17,7 @@
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/entity_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -38,7 +39,9 @@
android:id="@+id/collapsable_summary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:gravity="center"/>
+ android:gravity="center"
+ android:minLines="1"
+ app:isCollapsable="true"/>
</LinearLayout>
diff --git a/packages/SettingsLib/IntroPreference/src/com/android/settingslib/widget/IntroPreference.kt b/packages/SettingsLib/IntroPreference/src/com/android/settingslib/widget/IntroPreference.kt
index f9931cf3238d..9d037e91a86f 100644
--- a/packages/SettingsLib/IntroPreference/src/com/android/settingslib/widget/IntroPreference.kt
+++ b/packages/SettingsLib/IntroPreference/src/com/android/settingslib/widget/IntroPreference.kt
@@ -33,8 +33,8 @@ class IntroPreference @JvmOverloads constructor(
defStyleRes: Int = 0
) : Preference(context, attrs, defStyleAttr, defStyleRes), GroupSectionDividerMixin {
- private var isCollapsable: Boolean = false
- private var minLines: Int = 2
+ private var isCollapsable: Boolean = true
+ private var minLines: Int = DEFAULT_MIN_LINES
private var hyperlinkListener: View.OnClickListener? = null
private var learnMoreListener: View.OnClickListener? = null
private var learnMoreText: CharSequence? = null
@@ -42,22 +42,6 @@ class IntroPreference @JvmOverloads constructor(
init {
layoutResource = R.layout.settingslib_expressive_preference_intro
isSelectable = false
-
- initAttributes(context, attrs, defStyleAttr)
- }
-
- private fun initAttributes(context: Context, attrs: AttributeSet?, defStyleAttr: Int) {
- context.obtainStyledAttributes(
- attrs,
- COLLAPSABLE_TEXT_VIEW_ATTRS, defStyleAttr, 0
- ).apply {
- isCollapsable = getBoolean(IS_COLLAPSABLE, false)
- minLines = getInt(
- MIN_LINES,
- if (isCollapsable) DEFAULT_MIN_LINES else DEFAULT_MAX_LINES
- ).coerceIn(1, DEFAULT_MAX_LINES)
- recycle()
- }
}
override fun onBindViewHolder(holder: PreferenceViewHolder) {
@@ -139,13 +123,6 @@ class IntroPreference @JvmOverloads constructor(
companion object {
private const val DEFAULT_MAX_LINES = 10
- private const val DEFAULT_MIN_LINES = 2
-
- private val COLLAPSABLE_TEXT_VIEW_ATTRS =
- com.android.settingslib.widget.theme.R.styleable.CollapsableTextView
- private val MIN_LINES =
- com.android.settingslib.widget.theme.R.styleable.CollapsableTextView_android_minLines
- private val IS_COLLAPSABLE =
- com.android.settingslib.widget.theme.R.styleable.CollapsableTextView_isCollapsable
+ private const val DEFAULT_MIN_LINES = 1
}
-} \ No newline at end of file
+}
diff --git a/packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/CollapsableTextView.kt b/packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/CollapsableTextView.kt
index 7eb9840e3e98..976711bdc5f3 100644
--- a/packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/CollapsableTextView.kt
+++ b/packages/SettingsLib/SettingsTheme/src/com/android/settingslib/widget/CollapsableTextView.kt
@@ -40,7 +40,7 @@ class CollapsableTextView @JvmOverloads constructor(
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
- private var isCollapsable: Boolean = false
+ private var isCollapsable: Boolean = DEFAULT_COLLAPSABLE
private var isCollapsed: Boolean = false
private var minLines: Int = DEFAULT_MIN_LINES
@@ -78,24 +78,38 @@ class CollapsableTextView @JvmOverloads constructor(
private fun initAttributes(context: Context, attrs: AttributeSet?, defStyleAttr: Int) {
context.obtainStyledAttributes(
- attrs, Attrs, defStyleAttr, 0
+ attrs, R.styleable.CollapsableTextView, defStyleAttr, 0
).apply {
- val gravity = getInt(GravityAttr, Gravity.START)
+ val gravity = getInt(gravityAttr, Gravity.START)
when (gravity) {
Gravity.CENTER_VERTICAL, Gravity.CENTER, Gravity.CENTER_HORIZONTAL -> {
centerHorizontally(titleTextView)
centerHorizontally(collapseButton)
}
}
+ isCollapsable = getBoolean(isCollapsableAttr, DEFAULT_COLLAPSABLE)
+ minLines = getInt(minLinesAttr, DEFAULT_MIN_LINES)
recycle()
}
}
private fun centerHorizontally(view: View) {
- (view.layoutParams as LayoutParams).apply {
- startToStart = LayoutParams.PARENT_ID
- endToEnd = LayoutParams.PARENT_ID
- horizontalBias = 0.5f
+ when (view) {
+ is MaterialButton -> {
+ (view.layoutParams as LayoutParams).apply {
+ startToStart = LayoutParams.PARENT_ID
+ endToEnd = LayoutParams.PARENT_ID
+ }
+ }
+ is TextView -> {
+ view.gravity = Gravity.CENTER
+ }
+ else -> {
+ (view.layoutParams as LayoutParams).apply {
+ startToStart = LayoutParams.PARENT_ID
+ endToEnd = LayoutParams.PARENT_ID
+ }
+ }
}
}
@@ -113,6 +127,8 @@ class CollapsableTextView @JvmOverloads constructor(
*/
fun setCollapsable(collapsable: Boolean) {
isCollapsable = collapsable
+ // Make is collapsed when it's collapsable
+ if (isCollapsable) isCollapsed = true
updateView()
}
@@ -120,8 +136,8 @@ class CollapsableTextView @JvmOverloads constructor(
* Sets the minimum number of lines to display when collapsed.
* @param lines The minimum number of lines.
*/
- fun setMinLines(line: Int) {
- minLines = line.coerceIn(1, DEFAULT_MAX_LINES)
+ fun setMinLines(lines: Int) {
+ minLines = lines.coerceIn(1, DEFAULT_MAX_LINES)
updateView()
}
@@ -198,7 +214,7 @@ class CollapsableTextView @JvmOverloads constructor(
}
learnMoreSpan = LearnMoreSpan(clickListener = learnMoreListener!!)
spannableLearnMoreText.setSpan(learnMoreSpan, 0, learnMoreText!!.length, 0)
- learnMoreTextView.setText(spannableLearnMoreText)
+ learnMoreTextView.text = spannableLearnMoreText
learnMoreTextView.visibility = VISIBLE
isLearnMoreEnabled = true
}
@@ -211,6 +227,8 @@ class CollapsableTextView @JvmOverloads constructor(
icon = collapseButtonResources.expandIcon
}
titleTextView.maxLines = minLines
+ titleTextView.ellipsize = null
+ titleTextView.scrollBarSize = 0
}
else -> {
@@ -219,6 +237,7 @@ class CollapsableTextView @JvmOverloads constructor(
icon = collapseButtonResources.collapseIcon
}
titleTextView.maxLines = DEFAULT_MAX_LINES
+ titleTextView.ellipsize = TextUtils.TruncateAt.END
}
}
collapseButton.visibility = if (isCollapsable) VISIBLE else GONE
@@ -235,17 +254,19 @@ class CollapsableTextView @JvmOverloads constructor(
companion object {
private const val DEFAULT_MAX_LINES = 10
private const val DEFAULT_MIN_LINES = 2
+ private const val DEFAULT_COLLAPSABLE = true
private const val LINK_BEGIN_MARKER = "LINK_BEGIN"
private const val LINK_END_MARKER = "LINK_END"
- private val Attrs = R.styleable.CollapsableTextView
- private val GravityAttr = R.styleable.CollapsableTextView_android_gravity
+ private val gravityAttr = R.styleable.CollapsableTextView_android_gravity
+ private val minLinesAttr = R.styleable.CollapsableTextView_android_minLines
+ private val isCollapsableAttr = R.styleable.CollapsableTextView_isCollapsable
}
}
internal class LearnMoreSpan(
- val url: String = "",
+ url: String = "",
val clickListener: View.OnClickListener) : URLSpan(url) {
override fun onClick(widget: View) {
clickListener.onClick(widget)
diff --git a/packages/SettingsLib/res/values-af/arrays.xml b/packages/SettingsLib/res/values-af/arrays.xml
index e4eb72d0bf82..c4ba7eb03ae8 100644
--- a/packages/SettingsLib/res/values-af/arrays.xml
+++ b/packages/SettingsLib/res/values-af/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Slegs toestelskerm (verstek)"</item>
- <item msgid="9161645858025071955">"Eksterne skerm"</item>
- <item msgid="114384731934682483">"Fokusgebaseer"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Wys skakering net op toestelskerm"</item>
- <item msgid="7795034287069726554">"Wys skerm op enkele eksterne skerm"</item>
- <item msgid="5280431949814340475">"Wys toestel op laaste gefokusde skerm"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index f6364ffb9116..3a7e45209562 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Laai vinnig"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Beheer deur administrateur"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Beheer deur Beperkte Instellings"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Onbeskikbaar tydens oproepe"</string>
<string name="disabled" msgid="8017887509554714950">"Gedeaktiveer"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Toegelaat"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Nie toegelaat nie"</string>
diff --git a/packages/SettingsLib/res/values-am/arrays.xml b/packages/SettingsLib/res/values-am/arrays.xml
index 805f0d3c9189..a151f837a8a4 100644
--- a/packages/SettingsLib/res/values-am/arrays.xml
+++ b/packages/SettingsLib/res/values-am/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"የመሣሪያ ማሳያ ብቻ (ነባሪ)"</item>
- <item msgid="9161645858025071955">"ውጫዊ ማሳያ"</item>
- <item msgid="114384731934682483">"ትኩረት ላይ የተመሰረተ"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"በመሣሪያ ማሳያ ላይ ብቻ ጥላ አሳይ"</item>
- <item msgid="7795034287069726554">"መሣሪያን በአንድ ውጫዊ ማሳያ ላይ አሳይ"</item>
- <item msgid="5280431949814340475">"በመጨረሻ ትኩረት የተደረገበት ማሳያ ላይ መሣሪያን አሳይ"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index d374a9a10b3e..25e9c5e3b2a9 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ፈጣን መሙያ"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"በአስተዳዳሪ ቁጥጥር የተደረገበት"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"በተገደበ ቅንብር ቁጥጥር የሚደረግበት"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"በጥሪዎች ጊዜ አይገኝም"</string>
<string name="disabled" msgid="8017887509554714950">"ቦዝኗል"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"ይፈቀዳል"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"አይፈቀድም"</string>
diff --git a/packages/SettingsLib/res/values-ar/arrays.xml b/packages/SettingsLib/res/values-ar/arrays.xml
index 3ff5dc642be8..ebdb0c70cd3f 100644
--- a/packages/SettingsLib/res/values-ar/arrays.xml
+++ b/packages/SettingsLib/res/values-ar/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"شاشة الجهاز فقط (الإعداد التلقائي)"</item>
- <item msgid="9161645858025071955">"الشاشة الخارجية"</item>
- <item msgid="114384731934682483">"على الشاشة التي يتم التركيز عليها"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"عرض الظل على شاشة الجهاز فقط"</item>
- <item msgid="7795034287069726554">"عرض الظل على شاشة خارجية واحدة"</item>
- <item msgid="5280431949814340475">"عرض الظل على آخر شاشة تم التركيز عليها"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index 675a6a6077ba..8956c44ec09e 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -251,7 +251,7 @@
<string name="enable_adb_summary" msgid="3711526030096574316">"‏وضع تصحيح الأخطاء عند توصيل USB"</string>
<string name="clear_adb_keys" msgid="3010148733140369917">"‏إلغاء عمليات تفويض تصحيح أخطاء USB"</string>
<string name="enable_adb_wireless" msgid="6973226350963971018">"تصحيح الأخطاء اللاسلكي"</string>
- <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"‏وضع تصحيح الأخطاء عندما يتم الاتصال بشبكة Wi‑Fi"</string>
+ <string name="enable_adb_wireless_summary" msgid="7344391423657093011">"‏بدء تصحيح الأخطاء عند الاتصال بشبكة Wi‑Fi"</string>
<string name="adb_wireless_error" msgid="721958772149779856">"خطأ"</string>
<string name="adb_wireless_settings" msgid="2295017847215680229">"تصحيح الأخطاء اللاسلكي"</string>
<string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"لعرض الأجهزة المتاحة واستخدامها، فعِّل ميزة \"تصحيح الأخطاء اللاسلكي\"."</string>
@@ -674,7 +674,7 @@
<string name="not_grant_admin" msgid="3557849576157702485">"لا أريد منح هذا المستخدم امتيازات المشرف."</string>
<string name="guest_exit_dialog_button" msgid="1736401897067442044">"خروج"</string>
<string name="guest_exit_dialog_title_non_ephemeral" msgid="7675327443743162986">"هل تريد حفظ النشاط في وضع الضيف؟"</string>
- <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"يمكنك حفظ نشاط من الجلسة الحالية أو حذف كلّ التطبيقات والبيانات."</string>
+ <string name="guest_exit_dialog_message_non_ephemeral" msgid="223385323235719442">"يمكنك حفظ نشاطك من الجلسة الحالية أو حذف كلّ التطبيقات والبيانات."</string>
<string name="guest_exit_clear_data_button" msgid="3425812652180679014">"حذف"</string>
<string name="guest_exit_save_data_button" msgid="3690974510644963547">"حِفظ"</string>
<string name="guest_exit_button" msgid="5774985819191803960">"الخروج من وضع الضيف"</string>
diff --git a/packages/SettingsLib/res/values-as/arrays.xml b/packages/SettingsLib/res/values-as/arrays.xml
index 4b5d5a07e120..451b47ab352f 100644
--- a/packages/SettingsLib/res/values-as/arrays.xml
+++ b/packages/SettingsLib/res/values-as/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"কেৱল ডিভাইচৰ ডিছপ্লে’ (ডিফ’ল্ট)"</item>
<item msgid="9161645858025071955">"বাহ্যিক ডিছপ্লে’"</item>
- <item msgid="114384731934682483">"ফ’কাছ-আধাৰিত"</item>
+ <item msgid="23651860565814477">"শেহতীয়া স্থিতি দণ্ড স্পৰ্শ"</item>
+ <item msgid="7521112827893653392">"ফ’কাছ-আধাৰিত"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"কেৱল ডিভাইচৰ ডিছপ্লে’তহে শ্বেড দেখুৱাওক"</item>
- <item msgid="7795034287069726554">"ডিভাইচটো এখনেই বাহ্যিক ডিছপ্লে’ত দেখুৱাওক"</item>
- <item msgid="5280431949814340475">"ডিভাইচটো অন্তিম ফ’কাছ কৰা ডিছপ্লে’ত দেখুৱাওক"</item>
+ <item msgid="1955398604822147783">"কেৱল এখনেই বাহ্যিক ডিছপ্লে’ত শ্বেড দেখুৱাওক"</item>
+ <item msgid="391477482416751568">"যিখন ডিছপ্লে’ই অন্তিমবাৰ ইয়াৰ স্থিতি দণ্ডৰ সৈতে ভাৱ-বিনিময় কৰিছে সেইখনত শ্বেড দেখুৱাওক"</item>
+ <item msgid="1746820128097981528">"অন্তিম ফ’কাছ কৰা ডিছপ্লে’ত শ্বেড দেখুৱাওক"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index c98d3dec33f1..bfacbb248c0e 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"দ্ৰুত চাৰ্জিং"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"এডমিনৰ দ্বাৰা নিয়ন্ত্ৰিত"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"প্ৰতিবন্ধিত ছেটিঙৰ দ্বাৰা নিয়ন্ত্ৰিত"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"কল চলি থকাৰ সময়ত উপলব্ধ নহয়"</string>
<string name="disabled" msgid="8017887509554714950">"নিষ্ক্ৰিয়"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"অনুমতি দিয়া হৈছে"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"অনুমতি দিয়া হোৱা নাই"</string>
diff --git a/packages/SettingsLib/res/values-az/arrays.xml b/packages/SettingsLib/res/values-az/arrays.xml
index 511e9701cd71..52cf498e00ab 100644
--- a/packages/SettingsLib/res/values-az/arrays.xml
+++ b/packages/SettingsLib/res/values-az/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Yalnız cihaz displeyi (defolt)"</item>
- <item msgid="9161645858025071955">"Xarici displey"</item>
- <item msgid="114384731934682483">"Fokus əsaslı"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Kölgəni yalnız cihaz displeyində göstərin"</item>
- <item msgid="7795034287069726554">"Cihazı bir xarici displeydə göstərin"</item>
- <item msgid="5280431949814340475">"Cihazı son fokuslanmış displeydə göstərin"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index db7d162b9ccd..9013fb5bc324 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Sürətli şarj"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Admin tərəfindən nəzarət olunur"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Məhdudlaşdırılmış Ayar ilə nəzarət edilir"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Zənglər zamanı əlçatan deyil"</string>
<string name="disabled" msgid="8017887509554714950">"Deaktiv"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"İcazə verilib"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"İcazə verilməyib"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
index 452831453acf..3622808a3318 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Prikaz samo na uređaju (podrazumevano)"</item>
<item msgid="9161645858025071955">"Spoljni ekran"</item>
- <item msgid="114384731934682483">"Zasnovano na fokusu"</item>
+ <item msgid="23651860565814477">"Dodir na najnovijoj statusnoj traci"</item>
+ <item msgid="7521112827893653392">"Zasnovano na fokusu"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Prikaži senku samo na ekranu uređaja"</item>
- <item msgid="7795034287069726554">"Prikaži uređaj na jednom spoljnom ekranu"</item>
- <item msgid="5280431949814340475">"Prikaži uređaj na poslednjem ekranu u fokusu"</item>
+ <item msgid="1955398604822147783">"Prikaži senku na jednom spoljnom ekranu"</item>
+ <item msgid="391477482416751568">"Prikaži senku na ekranu sa kojim je statusna traka poslednji put bila u interakciji"</item>
+ <item msgid="1746820128097981528">"Prikaži senku na poslednjem ekranu u fokusu"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-be/arrays.xml b/packages/SettingsLib/res/values-be/arrays.xml
index 33393610fae2..48c362768a8f 100644
--- a/packages/SettingsLib/res/values-be/arrays.xml
+++ b/packages/SettingsLib/res/values-be/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Толькі дысплэй прылады (стандартна)"</item>
- <item msgid="9161645858025071955">"Знешні дысплэй"</item>
- <item msgid="114384731934682483">"У залежнасці ад выкарыстання"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Паказваць шчыток толькі на дысплэі прылады"</item>
- <item msgid="7795034287069726554">"Паказваць прыладу на адным знешнім дысплэі"</item>
- <item msgid="5280431949814340475">"Паказваць прыладу на дысплэі, які выкарыстоўваўся апошнім"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index eb6e0a559ce4..0ad8ac7502b0 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Ідзе хуткая зарадка"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Кантралюецца адміністратарам"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Пад кіраваннем Абмежаванага наладжвання"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Недаступна падчас выклікаў"</string>
<string name="disabled" msgid="8017887509554714950">"Адключанае"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Дазволена"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Забаронена"</string>
diff --git a/packages/SettingsLib/res/values-bg/arrays.xml b/packages/SettingsLib/res/values-bg/arrays.xml
index c3bc26f30dbf..21dfa06644a3 100644
--- a/packages/SettingsLib/res/values-bg/arrays.xml
+++ b/packages/SettingsLib/res/values-bg/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Само на екрана на устройството (по подразбиране)"</item>
- <item msgid="9161645858025071955">"Външен екран"</item>
- <item msgid="114384731934682483">"Въз основа на фокуса"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Показване на падащия панел само на екрана на устройството"</item>
- <item msgid="7795034287069726554">"Показване на устройството на един външен екран"</item>
- <item msgid="5280431949814340475">"Показване на устройството на екрана, върху който последно е бил поставен фокусът"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index ede0a3a69a1a..8a87e57ffe93 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Зарежда се бързо"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Контролира се от администратор"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Управлява се чрез ограничена настройка"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Заето по време на обаждания"</string>
<string name="disabled" msgid="8017887509554714950">"Деактивирано"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Има разрешение"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Няма разрешение"</string>
diff --git a/packages/SettingsLib/res/values-bn/arrays.xml b/packages/SettingsLib/res/values-bn/arrays.xml
index 6d5da27f3c36..b27264d5541b 100644
--- a/packages/SettingsLib/res/values-bn/arrays.xml
+++ b/packages/SettingsLib/res/values-bn/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"শুধুমাত্র ডিভাইসের ডিসপ্লে (ডিফল্ট)"</item>
- <item msgid="9161645858025071955">"এক্সটার্নাল ডিসপ্লে"</item>
- <item msgid="114384731934682483">"ফোকাস অনুযায়ী"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"শুধুমাত্র ডিভাইসের ডিসপ্লেতে শেড দেখুন"</item>
- <item msgid="7795034287069726554">"শেড একটি এক্সটার্নাল ডিসপ্লেতে দেখুন"</item>
- <item msgid="5280431949814340475">"ফোকাস করা শেষ ডিসপ্লেতে ডিভাইস দেখুন"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index ab9c34ac6f73..1e7c7a227b8e 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ফাস্ট চার্জিং"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"প্রশাসকের দ্বারা নিয়ন্ত্রিত"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"এটি বিধিনিষেধ সেটিং থেকে নিয়ন্ত্রণ করা হয়"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"কল চলাকালীন উপলভ্য হবে না"</string>
<string name="disabled" msgid="8017887509554714950">"অক্ষম হয়েছে"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"অনুমোদিত"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"অনুমোদিত নয়"</string>
diff --git a/packages/SettingsLib/res/values-bs/arrays.xml b/packages/SettingsLib/res/values-bs/arrays.xml
index 625112ce873d..44bbfaf4d56e 100644
--- a/packages/SettingsLib/res/values-bs/arrays.xml
+++ b/packages/SettingsLib/res/values-bs/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Samo zaslon uređaja (zadano)"</item>
<item msgid="9161645858025071955">"Vanjski ekran"</item>
- <item msgid="114384731934682483">"Na osnovu fokusa"</item>
+ <item msgid="23651860565814477">"Najnoviji dodir trake statusa"</item>
+ <item msgid="7521112827893653392">"Na temelju fokusa"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Prikaži sjenu samo na ekranu uređaja"</item>
- <item msgid="7795034287069726554">"Prikaži uređaj na jednom vanjskom ekranu"</item>
- <item msgid="5280431949814340475">"Prikaži uređaj na posljednjem fokusiranom ekranu"</item>
+ <item msgid="1955398604822147783">"Prikaži sjenčanje na jednom vanjskom zaslonu"</item>
+ <item msgid="391477482416751568">"Prikaži sjenčanje na zaslonu na kojem je posljednje stupljeno u interakciju s trakom statusa"</item>
+ <item msgid="1746820128097981528">"Prikaži sjenčanje na posljednjem fokusiranom zaslonu"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index 98e07b9e8749..756a3268ec98 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -482,7 +482,7 @@
<string name="daltonizer_type_overridden" msgid="4509604753672535721">"Zamjenjuje <xliff:g id="TITLE">%1$s</xliff:g>"</string>
<string name="power_remaining_settings_home_page" msgid="4885165789445462557">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> – <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string>
<string name="power_charging_on_hold_settings_home_page" msgid="7690464049464805856">"<xliff:g id="LEVEL">%1$s</xliff:g> – punjenje je na čekanju radi zaštite baterije"</string>
- <string name="power_incompatible_charging_settings_home_page" msgid="1322050766135126880">"<xliff:g id="LEVEL">%1$s</xliff:g> – provjerite opremu za punjenje"</string>
+ <string name="power_incompatible_charging_settings_home_page" msgid="1322050766135126880">"<xliff:g id="LEVEL">%1$s</xliff:g> – provjerite dodatak za punjenje"</string>
<string name="power_remaining_duration_only" msgid="8264199158671531431">"Preostalo je još oko <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
<string name="power_discharging_duration" msgid="1076561255466053220">"Preostalo je još oko <xliff:g id="TIME_REMAINING">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_remaining_duration_only_enhanced" msgid="2527842780666073218">"Preostalo je još oko <xliff:g id="TIME_REMAINING">%1$s</xliff:g> na osnovu vaše potrošnje"</string>
@@ -523,7 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Brzo punjenje"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Pod kontrolom administratora"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Kontrolira ograničena postavka"</string>
- <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Nije dostupno tijekom poziva"</string>
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Nije dostupno tokom poziva"</string>
<string name="disabled" msgid="8017887509554714950">"Onemogućeno"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Dozvoljeno"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Nije dozvoljeno"</string>
diff --git a/packages/SettingsLib/res/values-ca/arrays.xml b/packages/SettingsLib/res/values-ca/arrays.xml
index e9b437e717d9..f19551c5194b 100644
--- a/packages/SettingsLib/res/values-ca/arrays.xml
+++ b/packages/SettingsLib/res/values-ca/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Només a la pantalla del dispositiu (opció predeterminada)"</item>
- <item msgid="9161645858025071955">"Pantalla externa"</item>
- <item msgid="114384731934682483">"Basat en l\'enfocament"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Mostra l\'ombra només a la pantalla del dispositiu"</item>
- <item msgid="7795034287069726554">"Mostra el dispositiu en una sola pantalla externa"</item>
- <item msgid="5280431949814340475">"Mostra el dispositiu a la darrera pantalla en què s\'hagi posat el focus"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index ef2920d2a28e..05480999b3e0 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Càrrega ràpida"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlat per l\'administrador"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlat per l\'opció de configuració restringida"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"No està disponible durant les trucades"</string>
<string name="disabled" msgid="8017887509554714950">"Desactivat"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Amb permís"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Sense permís"</string>
diff --git a/packages/SettingsLib/res/values-cs/arrays.xml b/packages/SettingsLib/res/values-cs/arrays.xml
index 4bfdaf47ea9b..ad1cafd2dd2d 100644
--- a/packages/SettingsLib/res/values-cs/arrays.xml
+++ b/packages/SettingsLib/res/values-cs/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Pouze zobrazení zařízení (výchozí)"</item>
- <item msgid="9161645858025071955">"Externí displej"</item>
- <item msgid="114384731934682483">"Výběr"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Zobrazovat panel pouze na displeji zařízení"</item>
- <item msgid="7795034287069726554">"Zobrazovat panel na jednom externím displeji"</item>
- <item msgid="5280431949814340475">"Zobrazovat panel na naposledy vybraném displeji"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-da/arrays.xml b/packages/SettingsLib/res/values-da/arrays.xml
index 69497555fae7..ed457756abfa 100644
--- a/packages/SettingsLib/res/values-da/arrays.xml
+++ b/packages/SettingsLib/res/values-da/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Kun på enhedens skærm (standard)"</item>
- <item msgid="9161645858025071955">"Ekstern skærm"</item>
- <item msgid="114384731934682483">"Fokusbaseret"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Vis kun skygge på enhedens skærm"</item>
- <item msgid="7795034287069726554">"Vis enheden på en enkelt ekstern skærm"</item>
- <item msgid="5280431949814340475">"Vis enheden på den skærm, der sidst var i fokus"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 71c6be17eb94..d7aa9b1dd71a 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Lynopladning"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Kontrolleret af administratoren"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Styres af en begrænset indstilling"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Kan ikke bruges under opkald"</string>
<string name="disabled" msgid="8017887509554714950">"Deaktiveret"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Tilladt"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Ikke tilladt"</string>
diff --git a/packages/SettingsLib/res/values-de/arrays.xml b/packages/SettingsLib/res/values-de/arrays.xml
index adddd7706617..924718a37a4d 100644
--- a/packages/SettingsLib/res/values-de/arrays.xml
+++ b/packages/SettingsLib/res/values-de/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Nur Gerätedisplay (Standard)"</item>
- <item msgid="9161645858025071955">"Externes Display"</item>
- <item msgid="114384731934682483">"Fokusbasiert"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Leiste nur auf dem Display des Geräts anzeigen"</item>
- <item msgid="7795034287069726554">"Gerät auf einem einzigen externen Display anzeigen"</item>
- <item msgid="5280431949814340475">"Gerät auf zuletzt fokussiertem Display anzeigen"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 1955da0b80e0..73268c5aa6b2 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -56,7 +56,7 @@
<string name="wifi_disabled_password_failure" msgid="6892387079613226738">"Authentifizierungsproblem"</string>
<string name="wifi_cant_connect" msgid="5718417542623056783">"Verbindung nicht möglich"</string>
<string name="wifi_cant_connect_to_ap" msgid="3099667989279700135">"Keine Verbindung zu \"<xliff:g id="AP_NAME">%1$s</xliff:g>\" möglich"</string>
- <string name="wifi_check_password_try_again" msgid="8817789642851605628">"Prüfe das Passwort und versuch es noch einmal"</string>
+ <string name="wifi_check_password_try_again" msgid="8817789642851605628">"Prüfe das Passwort und versuche es noch einmal"</string>
<string name="wifi_not_in_range" msgid="1541760821805777772">"Nicht in Reichweite"</string>
<string name="wifi_no_internet_no_reconnect" msgid="821591791066497347">"Kein automatischer Verbindungsaufbau"</string>
<string name="wifi_no_internet" msgid="1774198889176926299">"Kein Internetzugriff"</string>
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Schnelles Laden"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Durch den Administrator verwaltet"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Gesteuert durch eingeschränkte Einstellung"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Während Anrufen nicht verfügbar"</string>
<string name="disabled" msgid="8017887509554714950">"Deaktiviert"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Zugelassen"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Nicht zugelassen"</string>
diff --git a/packages/SettingsLib/res/values-el/arrays.xml b/packages/SettingsLib/res/values-el/arrays.xml
index 9d7612ca8df1..41aefc097bcd 100644
--- a/packages/SettingsLib/res/values-el/arrays.xml
+++ b/packages/SettingsLib/res/values-el/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Μόνο οθόνη συσκευής (Προεπιλογή)"</item>
- <item msgid="9161645858025071955">"Εξωτερική οθόνη"</item>
- <item msgid="114384731934682483">"Με εστίαση"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Εμφάνιση σκίασης μόνο στην οθόνη συσκευής"</item>
- <item msgid="7795034287069726554">"Εμφάνιση συσκευής σε μία εξωτερική οθόνη"</item>
- <item msgid="5280431949814340475">"Εμφάνιση συσκευής στην τελευταία οθόνη με εστίαση"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 7f9f646b0eaf..209b7820b59a 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Γρήγορη φόρτιση"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Ελέγχονται από το διαχειριστή"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Ελέγχεται από τη Ρύθμιση με περιορισμό"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Μη διαθέσιμη κατά τη διάρκεια κλήσεων"</string>
<string name="disabled" msgid="8017887509554714950">"Απενεργοποιημένη"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Επιτρέπεται"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Δεν επιτρέπεται"</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/arrays.xml b/packages/SettingsLib/res/values-en-rAU/arrays.xml
index 8c27ec6315c9..6c7a7ffb58ed 100644
--- a/packages/SettingsLib/res/values-en-rAU/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rAU/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Device display only (default)"</item>
- <item msgid="9161645858025071955">"External display"</item>
- <item msgid="114384731934682483">"Focus-based"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Show shade on device display only"</item>
- <item msgid="7795034287069726554">"Show device on single external display"</item>
- <item msgid="5280431949814340475">"Show device on last focused display"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index 58bb7d8b951a..d965c6522a9d 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Fast charging"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlled by admin"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlled by restricted setting"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Unavailable during calls"</string>
<string name="disabled" msgid="8017887509554714950">"Disabled"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Allowed"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Not allowed"</string>
diff --git a/packages/SettingsLib/res/values-en-rCA/arrays.xml b/packages/SettingsLib/res/values-en-rCA/arrays.xml
index cfe77ca538bd..48f2f5a2c00f 100644
--- a/packages/SettingsLib/res/values-en-rCA/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rCA/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Device display only (Default)"</item>
<item msgid="9161645858025071955">"External display"</item>
- <item msgid="114384731934682483">"Focus-based"</item>
+ <item msgid="23651860565814477">"Latest status bar touch"</item>
+ <item msgid="7521112827893653392">"Focus-based"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Show shade on device display only"</item>
- <item msgid="7795034287069726554">"Show device on single external display"</item>
- <item msgid="5280431949814340475">"Show device on last focused display"</item>
+ <item msgid="1955398604822147783">"Show shade on single external display"</item>
+ <item msgid="391477482416751568">"Show shade on display which last had its status bar interacted with"</item>
+ <item msgid="1746820128097981528">"Show shade on last focused display"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rGB/arrays.xml b/packages/SettingsLib/res/values-en-rGB/arrays.xml
index 8c27ec6315c9..6c7a7ffb58ed 100644
--- a/packages/SettingsLib/res/values-en-rGB/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rGB/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Device display only (default)"</item>
- <item msgid="9161645858025071955">"External display"</item>
- <item msgid="114384731934682483">"Focus-based"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Show shade on device display only"</item>
- <item msgid="7795034287069726554">"Show device on single external display"</item>
- <item msgid="5280431949814340475">"Show device on last focused display"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index 58bb7d8b951a..d965c6522a9d 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Fast charging"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlled by admin"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlled by restricted setting"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Unavailable during calls"</string>
<string name="disabled" msgid="8017887509554714950">"Disabled"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Allowed"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Not allowed"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/arrays.xml b/packages/SettingsLib/res/values-en-rIN/arrays.xml
index 8c27ec6315c9..6c7a7ffb58ed 100644
--- a/packages/SettingsLib/res/values-en-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rIN/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Device display only (default)"</item>
- <item msgid="9161645858025071955">"External display"</item>
- <item msgid="114384731934682483">"Focus-based"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Show shade on device display only"</item>
- <item msgid="7795034287069726554">"Show device on single external display"</item>
- <item msgid="5280431949814340475">"Show device on last focused display"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index 58bb7d8b951a..d965c6522a9d 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Fast charging"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlled by admin"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlled by restricted setting"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Unavailable during calls"</string>
<string name="disabled" msgid="8017887509554714950">"Disabled"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Allowed"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Not allowed"</string>
diff --git a/packages/SettingsLib/res/values-es-rUS/arrays.xml b/packages/SettingsLib/res/values-es-rUS/arrays.xml
index daf9ab98996d..5894975de1ba 100644
--- a/packages/SettingsLib/res/values-es-rUS/arrays.xml
+++ b/packages/SettingsLib/res/values-es-rUS/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Solo en la pantalla del dispositivo (predeterminado)"</item>
- <item msgid="9161645858025071955">"Pantalla externa"</item>
- <item msgid="114384731934682483">"Basado en el enfoque"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Mostrar sobra solo en la pantalla del dispositivo"</item>
- <item msgid="7795034287069726554">"Mostrar dispositivo en una sola pantalla externa"</item>
- <item msgid="5280431949814340475">"Mostrar dispositivo en la última pantalla enfocada"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-es/arrays.xml b/packages/SettingsLib/res/values-es/arrays.xml
index a4bb49ee145a..1e8c6614280c 100644
--- a/packages/SettingsLib/res/values-es/arrays.xml
+++ b/packages/SettingsLib/res/values-es/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Solo en la pantalla del dispositivo (predeterminado)"</item>
- <item msgid="9161645858025071955">"Pantalla externa"</item>
- <item msgid="114384731934682483">"Basado en el enfoque"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Mostrar el panel solo en la pantalla del dispositivo"</item>
- <item msgid="7795034287069726554">"Mostrar el dispositivo en una sola pantalla externa"</item>
- <item msgid="5280431949814340475">"Mostrar el dispositivo en la última pantalla enfocada"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index b881994d911f..00b987c75602 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Carga rápida"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlada por el administrador"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlado por ajustes restringidos"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"No disponible durante las llamadas"</string>
<string name="disabled" msgid="8017887509554714950">"Inhabilitada"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Autorizadas"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"No autorizadas"</string>
diff --git a/packages/SettingsLib/res/values-et/arrays.xml b/packages/SettingsLib/res/values-et/arrays.xml
index 9a77991309a2..88b8b98cc3dc 100644
--- a/packages/SettingsLib/res/values-et/arrays.xml
+++ b/packages/SettingsLib/res/values-et/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Ainult seadme ekraan (vaikimisi)"</item>
<item msgid="9161645858025071955">"Väline ekraan"</item>
- <item msgid="114384731934682483">"Fookusepõhine"</item>
+ <item msgid="23651860565814477">"Viimane olekuriba puudutus"</item>
+ <item msgid="7521112827893653392">"Fookusepõhine"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Kuva menüü ainult seadme ekraanil"</item>
- <item msgid="7795034287069726554">"Kuva seade ühe välisel ekraanil"</item>
- <item msgid="5280431949814340475">"Kuva seade viimati esile tõstetud ekraanil"</item>
+ <item msgid="1955398604822147783">"Kuva menüü ühel välisel ekraanil"</item>
+ <item msgid="391477482416751568">"Kuva menüü ekraanil, mille olekuriba viimati kasutati"</item>
+ <item msgid="1746820128097981528">"Kuva menüü viimati esile tõstetud ekraanil"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-eu/arrays.xml b/packages/SettingsLib/res/values-eu/arrays.xml
index 3d59a279d3c0..a1528c2a1e7d 100644
--- a/packages/SettingsLib/res/values-eu/arrays.xml
+++ b/packages/SettingsLib/res/values-eu/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Gailuaren pantailan soilik (lehenetsia)"</item>
- <item msgid="9161645858025071955">"Kanpoko pantailan"</item>
- <item msgid="114384731934682483">"Fokuaren arabera"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Erakutsi itzalak gailuaren pantailan soilik"</item>
- <item msgid="7795034287069726554">"Erakutsi gailua kanpoko pantaila bakarrean"</item>
- <item msgid="5280431949814340475">"Erakutsi gailua fokuratutako azken pantailan"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index a5235cf5336a..1c422b656347 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Kargatze bizkorra"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Administratzaileak kontrolatzen du"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Ezarpen mugatuak kontrolatzen du"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Ez dago erabilgarri deiak egin bitartean"</string>
<string name="disabled" msgid="8017887509554714950">"Desgaituta"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Baimenduta"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Baimendu gabe"</string>
diff --git a/packages/SettingsLib/res/values-fa/arrays.xml b/packages/SettingsLib/res/values-fa/arrays.xml
index 9e1da41e6edc..d7face8672af 100644
--- a/packages/SettingsLib/res/values-fa/arrays.xml
+++ b/packages/SettingsLib/res/values-fa/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"۲"</item>
<item msgid="4779928470672877922">"۳"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"فقط نمایشگر دستگاه (پیش‌فرض)"</item>
- <item msgid="9161645858025071955">"نمایشگر خارجی"</item>
- <item msgid="114384731934682483">"کانونی‌محور"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"نمایش سایه فقط در نمایشگر دستگاه"</item>
- <item msgid="7795034287069726554">"نمایش دستگاه در یک نمایشگر خارجی"</item>
- <item msgid="5280431949814340475">"نمایش دستگاه در آخرین نمایشگر کانونی‌شده"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"نمایشگر_پیش‌فرض"</item>
- <item msgid="774789415968826925">"هر_نمایشگر_خارجی"</item>
- <item msgid="7880769915418638436">"آخرین_لمس_نوار_وضعیت"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index 6d5e42b976f5..b1f76fb5a787 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"درحال شارژ سریع"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"توسط سرپرست سیستم کنترل می‌شود"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"با تنظیم «حالت محدود» کنترل می‌شود"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"درطول تماس دردسترس نیست"</string>
<string name="disabled" msgid="8017887509554714950">"غیر فعال شد"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"مجاز بودن"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"مجاز نبودن"</string>
diff --git a/packages/SettingsLib/res/values-fi/arrays.xml b/packages/SettingsLib/res/values-fi/arrays.xml
index 0c970ec5fbbd..a10dfbe7a2f9 100644
--- a/packages/SettingsLib/res/values-fi/arrays.xml
+++ b/packages/SettingsLib/res/values-fi/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Vain laitteen näyttö (oletus)"</item>
- <item msgid="9161645858025071955">"Ulkoinen näyttö"</item>
- <item msgid="114384731934682483">"Kohdistusperustainen"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Näytä ilmoitusalue vain laitteen näytöllä"</item>
- <item msgid="7795034287069726554">"Näytä laite yhdellä ulkoisella näytöllä"</item>
- <item msgid="5280431949814340475">"Näytä laite viimeksi kohdistetulla näytöllä"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 1e2db99f14d7..b59aa3019f67 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Nopea lataus"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Järjestelmänvalvoja hallinnoi tätä asetusta."</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Rajoitettujen asetusten mukaisesti"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Ei käytettävissä puhelujen aikana"</string>
<string name="disabled" msgid="8017887509554714950">"Pois päältä"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Sallittu"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Ei sallittu"</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/arrays.xml b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
index 6fc0ed9a1e3c..9eec65d3119c 100644
--- a/packages/SettingsLib/res/values-fr-rCA/arrays.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Écran de l\'appareil seulement (par défaut)"</item>
- <item msgid="9161645858025071955">"Écran externe"</item>
- <item msgid="114384731934682483">"Affichage mis en évidence"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Afficher le volet sur l\'écran de l\'appareil seulement"</item>
- <item msgid="7795034287069726554">"Afficher l\'appareil sur un seul écran externe"</item>
- <item msgid="5280431949814340475">"Afficher l\'appareil sur le dernier affichage mis en évidence"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index f2a3454268c0..99ba8b0ba5df 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Recharge rapide"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Contrôlé par l\'administrateur"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Contrôlé par les paramètres restreints"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Indisponible pendant les appels"</string>
<string name="disabled" msgid="8017887509554714950">"Désactivée"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Autorisée"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Non autorisée"</string>
diff --git a/packages/SettingsLib/res/values-fr/arrays.xml b/packages/SettingsLib/res/values-fr/arrays.xml
index 36eb52d66ef2..37875095b6dc 100644
--- a/packages/SettingsLib/res/values-fr/arrays.xml
+++ b/packages/SettingsLib/res/values-fr/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Écran de l\'appareil uniquement (par défaut)"</item>
- <item msgid="9161645858025071955">"Écran externe"</item>
- <item msgid="114384731934682483">"Basé sur la sélection"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Afficher le volet sur l\'écran de l\'appareil uniquement"</item>
- <item msgid="7795034287069726554">"Afficher l\'appareil sur un seul écran externe"</item>
- <item msgid="5280431949814340475">"Afficher l\'appareil sur le dernier écran avec lequel l\'utilisateur a interagi"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index a017fa74e658..ba77d87100c2 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Recharge rapide"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Contrôlé par l\'administrateur"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Contrôlé par les paramètres restreints"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Indisponible pendant les appels"</string>
<string name="disabled" msgid="8017887509554714950">"Désactivée"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Autorisé"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Non autorisé"</string>
diff --git a/packages/SettingsLib/res/values-gl/arrays.xml b/packages/SettingsLib/res/values-gl/arrays.xml
index cd085fa65275..9307ba7e747a 100644
--- a/packages/SettingsLib/res/values-gl/arrays.xml
+++ b/packages/SettingsLib/res/values-gl/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Só pantalla do dispositivo (opción predeterminada)"</item>
- <item msgid="9161645858025071955">"Pantalla externa"</item>
- <item msgid="114384731934682483">"En función do enfoque"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Mostrar panel despregable só na pantalla do dispositivo"</item>
- <item msgid="7795034287069726554">"Mostrar dispositivo nunha única pantalla externa"</item>
- <item msgid="5280431949814340475">"Mostrar dispositivo na última pantalla enfocada"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"pantalla_predeterminada"</item>
- <item msgid="774789415968826925">"calquera_pantalla_externa"</item>
- <item msgid="7880769915418638436">"último_toque_barra_estado"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index 6b2801938173..3d5a9bdfedae 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Carga rápida"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Opción controlada polo administrador"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Baixo o control de opcións restrinxidas"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Non dispoñible durante as chamadas"</string>
<string name="disabled" msgid="8017887509554714950">"Desactivada"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Permiso concedido"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Permiso non concedido"</string>
diff --git a/packages/SettingsLib/res/values-gu/arrays.xml b/packages/SettingsLib/res/values-gu/arrays.xml
index 912df2d85988..6026663ba4df 100644
--- a/packages/SettingsLib/res/values-gu/arrays.xml
+++ b/packages/SettingsLib/res/values-gu/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"માત્ર ડિવાઇસનું ડિસ્પ્લે (ડિફૉલ્ટ)"</item>
- <item msgid="9161645858025071955">"બાહ્ય ડિસ્પ્લે"</item>
- <item msgid="114384731934682483">"ફોકસ-આધારિત"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"માત્ર ડિવાઇસના ડિસ્પ્લે પર શેડ બતાવો"</item>
- <item msgid="7795034287069726554">"માત્ર એક બાહ્ય ડિસ્પ્લે પર ડિવાઇસ બતાવો"</item>
- <item msgid="5280431949814340475">"છેલ્લે ફોકસ કરેલા ડિસ્પ્લે પર ડિવાઇસ બતાવો"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index fbf9afc0a8a4..57ecad80e7e9 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -107,7 +107,7 @@
<string name="tv_bluetooth_battery_level_untethered_right" msgid="8610019317279155595">"જમણી બાજુ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> બૅટરી"</string>
<string name="bluetooth_active_no_battery_level" msgid="4155462233006205630">"સક્રિય"</string>
<string name="bluetooth_saved_device" msgid="4895871321722311428">"સાચવેલું"</string>
- <string name="bluetooth_hearing_aid_left_active" msgid="8330226430756799572">"ચાલુ છે (માત્ર ડાબી બાજુ)"</string>
+ <string name="bluetooth_hearing_aid_left_active" msgid="8330226430756799572">"સક્રિય (માત્ર ડાબી બાજુ)"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="2244728507170385397">"ચાલુ છે (માત્ર જમણી બાજુ)"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="4294571497939983181">"ચાલુ છે (ડાબી અને જમણી બાજુ)"</string>
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"આસપાસના અવાજો અપડેટ કરી શક્યા નથી"</string>
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ઝડપી ચાર્જિંગ"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"વ્યવસ્થાપક દ્વારા નિયંત્રિત"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"પ્રતિબંધિત સેટિંગ દ્વારા નિયંત્રિત"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"કૉલ દરમિયાન અનુપલબ્ધ"</string>
<string name="disabled" msgid="8017887509554714950">"બંધ કરી"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"મંજૂરી છે"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"મંજૂરી નથી"</string>
diff --git a/packages/SettingsLib/res/values-hi/arrays.xml b/packages/SettingsLib/res/values-hi/arrays.xml
index 25d638897f96..67de2aea289a 100644
--- a/packages/SettingsLib/res/values-hi/arrays.xml
+++ b/packages/SettingsLib/res/values-hi/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"सिर्फ़ डिवाइस का डिसप्ले (डिफ़ॉल्ट)"</item>
- <item msgid="9161645858025071955">"बाहरी डिसप्ले पर"</item>
- <item msgid="114384731934682483">"फ़ोकस के हिसाब से"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"सिर्फ़ डिवाइस के डिसप्ले पर शेड दिखाएं"</item>
- <item msgid="7795034287069726554">"शेड को बाहरी डिसप्ले पर दिखाएं"</item>
- <item msgid="5280431949814340475">"फ़ोकस किए गए पिछले डिसप्ले पर शेड दिखाएं"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index e883615477fe..c1f4fe25f4aa 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -107,7 +107,7 @@
<string name="tv_bluetooth_battery_level_untethered_right" msgid="8610019317279155595">"दाएं ईयरबड में <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बैटरी बची है"</string>
<string name="bluetooth_active_no_battery_level" msgid="4155462233006205630">"चालू"</string>
<string name="bluetooth_saved_device" msgid="4895871321722311428">"सेव किया गया"</string>
- <string name="bluetooth_hearing_aid_left_active" msgid="8330226430756799572">"सिर्फ़ बाईं तरफ़ वाला चालू है"</string>
+ <string name="bluetooth_hearing_aid_left_active" msgid="8330226430756799572">"सिर्फ़ बाईं ओर की मशीन चालू है"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="2244728507170385397">"सिर्फ़ दाईं तरफ़ वाला चालू है"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="4294571497939983181">"बाईं और दाईं तरफ़ वाला चालू है"</string>
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"वॉल्यूम को मैनेज करने की सेटिंग नहीं बदली जा सकी"</string>
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"फ़ास्ट चार्जिंग"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"इसका नियंत्रण एडमिन के पास है"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"इसे पाबंदी मोड वाली सेटिंग से कंट्रोल किया जाता है"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"कॉल के दौरान उपलब्ध नहीं है"</string>
<string name="disabled" msgid="8017887509554714950">"बंद किया गया"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"अनुमति है"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"अनुमति नहीं है"</string>
diff --git a/packages/SettingsLib/res/values-hr/arrays.xml b/packages/SettingsLib/res/values-hr/arrays.xml
index 639e39ec1410..d0ab9fd45fa7 100644
--- a/packages/SettingsLib/res/values-hr/arrays.xml
+++ b/packages/SettingsLib/res/values-hr/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Samo zaslon uređaja (zadano)"</item>
<item msgid="9161645858025071955">"Vanjski zaslon"</item>
- <item msgid="114384731934682483">"Na temelju fokusa"</item>
+ <item msgid="23651860565814477">"Najnoviji dodir trake statusa"</item>
+ <item msgid="7521112827893653392">"Na temelju fokusa"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Prikaži sjenu samo na zaslonu uređaja"</item>
- <item msgid="7795034287069726554">"Prikaži uređaj na jednom vanjskom zaslonu"</item>
- <item msgid="5280431949814340475">"Prikaži uređaj na posljednjem fokusiranom zaslonu"</item>
+ <item msgid="1955398604822147783">"Prikaži sjenčanje na jednom vanjskom zaslonu"</item>
+ <item msgid="391477482416751568">"Prikaži sjenčanje na zaslonu na kojem je posljednje stupljeno u interakciju s trakom statusa"</item>
+ <item msgid="1746820128097981528">"Prikaži sjenčanje na posljednjem fokusiranom zaslonu"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-hu/arrays.xml b/packages/SettingsLib/res/values-hu/arrays.xml
index d1319665bf0b..d8d42f952734 100644
--- a/packages/SettingsLib/res/values-hu/arrays.xml
+++ b/packages/SettingsLib/res/values-hu/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Csak az eszköz kijelzője (alapértelmezett)"</item>
- <item msgid="9161645858025071955">"Külső kijelző"</item>
- <item msgid="114384731934682483">"Fókusz alapján"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Felület megjelenítése csak az eszköz kijelzőjén"</item>
- <item msgid="7795034287069726554">"Felület megjelenítése egyetlen külső kijelzőn"</item>
- <item msgid="5280431949814340475">"Felület megjelenítése a legutóbb fókuszban lévő kijelzőn"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 6627cb140777..fa321555075f 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Gyors töltés…"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Rendszergazda által irányítva"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Korlátozott beállítás vezérli"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Nem áll rendelkezésre hívások közben"</string>
<string name="disabled" msgid="8017887509554714950">"Letiltva"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Engedélyezett"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Nem engedélyezett"</string>
diff --git a/packages/SettingsLib/res/values-hy/arrays.xml b/packages/SettingsLib/res/values-hy/arrays.xml
index 56545014e60f..b2133fbafb26 100644
--- a/packages/SettingsLib/res/values-hy/arrays.xml
+++ b/packages/SettingsLib/res/values-hy/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Միայն սարքի էկրանը (կանխադրված)"</item>
- <item msgid="9161645858025071955">"Արտաքին էկրան"</item>
- <item msgid="114384731934682483">"Ֆոկուսի հիման վրա"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Ցույց տալ երանգը միայն սարքի էկրանին"</item>
- <item msgid="7795034287069726554">"Ցույց տալ սարքը մեկ արտաքին էկրանին"</item>
- <item msgid="5280431949814340475">"Ցույց տալ սարքը վերջին ֆոկուսավորված էկրանին"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index 2248b7bd59f0..fa87813cc122 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Արագ լիցքավորում"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Վերահսկվում է ադմինիստրատորի կողմից"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Կառավարվում է սահմանափակ ռեժիմի կարգավորումներով"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Զանգի ընթացքում հասանելի չէ"</string>
<string name="disabled" msgid="8017887509554714950">"Կասեցված է"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Թույլատրված է"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Արգելված"</string>
diff --git a/packages/SettingsLib/res/values-in/arrays.xml b/packages/SettingsLib/res/values-in/arrays.xml
index c256e8cd72d0..fa2fa9e3d56c 100644
--- a/packages/SettingsLib/res/values-in/arrays.xml
+++ b/packages/SettingsLib/res/values-in/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Hanya layar perangkat (Default)"</item>
- <item msgid="9161645858025071955">"Layar eksternal"</item>
- <item msgid="114384731934682483">"Berbasis fokus"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Tampilkan shade hanya di layar perangkat"</item>
- <item msgid="7795034287069726554">"Tampilkan perangkat di satu layar eksternal"</item>
- <item msgid="5280431949814340475">"Tampilkan perangkat di layar yang terakhir difokuskan"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 5798f8d4931b..1ff4b29ddaa0 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Pengisian daya cepat"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Dikontrol oleh admin"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Dikontrol oleh Setelan Terbatas"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Tidak tersedia selama panggilan berlangsung"</string>
<string name="disabled" msgid="8017887509554714950">"Dinonaktifkan"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Diizinkan"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Tidak diizinkan"</string>
diff --git a/packages/SettingsLib/res/values-is/arrays.xml b/packages/SettingsLib/res/values-is/arrays.xml
index 1d81344ba7b2..851a7a4929ea 100644
--- a/packages/SettingsLib/res/values-is/arrays.xml
+++ b/packages/SettingsLib/res/values-is/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Aðeins skjár tækis (sjálfgefið)"</item>
- <item msgid="9161645858025071955">"Ytri skjár"</item>
- <item msgid="114384731934682483">"Byggt á fókus"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Aðeins skyggja skjá tækis"</item>
- <item msgid="7795034287069726554">"Sýna tæki á einum ytri skjá"</item>
- <item msgid="5280431949814340475">"Sýna tæki á skjá sem var síðast í fókus"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index e8e49d072ef7..804ea6318400 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Hraðhleðsla"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Stjórnað af kerfisstjóra"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Stýrt af takmarkaði stillingu"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Ekki í boði á meðan á símtölum stendur"</string>
<string name="disabled" msgid="8017887509554714950">"Óvirkt"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Heimilað"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Ekki heimilað"</string>
diff --git a/packages/SettingsLib/res/values-it/arrays.xml b/packages/SettingsLib/res/values-it/arrays.xml
index 331410cada30..48777a398b83 100644
--- a/packages/SettingsLib/res/values-it/arrays.xml
+++ b/packages/SettingsLib/res/values-it/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Solo display del dispositivo (impostazione predefinita)"</item>
<item msgid="9161645858025071955">"Display esterno"</item>
- <item msgid="114384731934682483">"In base alla selezione"</item>
+ <item msgid="23651860565814477">"Ultimo tocco alla barra di stato"</item>
+ <item msgid="7521112827893653392">"In base alla selezione"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Mostra l\'area delle notifiche solo sul display del dispositivo"</item>
- <item msgid="7795034287069726554">"Mostra il dispositivo su un singolo display esterno"</item>
- <item msgid="5280431949814340475">"Mostra il dispositivo sull\'ultimo display selezionato"</item>
+ <item msgid="1955398604822147783">"Mostra l\'area delle notifiche su un singolo display esterno"</item>
+ <item msgid="391477482416751568">"Mostra l\'area delle notifiche sul display in cui è avvenuta l\'ultima interazione con la barra di stato"</item>
+ <item msgid="1746820128097981528">"Mostra l\'area delle notifiche sull\'ultimo display selezionato"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index b2404cf7a305..09ec5ccaf23f 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -107,7 +107,7 @@
<string name="tv_bluetooth_battery_level_untethered_right" msgid="8610019317279155595">"Destra: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_active_no_battery_level" msgid="4155462233006205630">"Attivo"</string>
<string name="bluetooth_saved_device" msgid="4895871321722311428">"Dispositivo salvato"</string>
- <string name="bluetooth_hearing_aid_left_active" msgid="8330226430756799572">"Attivo (solo sinistro)"</string>
+ <string name="bluetooth_hearing_aid_left_active" msgid="8330226430756799572">"Attiva (solo sinistra)"</string>
<string name="bluetooth_hearing_aid_right_active" msgid="2244728507170385397">"Attivo (solo destro)"</string>
<string name="bluetooth_hearing_aid_left_and_right_active" msgid="4294571497939983181">"Attivi (destro e sinistro)"</string>
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Impossibile aggiornare audio ambientale"</string>
@@ -505,8 +505,8 @@
<string name="power_charging_limited" msgid="4144004473976005214">"<xliff:g id="LEVEL">%1$s</xliff:g> - Ricarica in sospeso per proteggere la batteria"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> ‑ In carica"</string>
<string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Ricarica completa entro <xliff:g id="TIME">%3$s</xliff:g>"</string>
- <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Batteria completamente carica entro <xliff:g id="TIME">%2$s</xliff:g>"</string>
- <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Batteria completamente carica entro <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Batteria completamente carica entro: <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Batteria completamente carica entro: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Ricarica completa entro le ore <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Sconosciuta"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"In carica"</string>
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Ricarica rapida"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Gestita dall\'amministratore"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Gestita tramite impostazioni con restrizioni"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Non disponibile durante le chiamate"</string>
<string name="disabled" msgid="8017887509554714950">"Disattivato"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Autorizzazione concessa"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Autorizzazione non concessa"</string>
diff --git a/packages/SettingsLib/res/values-iw/arrays.xml b/packages/SettingsLib/res/values-iw/arrays.xml
index 5c1845f6dca9..9d176c03cdfb 100644
--- a/packages/SettingsLib/res/values-iw/arrays.xml
+++ b/packages/SettingsLib/res/values-iw/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"מסך המכשיר בלבד (ברירת המחדל)"</item>
- <item msgid="9161645858025071955">"מסך חיצוני"</item>
- <item msgid="114384731934682483">"לפי התמקדות"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"הצגת הצללה במסך המכשיר בלבד"</item>
- <item msgid="7795034287069726554">"הצגת המכשיר במסך חיצוני אחד"</item>
- <item msgid="5280431949814340475">"הצגת ההתראות במסך האחרון שהשתמשת בו"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index b5201058a439..361dd1804e0b 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"טעינה מהירה"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"נמצא בשליטת מנהל מערכת"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"בשליטה של הגדרה מוגבלת"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"ההעדפה הזו לא זמינה במהלך שיחות"</string>
<string name="disabled" msgid="8017887509554714950">"מושבת"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"מורשה"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"לא מורשה"</string>
@@ -617,7 +616,7 @@
<string name="help_label" msgid="3528360748637781274">"עזרה ומשוב"</string>
<string name="storage_category" msgid="2287342585424631813">"אחסון"</string>
<string name="shared_data_title" msgid="1017034836800864953">"נתונים משותפים"</string>
- <string name="shared_data_summary" msgid="5516326713822885652">"הצגה ושינוי של נתונים משותפים"</string>
+ <string name="shared_data_summary" msgid="5516326713822885652">"צפייה בנתונים המשותפים ושינוי שלהם"</string>
<string name="shared_data_no_blobs_text" msgid="3108114670341737434">"אין נתונים משותפים למשתמש הזה."</string>
<string name="shared_data_query_failure_text" msgid="3489828881998773687">"אירעה שגיאה באחזור הנתונים המשותפים. צריך לנסות שוב."</string>
<string name="blob_id_text" msgid="8680078988996308061">"מזהה נתונים משותפים: <xliff:g id="BLOB_ID">%d</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-ja/arrays.xml b/packages/SettingsLib/res/values-ja/arrays.xml
index 9dc234b8758d..d5d5ff1330ef 100644
--- a/packages/SettingsLib/res/values-ja/arrays.xml
+++ b/packages/SettingsLib/res/values-ja/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"デバイスのディスプレイのみ(デフォルト)"</item>
<item msgid="9161645858025071955">"外部ディスプレイ"</item>
- <item msgid="114384731934682483">"フォーカスに基づく"</item>
+ <item msgid="23651860565814477">"ステータスバーの最新のタップ"</item>
+ <item msgid="7521112827893653392">"フォーカスに基づく"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"デバイスのディスプレイにのみシェードを表示する"</item>
- <item msgid="7795034287069726554">"1 台の外部ディスプレイにデバイスを表示する"</item>
- <item msgid="5280431949814340475">"最後にフォーカスされたディスプレイにデバイスを表示する"</item>
+ <item msgid="1955398604822147783">"1 台の外部ディスプレイにシェードを表示する"</item>
+ <item msgid="391477482416751568">"最後にステータスバーが操作されたディスプレイにシェードを表示する"</item>
+ <item msgid="1746820128097981528">"最後にフォーカスされたディスプレイにシェードを表示する"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 320c707a92a0..1170cd1db76a 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -123,7 +123,7 @@
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"有効(メディアのみ)、左のみ"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"有効(メディアのみ)、右のみ"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"有効(メディアのみ)、左右"</string>
- <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"メディアの音声"</string>
+ <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"メディアのオーディオ"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"電話"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ファイル転送"</string>
<string name="bluetooth_profile_hid" msgid="2969922922664315866">"入力デバイス"</string>
diff --git a/packages/SettingsLib/res/values-ka/arrays.xml b/packages/SettingsLib/res/values-ka/arrays.xml
index 8d1adf653f97..8ee333835a06 100644
--- a/packages/SettingsLib/res/values-ka/arrays.xml
+++ b/packages/SettingsLib/res/values-ka/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"მხოლოდ მოწყობილობის ეკრანი (ნაგულისხმევი)"</item>
- <item msgid="9161645858025071955">"გარე ეკრანი"</item>
- <item msgid="114384731934682483">"ფოკუსის მიხედვით"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"ჩრდილის ჩვენება მხოლოდ მოწყობილობის ეკრანზე"</item>
- <item msgid="7795034287069726554">"ჩრდილის ჩვენება ერთ გარე ეკრანზე"</item>
- <item msgid="5280431949814340475">"მოწყობილობის ჩვენება ბოლო ფოკუსირებულ ეკრანზე"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-kk/arrays.xml b/packages/SettingsLib/res/values-kk/arrays.xml
index e8996de87cb0..6aa5f2b1c4e5 100644
--- a/packages/SettingsLib/res/values-kk/arrays.xml
+++ b/packages/SettingsLib/res/values-kk/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Тек құрылғы дисплейі (әдепкі)"</item>
- <item msgid="9161645858025071955">"Сыртқы дисплей"</item>
- <item msgid="114384731934682483">"Назарға негізделген"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Құрылғы дисплейінде ғана реңк көрсету"</item>
- <item msgid="7795034287069726554">"Жалғыз сыртқы дисплейі бар құрылғыны көрсету"</item>
- <item msgid="5280431949814340475">"Соңғы рет назарда болған дисплейдегі құрылғыны көрсету"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index ebb723ce87c2..9082a5665f92 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -506,7 +506,7 @@
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – Зарядталып жатыр"</string>
<string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Зарядталып болады: <xliff:g id="TIME">%3$s</xliff:g>"</string>
<string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Толық заряд алуға қалған уақыт: <xliff:g id="TIME">%2$s</xliff:g>"</string>
- <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Толық заряд алуға қалған уақыт: <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Толықтай зарядталып болады: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Заряд толуына қалған уақыт: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Белгісіз"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Зарядталуда"</string>
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Жылдам зарядтау"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Әкімші басқарады"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Шектелген параметрлер арқылы басқарылады."</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Қоңырау шалу кезінде қолжетімді емес."</string>
<string name="disabled" msgid="8017887509554714950">"Өшірілген"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Рұқсат берілген"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Рұқсат етілмеген"</string>
diff --git a/packages/SettingsLib/res/values-km/arrays.xml b/packages/SettingsLib/res/values-km/arrays.xml
index ee6ee565fbae..e9a21e87312f 100644
--- a/packages/SettingsLib/res/values-km/arrays.xml
+++ b/packages/SettingsLib/res/values-km/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"ផ្ទាំងអេក្រង់ឧបករណ៍តែប៉ុណ្ណោះ (លំនាំដើម)"</item>
- <item msgid="9161645858025071955">"ផ្ទាំង​អេក្រង់​ខាង​ក្រៅ"</item>
- <item msgid="114384731934682483">"ផ្អែកលើការផ្ដោត"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"បង្ហាញផ្ទាំងនៅលើផ្ទាំងអេក្រង់ឧបករណ៍តែប៉ុណ្ណោះ"</item>
- <item msgid="7795034287069726554">"បង្ហាញឧបករណ៍នៅលើផ្ទាំងអេក្រង់ខាងក្រៅតែមួយ"</item>
- <item msgid="5280431949814340475">"បង្ហាញឧបករណ៍នៅលើផ្ទាំងអេក្រង់ដែលផ្ដោតចុងក្រោយ"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-kn/arrays.xml b/packages/SettingsLib/res/values-kn/arrays.xml
index 51e6e15a3e1b..dc9c7e096ab3 100644
--- a/packages/SettingsLib/res/values-kn/arrays.xml
+++ b/packages/SettingsLib/res/values-kn/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"ಸಾಧನದ ಡಿಸ್‌ಪ್ಲೇ ಮಾತ್ರ (ಡೀಫಾಲ್ಟ್)"</item>
- <item msgid="9161645858025071955">"ಬಾಹ್ಯ ಡಿಸ್‌ಪ್ಲೇ"</item>
- <item msgid="114384731934682483">"ಫೋಕಸ್-ಆಧಾರಿತ"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"ಸಾಧನದ ಡಿಸ್‌ಪ್ಲೇನಲ್ಲಿ ಮಾತ್ರ ಶೇಡ್ ತೋರಿಸಿ"</item>
- <item msgid="7795034287069726554">"ಒಂದೇ ಬಾಹ್ಯ ಡಿಸ್‌ಪ್ಲೇನಲ್ಲಿ ಸಾಧನವನ್ನು ತೋರಿಸಿ"</item>
- <item msgid="5280431949814340475">"ಕೊನೆಯ ಕೇಂದ್ರೀಕೃತ ಡಿಸ್‌ಪ್ಲೇನಲ್ಲಿ ಸಾಧನವನ್ನು ತೋರಿಸಿ"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index b0b6fcac6cf9..d2b217683d41 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ಫಾಸ್ಟ್ ಚಾರ್ಜಿಂಗ್"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"ನಿರ್ವಾಹಕರ ಮೂಲಕ ನಿಯಂತ್ರಿಸಲಾಗಿದೆ"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ನಿರ್ಬಂಧಿಸಲಾದ ಸೆಟ್ಟಿಂಗ್ ಮೂಲಕ ನಿಯಂತ್ರಿಸಲಾಗುತ್ತದೆ"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"ಕರೆಗಳ ಸಮಯದಲ್ಲಿ ಲಭ್ಯವಿಲ್ಲ"</string>
<string name="disabled" msgid="8017887509554714950">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"ಅನುಮತಿಸಲಾಗಿದೆ"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"ಅನುಮತಿ ಇಲ್ಲ"</string>
diff --git a/packages/SettingsLib/res/values-ko/arrays.xml b/packages/SettingsLib/res/values-ko/arrays.xml
index dd1121f55c04..1477497197c0 100644
--- a/packages/SettingsLib/res/values-ko/arrays.xml
+++ b/packages/SettingsLib/res/values-ko/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"기기 디스플레이만(기본값)"</item>
- <item msgid="9161645858025071955">"외부 디스플레이"</item>
- <item msgid="114384731934682483">"포커스 기반"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"기기 디스플레이에만 음영 표시"</item>
- <item msgid="7795034287069726554">"단일 외부 디스플레이에 기기 표시"</item>
- <item msgid="5280431949814340475">"마지막으로 포커스된 디스플레이에 기기 표시"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index 9a2af376bdc6..bece63792ecb 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"급속 충전"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"관리자가 제어"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"제한된 설정으로 제어됨"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"통화 중에는 사용할 수 없습니다."</string>
<string name="disabled" msgid="8017887509554714950">"사용 안함"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"허용됨"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"허용되지 않음"</string>
diff --git a/packages/SettingsLib/res/values-ky/arrays.xml b/packages/SettingsLib/res/values-ky/arrays.xml
index fe44fe066e46..54d9ecd5fbae 100644
--- a/packages/SettingsLib/res/values-ky/arrays.xml
+++ b/packages/SettingsLib/res/values-ky/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Түзмөктүн экраны гана (демейки)"</item>
- <item msgid="9161645858025071955">"Тышкы экран"</item>
- <item msgid="114384731934682483">"Focus-based"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Көлөкөнү түзмөктүн экранында гана көрсөтүү"</item>
- <item msgid="7795034287069726554">"Түзмөктү бир тышкы экранда көрсөтүү"</item>
- <item msgid="5280431949814340475">"Түзмөктү акыркы активдүү экранда көрсөтүү"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index a756d57b1e96..b6baf38df4d3 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Ыкчам кубаттоо"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Администратор тарабынан көзөмөлдөнөт"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Чектелген параметр аркылуу көзөмөлдөнөт"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Сүйлөшүп жаткан учурда жеткиликсиз"</string>
<string name="disabled" msgid="8017887509554714950">"Өчүрүлгөн"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Уруксат берилген"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Тыюу салынган"</string>
diff --git a/packages/SettingsLib/res/values-lo/arrays.xml b/packages/SettingsLib/res/values-lo/arrays.xml
index d9da45b40f99..ccf645b2d77c 100644
--- a/packages/SettingsLib/res/values-lo/arrays.xml
+++ b/packages/SettingsLib/res/values-lo/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"ຈໍສະແດງຜົນຂອງອຸປະກອນເທົ່ານັ້ນ (ຄ່າເລີ່ມຕົ້ນ)"</item>
- <item msgid="9161645858025071955">"ຈໍສະແດງຜົນພາຍນອກ"</item>
- <item msgid="114384731934682483">"ອີງຕາມການໂຟກັສ"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"ສະແດງເສດສີໃນຈໍສະແດງຜົນຂອງອຸປະກອນເທົ່ານັ້ນ"</item>
- <item msgid="7795034287069726554">"ສະແດງອຸປະກອນໃນຈໍສະແດງຜົນພາຍນອກເຄື່ອງດຽວ"</item>
- <item msgid="5280431949814340475">"ສະແດງອຸປະກອນໃນຈໍສະແດງຜົນທີ່ໂຟກັສຫຼ້າສຸດ"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-lt/arrays.xml b/packages/SettingsLib/res/values-lt/arrays.xml
index 6129af9b5a15..1f40b1a6ed9b 100644
--- a/packages/SettingsLib/res/values-lt/arrays.xml
+++ b/packages/SettingsLib/res/values-lt/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Tik įrenginio ekranas (numatytasis nustatymas)"</item>
<item msgid="9161645858025071955">"Išorinis ekranas"</item>
- <item msgid="114384731934682483">"Pagal fokusavimą"</item>
+ <item msgid="23651860565814477">"Naujausias būsenos juostos palietimas"</item>
+ <item msgid="7521112827893653392">"Pagal fokusavimą"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Rodyti šešėlį tik įrenginio ekrane"</item>
- <item msgid="7795034287069726554">"Rodyti įrenginį viename išoriniame ekrane"</item>
- <item msgid="5280431949814340475">"Rodyti įrenginį paskutiniame fokusuotame ekrane"</item>
+ <item msgid="1955398604822147783">"Rodyti šešėlį viename išoriniame ekrane"</item>
+ <item msgid="391477482416751568">"Rodyti šešėlį ekrane, kuriame paskutinį kartą buvo sąveikaujama su būsenos juosta"</item>
+ <item msgid="1746820128097981528">"Rodyti šešėlį paskutiniame fokusuotame ekrane"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index caa5b18855a8..f81caa830ddd 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Spartusis įkrovimas"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Valdo administratorius"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Valdoma pagal apribotą nustatymą"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Nepasiekiama per skambučius"</string>
<string name="disabled" msgid="8017887509554714950">"Neleidžiama"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Leidžiama"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Neleidžiama"</string>
diff --git a/packages/SettingsLib/res/values-lv/arrays.xml b/packages/SettingsLib/res/values-lv/arrays.xml
index 92d141e1723b..6d293be28a4e 100644
--- a/packages/SettingsLib/res/values-lv/arrays.xml
+++ b/packages/SettingsLib/res/values-lv/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Tikai ierīces displejs (noklusējums)"</item>
- <item msgid="9161645858025071955">"Ārējais displejs"</item>
- <item msgid="114384731934682483">"Saskaņā ar fokusu"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Rādīt ēnu tikai ierīces displejā"</item>
- <item msgid="7795034287069726554">"Rādīt ierīci vienā ārējā displejā"</item>
- <item msgid="5280431949814340475">"Rādīt ierīci pēdējā fokusētajā displejā"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index 84bf6929ca03..987857b9a6bd 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Ātrā uzlāde"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Kontrolē administrators"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Kontrolē ierobežots iestatījums"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Ierīce nav pieejama zvanu laikā"</string>
<string name="disabled" msgid="8017887509554714950">"Atspējots"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Atļauts"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Nav atļauts"</string>
diff --git a/packages/SettingsLib/res/values-mk/arrays.xml b/packages/SettingsLib/res/values-mk/arrays.xml
index 8e9bb21ff520..0490f2822c5f 100644
--- a/packages/SettingsLib/res/values-mk/arrays.xml
+++ b/packages/SettingsLib/res/values-mk/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Само на екранот на уредот (стандардно)"</item>
- <item msgid="9161645858025071955">"Надворешен екран"</item>
- <item msgid="114384731934682483">"Засновано на фокус"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Прикажувај сенка само на екранот на уредот"</item>
- <item msgid="7795034287069726554">"Прикажувај сенка на еден надворешен екран"</item>
- <item msgid="5280431949814340475">"Прикажувај сенка на последниот фокусиран екран"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"стандарден_екран"</item>
- <item msgid="774789415968826925">"кој_било_надворешен_екран"</item>
- <item msgid="7880769915418638436">"последен_допир_на_статусната_лента"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index a06da85e0041..fa654379f7ee 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Се полни брзо"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Контролирано од администраторот"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Контролирано со ограничени поставки"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Недостапно при повици"</string>
<string name="disabled" msgid="8017887509554714950">"Оневозможено"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Со дозвола"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Без дозвола"</string>
diff --git a/packages/SettingsLib/res/values-ml/arrays.xml b/packages/SettingsLib/res/values-ml/arrays.xml
index 4b8dbce2a523..811c03d5ddcc 100644
--- a/packages/SettingsLib/res/values-ml/arrays.xml
+++ b/packages/SettingsLib/res/values-ml/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"ഉപകരണ ഡിസ്പ്ലേ മാത്രം (ഡിഫോൾട്ട്)"</item>
<item msgid="9161645858025071955">"ബാഹ്യ ഡിസ്പ്ലേ"</item>
- <item msgid="114384731934682483">"ഫോക്കസ്-അടിസ്ഥാനമാക്കിയുള്ളത്"</item>
+ <item msgid="23651860565814477">"ഏറ്റവും പുതിയ സ്റ്റാറ്റസ് ബാർ ടച്ച്"</item>
+ <item msgid="7521112827893653392">"ഫോക്കസ്-അടിസ്ഥാനമാക്കിയുള്ളത്"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"ഉപകരണ ഡിസ്പ്ലേയിൽ മാത്രം ഷെയ്‌ഡ് കാണിക്കുക"</item>
- <item msgid="7795034287069726554">"ഒരൊറ്റ ബാഹ്യ ഡിസ്പ്ലേയിൽ ഉപകരണം കാണിക്കുക"</item>
- <item msgid="5280431949814340475">"അവസാനം ഫോക്കസ് ചെയ്ത ഡിസ്പ്ലേയിൽ ഉപകരണം കാണിക്കുക"</item>
+ <item msgid="1955398604822147783">"ഒരൊറ്റ ബാഹ്യ ഡിസ്പ്ലേയിൽ ഷെയ്‌ഡ് കാണിക്കുക"</item>
+ <item msgid="391477482416751568">"അവസാനം അതിന്റെ സ്റ്റാറ്റസ് ബാർ ഇടപഴകിയ ഡിസ്പ്ലേയിൽ ഷെയ്‌ഡ് കാണിക്കുക"</item>
+ <item msgid="1746820128097981528">"അവസാനം ഫോക്കസ് ചെയ്ത ഡിസ്പ്ലേയിൽ ഷേഡ് കാണിക്കുക"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-mn/arrays.xml b/packages/SettingsLib/res/values-mn/arrays.xml
index 5d5b8f9af59c..ca103afc9bbc 100644
--- a/packages/SettingsLib/res/values-mn/arrays.xml
+++ b/packages/SettingsLib/res/values-mn/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Зөвхөн төхөөрөмжийн дэлгэц (өгөгдмөл)"</item>
- <item msgid="9161645858025071955">"Гаднын дэлгэц"</item>
- <item msgid="114384731934682483">"Төвлөрөлд тулгуурласан"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Зөвхөн төхөөрөмж дээрх дэлгэцэд сүүдрийг харуулах"</item>
- <item msgid="7795034287069726554">"Зөвхөн гаднын нэг дэлгэц дээр төхөөрөмжийг харуулах"</item>
- <item msgid="5280431949814340475">"Сүүлд төвлөрсөн дэлгэц дээр төхөөрөмжийг харуулах"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index c165213214da..e8e9e0caf08a 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Шуурхай цэнэглэх"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Админ удирдсан"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Хязгаарлагдсан тохиргоогоор хянадаг"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Дуудлагын үер боломжгүй"</string>
<string name="disabled" msgid="8017887509554714950">"Идэвхгүйжүүлсэн"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Зөвшөөрсөн"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Зөвшөөрөөгүй"</string>
diff --git a/packages/SettingsLib/res/values-mr/arrays.xml b/packages/SettingsLib/res/values-mr/arrays.xml
index 959499c931f3..1437a2cd8660 100644
--- a/packages/SettingsLib/res/values-mr/arrays.xml
+++ b/packages/SettingsLib/res/values-mr/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"फक्त डिव्हाइस डिस्प्ले (डीफॉल्ट)"</item>
- <item msgid="9161645858025071955">"बाह्य डिस्प्ले"</item>
- <item msgid="114384731934682483">"फोकसवर आधारित"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"फक्त डिव्हाइस डिस्प्लेवर शेड दाखवा"</item>
- <item msgid="7795034287069726554">"एकल बाह्य डिस्प्लेवर डिव्हाइस दाखवा"</item>
- <item msgid="5280431949814340475">"शेवटच्या फोकस केलेल्या डिस्प्लेवर डिव्हाइस दाखवा"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index d47f8ffd3c99..f1f5cab8d6a7 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"फास्ट चार्जिंग"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"प्रशासकाने नियंत्रित केलेले"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"प्रतिबंधित केलेल्या सेटिंग द्वारे नियंत्रित"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"कॉल दरम्‍यान उपलब्ध नाही"</string>
<string name="disabled" msgid="8017887509554714950">"अक्षम"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"अनुमती आहे"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"अनुमती नाही"</string>
diff --git a/packages/SettingsLib/res/values-ms/arrays.xml b/packages/SettingsLib/res/values-ms/arrays.xml
index 7b6cbe17b5d0..464a0c73c734 100644
--- a/packages/SettingsLib/res/values-ms/arrays.xml
+++ b/packages/SettingsLib/res/values-ms/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Paparan peranti sahaja (Lalai)"</item>
<item msgid="9161645858025071955">"Paparan luaran"</item>
- <item msgid="114384731934682483">"Berasaskan fokus"</item>
+ <item msgid="23651860565814477">"Sentuhan bar status terbaharu"</item>
+ <item msgid="7521112827893653392">"Berasaskan fokus"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Tunjukkan rona warna pada paparan peranti sahaja"</item>
- <item msgid="7795034287069726554">"Tunjukkan peranti pada satu paparan luaran"</item>
- <item msgid="5280431949814340475">"Tunjukkan peranti pada paparan terakhir yang difokuskan"</item>
+ <item msgid="1955398604822147783">"Tunjukkan rona warna pada satu paparan luaran"</item>
+ <item msgid="391477482416751568">"Tunjukkan rona warna pada paparan yang terakhir berinteraksi dengan bar status"</item>
+ <item msgid="1746820128097981528">"Tunjukkan rona warna pada paparan fokus terakhir"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-my/arrays.xml b/packages/SettingsLib/res/values-my/arrays.xml
index 71a1c7c5649b..aef22b2203de 100644
--- a/packages/SettingsLib/res/values-my/arrays.xml
+++ b/packages/SettingsLib/res/values-my/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"စက်ဖန်သားပြင် သီးသန့် (မူရင်း)"</item>
- <item msgid="9161645858025071955">"ပြင်ပဖန်သားပြင်"</item>
- <item msgid="114384731934682483">"ပြသမှုအခြေပြု"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"စက်ဖန်သားပြင်တွင်သာ အရိပ်ပြပါ"</item>
- <item msgid="7795034287069726554">"ပြင်ပဖန်သားပြင်တစ်ခုတွင် စက်ကိုပြပါ"</item>
- <item msgid="5280431949814340475">"နောက်ဆုံးပြသထားသော ဖန်သားပြင်တွင် စက်ကိုပြပါ"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"မူရင်းဖန်သားပြင်"</item>
- <item msgid="774789415968826925">"မည်သည့်ပြင်ပဖန်သားပြင်မဆို"</item>
- <item msgid="7880769915418638436">"အခြေအနေပြဘား နောက်ဆုံးထိတွေ့မှု"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index 4ba82fdd8a1d..cf493cf40a9c 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"အမြန်အားသွင်းခြင်း"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"စီမံခန့်ခွဲသူမှ ထိန်းချုပ်ပါသည်"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ကန့်သတ်ဆက်တင်ဖြင့် ထိန်းချုပ်ထားသည်"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"ဖုန်းခေါ်ဆိုနေချိန်တွင် မရနိုင်ပါ"</string>
<string name="disabled" msgid="8017887509554714950">"ပိတ်ထားပြီး"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"ခွင့်ပြုထားသည်"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"ခွင့်မပြုပါ"</string>
diff --git a/packages/SettingsLib/res/values-nb/arrays.xml b/packages/SettingsLib/res/values-nb/arrays.xml
index 8d52693a5f16..88f193c119fc 100644
--- a/packages/SettingsLib/res/values-nb/arrays.xml
+++ b/packages/SettingsLib/res/values-nb/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Bare enhetsskjermen (standard)"</item>
- <item msgid="9161645858025071955">"Ekstern skjerm"</item>
- <item msgid="114384731934682483">"Fokusbasert"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Vis skyggen bare på enhetsskjermen"</item>
- <item msgid="7795034287069726554">"Vis enheten på én ekstern skjerm"</item>
- <item msgid="5280431949814340475">"Vis enheten på den sist fokuserte skjermen"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"Standardskjerm"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index f6de3466a816..045318a765b7 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Hurtiglading"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Kontrollert av administratoren"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Kontrollert av en begrenset innstilling"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Utilgjengelig under samtaler"</string>
<string name="disabled" msgid="8017887509554714950">"Deaktivert"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Tillatt"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Ikke tillatt"</string>
diff --git a/packages/SettingsLib/res/values-ne/arrays.xml b/packages/SettingsLib/res/values-ne/arrays.xml
index cd8448f684dd..1989994a289c 100644
--- a/packages/SettingsLib/res/values-ne/arrays.xml
+++ b/packages/SettingsLib/res/values-ne/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"२"</item>
<item msgid="4779928470672877922">"३"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"डिभाइसको डिस्प्ले मात्र (डिफल्ट)"</item>
- <item msgid="9161645858025071955">"बाह्य डिस्प्ले"</item>
- <item msgid="114384731934682483">"फोकसमा आधारित"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"यो सेड डिभाइसकै डिस्प्लेमा मात्र देखाउनुहोस्"</item>
- <item msgid="7795034287069726554">"यो डिभाइस एकल बाह्य डिस्प्लेमा देखाउनुहोस्"</item>
- <item msgid="5280431949814340475">"यो डिभाइस पछिल्लो पटक फोकस गरिएको डिस्प्लेमा देखाउनुहोस्"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index 28d02a14c484..d637a4bb9640 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -262,7 +262,7 @@
<string name="adb_paired_devices_title" msgid="5268997341526217362">"कनेक्ट गरिएका डिभाइस"</string>
<string name="adb_wireless_device_connected_summary" msgid="3039660790249148713">"हाल जोडिएको छ"</string>
<string name="adb_wireless_device_details_title" msgid="7129369670526565786">"डिभाइसको विवरण"</string>
- <string name="adb_device_forget" msgid="193072400783068417">"बिर्सनुहोस्"</string>
+ <string name="adb_device_forget" msgid="193072400783068417">"हटाउनुहोस्"</string>
<string name="adb_device_fingerprint_title_format" msgid="291504822917843701">"डिभाइसको फिंगरप्रिन्ट: <xliff:g id="FINGERPRINT_PARAM">%1$s</xliff:g>"</string>
<string name="adb_wireless_connection_failed_title" msgid="664211177427438438">"वायरलेसमा जोड्न सकिएन"</string>
<string name="adb_wireless_connection_failed_message" msgid="9213896700171602073">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> सही नेटवर्कमा जोडिएको कुरा सुनिश्चित गर्नुहोस्"</string>
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"फास्ट चार्जिङ"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"प्रशासकद्वारा नियन्त्रित"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"प्रतिबन्धित सेटिङले नियन्त्रण गरेको"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"कल चलिरहेका बेला उपलब्ध छैन"</string>
<string name="disabled" msgid="8017887509554714950">"असक्षम पारियो"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"अनुमति छ"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"अनुमति छैन"</string>
diff --git a/packages/SettingsLib/res/values-nl/arrays.xml b/packages/SettingsLib/res/values-nl/arrays.xml
index d92b806acf49..12c9551d850f 100644
--- a/packages/SettingsLib/res/values-nl/arrays.xml
+++ b/packages/SettingsLib/res/values-nl/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Alleen apparaatscherm (standaard)"</item>
- <item msgid="9161645858025071955">"Extern scherm"</item>
- <item msgid="114384731934682483">"Op focus gebaseerd"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Alleen paneel tonen op apparaatscherm"</item>
- <item msgid="7795034287069726554">"Apparaat tonen op één extern scherm"</item>
- <item msgid="5280431949814340475">"Apparaat tonen op laatste gefocuste scherm"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-or/arrays.xml b/packages/SettingsLib/res/values-or/arrays.xml
index f9beb8afd4d0..97823036d96a 100644
--- a/packages/SettingsLib/res/values-or/arrays.xml
+++ b/packages/SettingsLib/res/values-or/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"କେବଳ ଡିଭାଇସ ଡିସପ୍ଲେ (ଡିଫଲ୍ଟ)"</item>
- <item msgid="9161645858025071955">"ଏକ୍ସଟର୍ନଲ ଡିସପ୍ଲେ"</item>
- <item msgid="114384731934682483">"ଫୋକସ-ଆଧାରିତ"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"କେବଳ ଡିଭାଇସରେ ଡିସପ୍ଲେ ସେଡ ଦେଖାନ୍ତୁ"</item>
- <item msgid="7795034287069726554">"ସିଙ୍ଗଲ ଏକ୍ସଟର୍ନଲ ଡିସପ୍ଲେରେ ଡିଭାଇସ ଦେଖାନ୍ତୁ"</item>
- <item msgid="5280431949814340475">"ଫୋକସ କରାଯାଇଥିବା ଗତ ଡିସପ୍ଲେରେ ଡିଭାଇସ ଦେଖାନ୍ତୁ"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index 69d57a6803d0..bcde4e9bb831 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -129,7 +129,7 @@
<string name="bluetooth_profile_hid" msgid="2969922922664315866">"ଇନପୁଟ ଡିଭାଇସ"</string>
<string name="bluetooth_profile_pan" msgid="1006235139308318188">"ଇଣ୍ଟରନେଟ ଆକ୍ସେସ"</string>
<string name="bluetooth_profile_pbap" msgid="2103406516858653017">"କଣ୍ଟାକ୍ଟ ଓ କଲ ଇତିହାସକୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
- <string name="bluetooth_profile_pbap_summary" msgid="402819589201138227">"ସୂଚନାକୁ କଲ ଘୋଷଣା ଏବଂ ଆହୁରି ଅଧିକ ପାଇଁ ବ୍ୟବହାର କରାଯିବ"</string>
+ <string name="bluetooth_profile_pbap_summary" msgid="402819589201138227">"ସୂଚନାକୁ କଲ ଘୋଷଣା ଏବଂ ଆହୁରି ଅନେକ କିଛି ପାଇଁ ବ୍ୟବହାର କରାଯିବ"</string>
<string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"ଇଣ୍ଟର୍‌ନେଟ୍‌ ସଂଯୋଗ ଶେୟାରିଙ୍ଗ"</string>
<string name="bluetooth_profile_map" msgid="8907204701162107271">"ଟେକ୍ସଟ୍ ମେସେଜ୍"</string>
<string name="bluetooth_profile_sap" msgid="8304170950447934386">"SIM ଆକ୍ସେସ"</string>
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ଫାଷ୍ଟ ଚାର୍ଜିଂ"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"ଆଡ୍‌ମିନ୍‌ ଦ୍ୱାରା ନିୟନ୍ତ୍ରିତ"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ପ୍ରତିବନ୍ଧିତ ସେଟିଂ ଦ୍ୱାରା ନିୟନ୍ତ୍ରଣ କରାଯାଇଛି"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"କଲ କରିବାବେଳେ ଉପଲବ୍ଧ ନଥାଏ"</string>
<string name="disabled" msgid="8017887509554714950">"ଅକ୍ଷମ ହୋଇଛି"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"ଅନୁମତି ଦିଆଯାଇଛି"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"ଅନୁମତି ନାହିଁ"</string>
diff --git a/packages/SettingsLib/res/values-pa/arrays.xml b/packages/SettingsLib/res/values-pa/arrays.xml
index 1e7f05512d33..afb85cae2d1e 100644
--- a/packages/SettingsLib/res/values-pa/arrays.xml
+++ b/packages/SettingsLib/res/values-pa/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"ਸਿਰਫ਼ ਡੀਵਾਈਸ ਦੀ ਡਿਸਪਲੇ (ਪੂਰਵ-ਨਿਰਧਾਰਿਤ)"</item>
- <item msgid="9161645858025071955">"ਬਾਹਰੀ ਡਿਸਪਲੇ"</item>
- <item msgid="114384731934682483">"ਫੋਕਸ-ਆਧਾਰਿਤ"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"ਸਿਰਫ਼ ਡੀਵਾਈਸ ਦੀ ਡਿਸਪਲੇ \'ਤੇ ਸ਼ੇਡ ਦਿਖਾਓ"</item>
- <item msgid="7795034287069726554">"ਇਕਹਿਰੀ ਬਾਹਰੀ ਡਿਸਪਲੇ \'ਤੇ ਡੀਵਾਈਸ ਦਿਖਾਓ"</item>
- <item msgid="5280431949814340475">"ਫੋਕਸ ਕੀਤੀ ਗਈ ਪਿਛਲੀ ਡਿਸਪਲੇ \'ਤੇ ਡੀਵਾਈਸ ਦਿਖਾਓ"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index e12c2c01e6ae..821c84e20901 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -128,7 +128,7 @@
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ"</string>
<string name="bluetooth_profile_hid" msgid="2969922922664315866">"ਇਨਪੁੱਟ ਡੀਵਾਈਸ"</string>
<string name="bluetooth_profile_pan" msgid="1006235139308318188">"ਇੰਟਰਨੈੱਟ ਪਹੁੰਚ"</string>
- <string name="bluetooth_profile_pbap" msgid="2103406516858653017">"ਸੰਪਰਕਾਂ ਅਤੇ ਕਾਲ ਇਤਿਹਾਸ \'ਤੇ ਪਹੁੰਚ ਕਰਨ ਦਿਓ"</string>
+ <string name="bluetooth_profile_pbap" msgid="2103406516858653017">"ਸੰਪਰਕਾਂ ਅਤੇ ਕਾਲ ਇਤਿਹਾਸ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦਿਓ"</string>
<string name="bluetooth_profile_pbap_summary" msgid="402819589201138227">"ਜਾਣਕਾਰੀ ਦੀ ਵਰਤੋਂ ਕਾਲ ਘੋਸ਼ਣਾਵਾਂ ਅਤੇ ਹੋਰ ਚੀਜ਼ਾਂ ਲਈ ਕੀਤੀ ਜਾਵੇਗੀ"</string>
<string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਸਾਂਝਾਕਰਨ"</string>
<string name="bluetooth_profile_map" msgid="8907204701162107271">"ਲਿਖਤ ਸੁਨੇਹੇ"</string>
diff --git a/packages/SettingsLib/res/values-pl/arrays.xml b/packages/SettingsLib/res/values-pl/arrays.xml
index a9892b3688c8..59791c0e70b6 100644
--- a/packages/SettingsLib/res/values-pl/arrays.xml
+++ b/packages/SettingsLib/res/values-pl/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Tylko wyświetlanie na urządzeniu (domyślnie)"</item>
- <item msgid="9161645858025071955">"Wyświetlacz zewnętrzny"</item>
- <item msgid="114384731934682483">"Na podstawie zaznaczenia"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Pokaż cień tylko na wyświetlaczu urządzenia"</item>
- <item msgid="7795034287069726554">"Pokaż urządzenie na pojedynczym wyświetlaczu zewnętrznym"</item>
- <item msgid="5280431949814340475">"Pokaż urządzenie na ostatnim aktywnym wyświetlaczu"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 9fc2765ba59c..9f6eb4c6a7c7 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Szybkie ładowanie"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Kontrolowane przez administratora"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Obowiązują ustawienia z ograniczonym dostępem"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Niedostępne w trakcie połączeń"</string>
<string name="disabled" msgid="8017887509554714950">"Wyłączona"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Dozwolone"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Niedozwolone"</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/arrays.xml b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
index 35aa3b0834c3..2e61272269a0 100644
--- a/packages/SettingsLib/res/values-pt-rBR/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Somente a tela do dispositivo (padrão)"</item>
<item msgid="9161645858025071955">"Tela externa"</item>
- <item msgid="114384731934682483">"Com base no foco"</item>
+ <item msgid="23651860565814477">"Toque mais recente na barra de status"</item>
+ <item msgid="7521112827893653392">"Com base no foco"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Mostrar sombra apenas na tela do dispositivo"</item>
- <item msgid="7795034287069726554">"Mostrar o dispositivo em uma única tela externa"</item>
- <item msgid="5280431949814340475">"Mostrar o dispositivo na última tela focada"</item>
+ <item msgid="1955398604822147783">"Mostrar sombra em uma única tela externa"</item>
+ <item msgid="391477482416751568">"Mostrar sombra na tela que teve a última interação na barra de status"</item>
+ <item msgid="1746820128097981528">"Mostrar sombra na última tela focada"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index 1e45965df421..72f25be8e66f 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -123,13 +123,13 @@
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Ativo (apenas mídia), apenas esquerdo"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Ativo (apenas mídia), somente direito"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Ativo (apenas mídia), esquerdo e direito"</string>
- <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Áudio da mídia"</string>
+ <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Áudio de mídia"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Chamadas telefônicas"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferência de arquivo"</string>
<string name="bluetooth_profile_hid" msgid="2969922922664315866">"Dispositivo de entrada"</string>
<string name="bluetooth_profile_pan" msgid="1006235139308318188">"Acesso à Internet"</string>
<string name="bluetooth_profile_pbap" msgid="2103406516858653017">"Permitir acesso a contatos e ao histórico de ligações"</string>
- <string name="bluetooth_profile_pbap_summary" msgid="402819589201138227">"As informações serão usadas para fazer o anúncio de ligações e mais"</string>
+ <string name="bluetooth_profile_pbap_summary" msgid="402819589201138227">"As informações serão usadas para avisar sobre ligações e mais"</string>
<string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Compartilhamento de conexão à Internet"</string>
<string name="bluetooth_profile_map" msgid="8907204701162107271">"Mensagens de texto"</string>
<string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acesso ao chip"</string>
@@ -515,7 +515,7 @@
<string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Carregando sem fio"</string>
<string name="battery_info_status_charging_dock" msgid="8573274094093364791">"Carregando"</string>
<string name="battery_info_status_discharging" msgid="6962689305413556485">"Não está carregando"</string>
- <string name="battery_info_status_not_charging" msgid="1103084691314264664">"Conectado, mas não está carregando"</string>
+ <string name="battery_info_status_not_charging" msgid="1103084691314264664">"Dispositivo conectado, mas não está carregando"</string>
<string name="battery_info_status_full" msgid="1339002294876531312">"Carregada"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Carga completa"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Carregamento suspenso"</string>
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Carregamento rápido"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlada pelo admin"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlada pelas configurações restritas"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Indisponível durante ligações"</string>
<string name="disabled" msgid="8017887509554714950">"Desativado"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Permitido"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Não permitido"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/arrays.xml b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
index 2829f20722f7..64fad64ff9c4 100644
--- a/packages/SettingsLib/res/values-pt-rPT/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Apenas no ecrã do dispositivo (predefinição)"</item>
<item msgid="9161645858025071955">"Ecrã externo"</item>
- <item msgid="114384731934682483">"Com base no foco"</item>
+ <item msgid="23651860565814477">"Toque mais recente na barra de estado"</item>
+ <item msgid="7521112827893653392">"Com base no foco"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Mostrar a sombra apenas no ecrã do dispositivo"</item>
- <item msgid="7795034287069726554">"Mostrar o dispositivo num único ecrã externo"</item>
- <item msgid="5280431949814340475">"Apresente o dispositivo no último ecrã focado"</item>
+ <item msgid="1955398604822147783">"Mostrar a sombra num único ecrã externo"</item>
+ <item msgid="391477482416751568">"Mostrar a sombra no ecrã em que ocorreu a última interação com a barra de estado"</item>
+ <item msgid="1746820128097981528">"Mostrar a sombra no último ecrã focado"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-pt/arrays.xml b/packages/SettingsLib/res/values-pt/arrays.xml
index 35aa3b0834c3..2e61272269a0 100644
--- a/packages/SettingsLib/res/values-pt/arrays.xml
+++ b/packages/SettingsLib/res/values-pt/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Somente a tela do dispositivo (padrão)"</item>
<item msgid="9161645858025071955">"Tela externa"</item>
- <item msgid="114384731934682483">"Com base no foco"</item>
+ <item msgid="23651860565814477">"Toque mais recente na barra de status"</item>
+ <item msgid="7521112827893653392">"Com base no foco"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Mostrar sombra apenas na tela do dispositivo"</item>
- <item msgid="7795034287069726554">"Mostrar o dispositivo em uma única tela externa"</item>
- <item msgid="5280431949814340475">"Mostrar o dispositivo na última tela focada"</item>
+ <item msgid="1955398604822147783">"Mostrar sombra em uma única tela externa"</item>
+ <item msgid="391477482416751568">"Mostrar sombra na tela que teve a última interação na barra de status"</item>
+ <item msgid="1746820128097981528">"Mostrar sombra na última tela focada"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 1e45965df421..72f25be8e66f 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -123,13 +123,13 @@
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Ativo (apenas mídia), apenas esquerdo"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Ativo (apenas mídia), somente direito"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Ativo (apenas mídia), esquerdo e direito"</string>
- <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Áudio da mídia"</string>
+ <string name="bluetooth_profile_a2dp" msgid="4632426382762851724">"Áudio de mídia"</string>
<string name="bluetooth_profile_headset" msgid="5395952236133499331">"Chamadas telefônicas"</string>
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Transferência de arquivo"</string>
<string name="bluetooth_profile_hid" msgid="2969922922664315866">"Dispositivo de entrada"</string>
<string name="bluetooth_profile_pan" msgid="1006235139308318188">"Acesso à Internet"</string>
<string name="bluetooth_profile_pbap" msgid="2103406516858653017">"Permitir acesso a contatos e ao histórico de ligações"</string>
- <string name="bluetooth_profile_pbap_summary" msgid="402819589201138227">"As informações serão usadas para fazer o anúncio de ligações e mais"</string>
+ <string name="bluetooth_profile_pbap_summary" msgid="402819589201138227">"As informações serão usadas para avisar sobre ligações e mais"</string>
<string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Compartilhamento de conexão à Internet"</string>
<string name="bluetooth_profile_map" msgid="8907204701162107271">"Mensagens de texto"</string>
<string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acesso ao chip"</string>
@@ -515,7 +515,7 @@
<string name="battery_info_status_charging_wireless" msgid="8924722966861282197">"Carregando sem fio"</string>
<string name="battery_info_status_charging_dock" msgid="8573274094093364791">"Carregando"</string>
<string name="battery_info_status_discharging" msgid="6962689305413556485">"Não está carregando"</string>
- <string name="battery_info_status_not_charging" msgid="1103084691314264664">"Conectado, mas não está carregando"</string>
+ <string name="battery_info_status_not_charging" msgid="1103084691314264664">"Dispositivo conectado, mas não está carregando"</string>
<string name="battery_info_status_full" msgid="1339002294876531312">"Carregada"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Carga completa"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Carregamento suspenso"</string>
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Carregamento rápido"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlada pelo admin"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlada pelas configurações restritas"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Indisponível durante ligações"</string>
<string name="disabled" msgid="8017887509554714950">"Desativado"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Permitido"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Não permitido"</string>
diff --git a/packages/SettingsLib/res/values-ro/arrays.xml b/packages/SettingsLib/res/values-ro/arrays.xml
index dba734c588aa..8bfeb70d0fe4 100644
--- a/packages/SettingsLib/res/values-ro/arrays.xml
+++ b/packages/SettingsLib/res/values-ro/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Numai pe ecranul dispozitivului (prestabilit)"</item>
- <item msgid="9161645858025071955">"Ecran extern"</item>
- <item msgid="114384731934682483">"În funcție de focalizare"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Afișează umbra doar pe ecranul dispozitivului"</item>
- <item msgid="7795034287069726554">"Afișează dispozitivul pe un singur ecran extern"</item>
- <item msgid="5280431949814340475">"Afișează dispozitivul pe ultimul ecran focalizat"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index af09734842c1..26fdce813a04 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Încărcare rapidă"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlată de administrator"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlată de setarea restricționată"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Indisponibil în timpul apelurilor"</string>
<string name="disabled" msgid="8017887509554714950">"Dezactivată"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Permise"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Nepermise"</string>
diff --git a/packages/SettingsLib/res/values-ru/arrays.xml b/packages/SettingsLib/res/values-ru/arrays.xml
index f0782eb04b7e..52b2549dd60e 100644
--- a/packages/SettingsLib/res/values-ru/arrays.xml
+++ b/packages/SettingsLib/res/values-ru/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Только экран устройства (по умолчанию)"</item>
- <item msgid="9161645858025071955">"Внешний дисплей"</item>
- <item msgid="114384731934682483">"Активный дисплей"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Показывать тень только на экране устройства"</item>
- <item msgid="7795034287069726554">"Показывать устройство на одном внешнем дисплее"</item>
- <item msgid="5280431949814340475">"Показывать устройство на последнем активном дисплее"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-si/arrays.xml b/packages/SettingsLib/res/values-si/arrays.xml
index 855bbc9842a8..66f1ba757a68 100644
--- a/packages/SettingsLib/res/values-si/arrays.xml
+++ b/packages/SettingsLib/res/values-si/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"උපාංග සංදර්ශකය පමණි (පෙරනිමි)"</item>
- <item msgid="9161645858025071955">"බාහිර සංදර්ශකය"</item>
- <item msgid="114384731934682483">"නාභිගත කිරීම-පාදක"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"උපාංග සංදර්ශකයේ පමණක් සෙවන පෙන්වන්න"</item>
- <item msgid="7795034287069726554">"උපාංගය තනි බාහිර සංදර්ශකයක පෙන්වන්න"</item>
- <item msgid="5280431949814340475">"අවසන් වරට නාභිගත කළ සංදර්ශකයේ උපාංගය පෙන්වන්න"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index 1b02d28e8685..94e1ed429de6 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"වේගවත් ආරෝපණය"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"පරිපාලක විසින් පාලනය කරන ලදී"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"සීමා කළ සැකසීම මගින් පාලනය වේ"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"ඇමතුම් අතරතුර නොපවතී"</string>
<string name="disabled" msgid="8017887509554714950">"අබල කර ඇත"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"ඉඩ දුන්"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"ඉඩ නොදෙන"</string>
diff --git a/packages/SettingsLib/res/values-sk/arrays.xml b/packages/SettingsLib/res/values-sk/arrays.xml
index 3473e282e59c..f8363cdfc447 100644
--- a/packages/SettingsLib/res/values-sk/arrays.xml
+++ b/packages/SettingsLib/res/values-sk/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Iba obrazovka zariadenia (predvolené)"</item>
- <item msgid="9161645858025071955">"Externá obrazovka"</item>
- <item msgid="114384731934682483">"Na základe označenia"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Zobraziť panel iba na obrazovke zariadenia"</item>
- <item msgid="7795034287069726554">"Zobraziť zariadenie na jednej externej obrazovke"</item>
- <item msgid="5280431949814340475">"Zobraziť zariadenie na poslednej označenej obrazovke"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-sl/arrays.xml b/packages/SettingsLib/res/values-sl/arrays.xml
index c3bf79c34ea6..2a128efde3bc 100644
--- a/packages/SettingsLib/res/values-sl/arrays.xml
+++ b/packages/SettingsLib/res/values-sl/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Prikaz samo v napravi (privzeto)"</item>
- <item msgid="9161645858025071955">"Zunanji zaslon"</item>
- <item msgid="114384731934682483">"Na podlagi fokusa"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Prikaz podokna samo na zaslonu naprave"</item>
- <item msgid="7795034287069726554">"Prikaz naprave na enem zunanjem zaslonu"</item>
- <item msgid="5280431949814340475">"Prikaz naprave na zadnjem zaslonu s fokusom"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-sq/arrays.xml b/packages/SettingsLib/res/values-sq/arrays.xml
index 7136bf75eaee..3b0994a7d93f 100644
--- a/packages/SettingsLib/res/values-sq/arrays.xml
+++ b/packages/SettingsLib/res/values-sq/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Vetëm ekrani i pajisjes (parazgjedhja)"</item>
- <item msgid="9161645858025071955">"Ekrani i jashtëm"</item>
- <item msgid="114384731934682483">"Bazuar te fokusi"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Shfaq hijen vetëm në ekranin e pajisjes"</item>
- <item msgid="7795034287069726554">"Shfaq pajisjen në një ekran të vetëm të jashtëm"</item>
- <item msgid="5280431949814340475">"Shfaq pajisjen në ekranin e fundit të fokusuar"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index e98046ea9a8b..2d2c02b31df3 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Karikim i shpejtë"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Kontrolluar nga administratori"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Kontrollohet nga \"Cilësimet e kufizuara\""</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Nuk ofrohet gjatë telefonatave"</string>
<string name="disabled" msgid="8017887509554714950">"Çaktivizuar"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Lejohet"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Nuk lejohet"</string>
diff --git a/packages/SettingsLib/res/values-sr/arrays.xml b/packages/SettingsLib/res/values-sr/arrays.xml
index 84d0a7e055c1..fd23a64b98f6 100644
--- a/packages/SettingsLib/res/values-sr/arrays.xml
+++ b/packages/SettingsLib/res/values-sr/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Приказ само на уређају (подразумевано)"</item>
<item msgid="9161645858025071955">"Спољни екран"</item>
- <item msgid="114384731934682483">"Засновано на фокусу"</item>
+ <item msgid="23651860565814477">"Додир на најновијој статусној траци"</item>
+ <item msgid="7521112827893653392">"Засновано на фокусу"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Прикажи сенку само на екрану уређаја"</item>
- <item msgid="7795034287069726554">"Прикажи уређај на једном спољном екрану"</item>
- <item msgid="5280431949814340475">"Прикажи уређај на последњем екрану у фокусу"</item>
+ <item msgid="1955398604822147783">"Прикажи сенку на једном спољном екрану"</item>
+ <item msgid="391477482416751568">"Прикажи сенку на екрану са којим је статусна трака последњи пут била у интеракцији"</item>
+ <item msgid="1746820128097981528">"Прикажи сенку на последњем екрану у фокусу"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-sv/arrays.xml b/packages/SettingsLib/res/values-sv/arrays.xml
index b5ae7ddf7a31..8a77fdd11742 100644
--- a/packages/SettingsLib/res/values-sv/arrays.xml
+++ b/packages/SettingsLib/res/values-sv/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Endast enhetens skärm (standard)"</item>
<item msgid="9161645858025071955">"Extern skärm"</item>
- <item msgid="114384731934682483">"Fokusbaserad"</item>
+ <item msgid="23651860565814477">"Senaste interaktion med statusfältet"</item>
+ <item msgid="7521112827893653392">"Fokusbaserad"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Visa endast skugga på enhetens skärm"</item>
- <item msgid="7795034287069726554">"Visa skugga på en enda extern skärm"</item>
- <item msgid="5280431949814340475">"Visa enheten på skärmen som sist var i fokus"</item>
+ <item msgid="1955398604822147783">"Visa skugga på en enda extern skärm"</item>
+ <item msgid="391477482416751568">"Visa skugga på skärmen där statusfältet senast interagerades med"</item>
+ <item msgid="1746820128097981528">"Visa skugga på skärmen som sist var i fokus"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index 4f8ea1e03219..e0897cb87e54 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Snabbladdning"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Strys av administratören"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Styrs av spärrad inställning"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Ej tillgänglig under samtal"</string>
<string name="disabled" msgid="8017887509554714950">"Inaktiverad"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Tillåts"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Tillåts inte"</string>
diff --git a/packages/SettingsLib/res/values-sw/arrays.xml b/packages/SettingsLib/res/values-sw/arrays.xml
index 145b56c354cf..652c3588d694 100644
--- a/packages/SettingsLib/res/values-sw/arrays.xml
+++ b/packages/SettingsLib/res/values-sw/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Kwenye skrini ya kifaa pekee (Chaguomsingi)"</item>
- <item msgid="9161645858025071955">"Skrini ya nje"</item>
- <item msgid="114384731934682483">"Inayoangaziwa"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Onyesha kiwango kwenye skrini ya kifaa pekee"</item>
- <item msgid="7795034287069726554">"Onyesha kifaa kwenye skrini moja ya nje"</item>
- <item msgid="5280431949814340475">"Onyesha kifaa kwenye skrini ya mwisho iliyoangaziwa"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 2b175f5939a6..f12597f640a5 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Inachaji kwa kasi"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Imedhibitiwa na msimamizi"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Imedhibitiwa na Mpangilio wenye Mipaka"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Haipatikani wakati unaongea kwa simu"</string>
<string name="disabled" msgid="8017887509554714950">"Imezimwa"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Imeruhusiwa"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Hairuhusiwi"</string>
diff --git a/packages/SettingsLib/res/values-ta/arrays.xml b/packages/SettingsLib/res/values-ta/arrays.xml
index 68812894386b..503cd8f97046 100644
--- a/packages/SettingsLib/res/values-ta/arrays.xml
+++ b/packages/SettingsLib/res/values-ta/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"சாதனக் காட்சி மட்டும் (இயல்பு)"</item>
- <item msgid="9161645858025071955">"வெளிப்புறக் காட்சி"</item>
- <item msgid="114384731934682483">"ஃபோகஸ் அடிப்படையிலானது"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"சாதனக் காட்சியில் மட்டும் ஷேடைக் காட்டும்"</item>
- <item msgid="7795034287069726554">"ஒற்றை வெளிப்புறக் காட்சியில் சாதனத்தைக் காட்டும்"</item>
- <item msgid="5280431949814340475">"கடைசியாக ஃபோகஸ் செய்யப்பட்ட காட்சியில் சாதனத்தைக் காட்டும்"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index dd5a5a4b7d8f..1bd2c3419860 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"விரைவு சார்ஜிங்"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"நிர்வாகி கட்டுப்படுத்துகிறார்"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"வரையறுக்கப்பட்ட அமைப்பால் கட்டுப்படுத்தப்படுகிறது"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"அழைப்புகளின்போது பயன்படுத்த முடியாது"</string>
<string name="disabled" msgid="8017887509554714950">"முடக்கப்பட்டது"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"அனுமதிக்கப்பட்டது"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"அனுமதிக்கப்படவில்லை"</string>
diff --git a/packages/SettingsLib/res/values-te/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml
index 8dea6ed2d013..f72e4cd9f9fe 100644
--- a/packages/SettingsLib/res/values-te/arrays.xml
+++ b/packages/SettingsLib/res/values-te/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"పరికర డిస్‌ప్లేలో మాత్రమే (ఆటోమేటిక్ సెట్టింగ్)"</item>
- <item msgid="9161645858025071955">"ఎక్స్‌టర్నల్ డిస్‌ప్లే"</item>
- <item msgid="114384731934682483">"ఫోకస్-ఆధారిత"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"షేడ్‌ను పరికర డిస్‌ప్లేలో మాత్రమే చూపండి"</item>
- <item msgid="7795034287069726554">"పరికరాన్ని ఒక ఎక్స్‌టర్నల్ డిస్‌ప్లేలో మాత్రమే చూపండి"</item>
- <item msgid="5280431949814340475">"పరికరాన్ని చివరగా యాక్టివ్‌గా ఉన్న స్క్రీన్‌లో చూపండి"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index 12e45c2b824d..010344f2e103 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ఫాస్ట్ ఛార్జింగ్"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"నిర్వాహకుని ద్వారా నియంత్రించబడింది"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"పరిమితం చేసిన సెట్టింగ్ ద్వారా నియంత్రించబడుతుంది"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"కాల్స్ సమయంలో అందుబాటులో ఉండదు"</string>
<string name="disabled" msgid="8017887509554714950">"డిజేబుల్ చేయబడింది"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"అనుమతించినవి"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"అనుమతించబడలేదు"</string>
diff --git a/packages/SettingsLib/res/values-th/arrays.xml b/packages/SettingsLib/res/values-th/arrays.xml
index 11cb2ec4e161..adb274d26f9c 100644
--- a/packages/SettingsLib/res/values-th/arrays.xml
+++ b/packages/SettingsLib/res/values-th/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"จอแสดงผลของอุปกรณ์เท่านั้น (ค่าเริ่มต้น)"</item>
- <item msgid="9161645858025071955">"จอแสดงผลภายนอก"</item>
- <item msgid="114384731934682483">"Focus-based"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"แสดงเฉดสีในจอแสดงผลของอุปกรณ์เท่านั้น"</item>
- <item msgid="7795034287069726554">"แสดงอุปกรณ์ในจอแสดงผลภายนอกเครื่องเดียว"</item>
- <item msgid="5280431949814340475">"แสดงอุปกรณ์ในจอแสดงผลที่โฟกัสล่าสุด"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-tl/arrays.xml b/packages/SettingsLib/res/values-tl/arrays.xml
index eae269cc4972..0153375a5c2c 100644
--- a/packages/SettingsLib/res/values-tl/arrays.xml
+++ b/packages/SettingsLib/res/values-tl/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Display ng device lang (Default)"</item>
- <item msgid="9161645858025071955">"External na display"</item>
- <item msgid="114384731934682483">"Focus-based"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Ipakita ang shade sa display ng device lang"</item>
- <item msgid="7795034287069726554">"Ipakita ang device sa isang external na display"</item>
- <item msgid="5280431949814340475">"Ipakita ang device sa huling na-focus na display"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-tr/arrays.xml b/packages/SettingsLib/res/values-tr/arrays.xml
index fdb9d217e611..6fbbb129b56b 100644
--- a/packages/SettingsLib/res/values-tr/arrays.xml
+++ b/packages/SettingsLib/res/values-tr/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Yalnızca cihaz ekranı (Varsayılan)"</item>
- <item msgid="9161645858025071955">"Harici ekran"</item>
- <item msgid="114384731934682483">"Odaklanmaya dayalı"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Gölgeyi yalnızca cihaz ekranında göster"</item>
- <item msgid="7795034287069726554">"Cihazı tek bir harici ekranda göster"</item>
- <item msgid="5280431949814340475">"Cihazı son odaklanılan ekranda göster"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index 8dcc48f556fd..c99322324a66 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Hızlı şarj"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Yönetici tarafından denetleniyor"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Kısıtlanmış ayar tarafından kontrol ediliyor"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Telefon aramaları sırasında kullanılamaz"</string>
<string name="disabled" msgid="8017887509554714950">"Devre dışı"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"İzin verildi"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"İzin verilmiyor"</string>
diff --git a/packages/SettingsLib/res/values-uk/arrays.xml b/packages/SettingsLib/res/values-uk/arrays.xml
index 29494716bbb9..a371c9c5d0f5 100644
--- a/packages/SettingsLib/res/values-uk/arrays.xml
+++ b/packages/SettingsLib/res/values-uk/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Лише екран пристрою (за умовчанням)"</item>
- <item msgid="9161645858025071955">"Зовнішній дисплей"</item>
- <item msgid="114384731934682483">"На основі фокусування"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Показувати панель лише на екрані пристрою"</item>
- <item msgid="7795034287069726554">"Показувати панель на одному зовнішньому дисплеї"</item>
- <item msgid="5280431949814340475">"Показувати панель на останньому активному дисплеї"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 259cf6c3a0f0..fd1ade641d95 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Швидке заряджання"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Керується адміністратором"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Керується налаштуваннями з обмеженнями"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Недоступно під час викликів"</string>
<string name="disabled" msgid="8017887509554714950">"Вимкнено"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Дозволено"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Заборонено"</string>
diff --git a/packages/SettingsLib/res/values-ur/arrays.xml b/packages/SettingsLib/res/values-ur/arrays.xml
index a9eadb83bbfa..5ce9fb41dcb7 100644
--- a/packages/SettingsLib/res/values-ur/arrays.xml
+++ b/packages/SettingsLib/res/values-ur/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"صرف آلے کا ڈسپلے (ڈیفالٹ)"</item>
<item msgid="9161645858025071955">"بیرونی ڈسپلے"</item>
- <item msgid="114384731934682483">"فوکس پر مبنی"</item>
+ <item msgid="23651860565814477">"تازہ ترین اسٹیٹس بار ٹچ"</item>
+ <item msgid="7521112827893653392">"فوکس پر مبنی"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"صرف آلے کے ڈسپلے پر شیڈ دکھائیں"</item>
- <item msgid="7795034287069726554">"آلے کو واحد بیرونی ڈسپلے پر دکھائیں"</item>
- <item msgid="5280431949814340475">"آلے کو آخری فوکس کردہ ڈسپلے پر دکھائیں"</item>
+ <item msgid="1955398604822147783">"واحد بیرونی ڈسپلے پر شیڈ دکھائیں"</item>
+ <item msgid="391477482416751568">"اس ڈسپلے پر شیڈ دکھائیں جس کے اسٹیٹس بار کے ساتھ آخری بار تعامل کیا گیا تھا"</item>
+ <item msgid="1746820128097981528">"شیڈ کو آخری فوکس کردہ ڈسپلے پر دکھائیں"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index 425a0ede22a3..13ffeb125972 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"فاسٹ چارجنگ"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"کنٹرول کردہ بذریعہ منتظم"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"محدود کردہ ترتیب کے زیر انتظام ہے"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"کالز کے دوران غیر دستیاب"</string>
<string name="disabled" msgid="8017887509554714950">"غیر فعال"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"اجازت ہے"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"اجازت نہیں ہے"</string>
diff --git a/packages/SettingsLib/res/values-uz/arrays.xml b/packages/SettingsLib/res/values-uz/arrays.xml
index f3cae4192180..cf1a0965935f 100644
--- a/packages/SettingsLib/res/values-uz/arrays.xml
+++ b/packages/SettingsLib/res/values-uz/arrays.xml
@@ -291,16 +291,19 @@
<string-array name="shade_display_awareness_entries">
<item msgid="816770658383209617">"Faqat qurilma displeyi (birlamchi)"</item>
<item msgid="9161645858025071955">"Tashqi displey"</item>
- <item msgid="114384731934682483">"Fokusga asoslangan"</item>
+ <item msgid="23651860565814477">"Holat qatori bilan oxirgi oʻzaro aloqa"</item>
+ <item msgid="7521112827893653392">"Fokusga asoslangan"</item>
</string-array>
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"Faqat qurilma displeyida soyani koʻrsatish"</item>
- <item msgid="7795034287069726554">"Qurilmani alohida tashqi displeyda koʻrsatish"</item>
- <item msgid="5280431949814340475">"Qurilmani oxirgi fokuslangan displeyda koʻrsatish"</item>
+ <item msgid="1955398604822147783">"Soyani alohida tashqi displeyda koʻrsatish"</item>
+ <item msgid="391477482416751568">"Oxirgi marta holat qatori qaysi soya bilan munosabatga kirishganini koʻrsatish"</item>
+ <item msgid="1746820128097981528">"Soyani oxirgi fokuslangan displeyda koʻrsatish"</item>
</string-array>
<string-array name="shade_display_awareness_values">
<item msgid="3055776101992426514">"default_display"</item>
<item msgid="774789415968826925">"any_external_display"</item>
<item msgid="7880769915418638436">"status_bar_latest_touch"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-vi/arrays.xml b/packages/SettingsLib/res/values-vi/arrays.xml
index e0ebc9faab9c..8e4cf53cfc39 100644
--- a/packages/SettingsLib/res/values-vi/arrays.xml
+++ b/packages/SettingsLib/res/values-vi/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Chỉ hiển thị trên thiết bị (Mặc định)"</item>
- <item msgid="9161645858025071955">"Màn hình ngoài"</item>
- <item msgid="114384731934682483">"Theo tiêu điểm"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Chỉ hiện ngăn thông báo trên màn hình thiết bị"</item>
- <item msgid="7795034287069726554">"Hiện thiết bị trên một màn hình ngoài"</item>
- <item msgid="5280431949814340475">"Hiện thiết bị trên màn hình được lấy tiêu điểm gần đây nhất"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index 59d4b4d587ce..2763c017398b 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Đang sạc nhanh"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Do quản trị viên kiểm soát"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Do chế độ Cài đặt hạn chế kiểm soát"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Không dùng được khi có cuộc gọi"</string>
<string name="disabled" msgid="8017887509554714950">"Đã tắt"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Được phép"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Không được phép"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/arrays.xml b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
index c2147c7aba70..5c82865d3d52 100644
--- a/packages/SettingsLib/res/values-zh-rCN/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"仅设备显示屏(默认)"</item>
- <item msgid="9161645858025071955">"外接显示屏"</item>
- <item msgid="114384731934682483">"基于焦点"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"仅在设备显示屏上显示通知栏"</item>
- <item msgid="7795034287069726554">"在单个外接显示屏上显示设备"</item>
- <item msgid="5280431949814340475">"在最近一次获得焦点的显示屏上显示设备"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index 08e931b80e1b..934c525661e5 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"正在快速充电"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"由管理员控制"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"由受限设置控制"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"通话期间无法使用"</string>
<string name="disabled" msgid="8017887509554714950">"已停用"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"允许"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"不允许"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/arrays.xml b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
index 37d7b2930d3e..2e060595b299 100644
--- a/packages/SettingsLib/res/values-zh-rHK/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"只限裝置顯示屏 (預設)"</item>
- <item msgid="9161645858025071955">"外部顯示屏"</item>
- <item msgid="114384731934682483">"突顯"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"只在裝置顯示屏上顯示陰影"</item>
- <item msgid="7795034287069726554">"在單獨外部顯示屏上顯示裝置"</item>
- <item msgid="5280431949814340475">"在上一次突顯的顯示屏上顯示裝置"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index 8cc65c86cc3e..037f531b7c02 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -506,7 +506,7 @@
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> ‑ 充電中"</string>
<string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - 在 <xliff:g id="TIME">%3$s</xliff:g>前充滿電"</string>
<string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> • 在 <xliff:g id="TIME">%2$s</xliff:g>前充滿電"</string>
- <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"在 <xliff:g id="TIME">%1$s</xliff:g>前充滿電"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"在<xliff:g id="TIME">%1$s</xliff:g> 前充滿電"</string>
<string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> 前充滿電"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"未知"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"充電中"</string>
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"快速充電"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"已由管理員停用"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"由「受限設定」控制"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"通話時無法使用"</string>
<string name="disabled" msgid="8017887509554714950">"已停用"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"允許"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"不允許"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/arrays.xml b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
index c4d820c50549..5b48ad40c63c 100644
--- a/packages/SettingsLib/res/values-zh-rTW/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"僅裝置螢幕 (預設)"</item>
- <item msgid="9161645858025071955">"外接螢幕"</item>
- <item msgid="114384731934682483">"使用中的螢幕"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"只在裝置螢幕顯示通知欄"</item>
- <item msgid="7795034287069726554">"在單一外接螢幕顯示通知欄"</item>
- <item msgid="5280431949814340475">"在最新使用的螢幕顯示通知欄"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"預設螢幕"</item>
- <item msgid="774789415968826925">"任何外接螢幕"</item>
- <item msgid="7880769915418638436">"最新觸控狀態列"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index d639e71f1a06..0ef65e6151d1 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"快速充電"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"已由管理員停用"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"由受限制的設定控管"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"通話時無法使用"</string>
<string name="disabled" msgid="8017887509554714950">"已停用"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"允許"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"不允許"</string>
diff --git a/packages/SettingsLib/res/values-zu/arrays.xml b/packages/SettingsLib/res/values-zu/arrays.xml
index 27ca40c4a66b..1a61f8b3d326 100644
--- a/packages/SettingsLib/res/values-zu/arrays.xml
+++ b/packages/SettingsLib/res/values-zu/arrays.xml
@@ -288,19 +288,10 @@
<item msgid="3753634915787796632">"2"</item>
<item msgid="4779928470672877922">"3"</item>
</string-array>
- <string-array name="shade_display_awareness_entries">
- <item msgid="816770658383209617">"Ukuboniswa kwedivayisi kuphela (Okuzenzakalelayo)"</item>
- <item msgid="9161645858025071955">"Ukubonisa Kwangaphandle"</item>
- <item msgid="114384731934682483">"Kusekelwe ekugxileni"</item>
- </string-array>
- <string-array name="shade_display_awareness_summaries">
- <item msgid="2964753205732912921">"Bonisa umthunzi esibonisini sedivayisi kuphela"</item>
- <item msgid="7795034287069726554">"Bonisa idivayisi esibonisini sangaphandle esisodwa"</item>
- <item msgid="5280431949814340475">"Bonisa idivayisi esibonisini sokugcina esigxilile"</item>
- </string-array>
- <string-array name="shade_display_awareness_values">
- <item msgid="3055776101992426514">"default_display"</item>
- <item msgid="774789415968826925">"any_external_display"</item>
- <item msgid="7880769915418638436">"status_bar_latest_touch"</item>
- </string-array>
+ <!-- no translation found for shade_display_awareness_entries:2 (23651860565814477) -->
+ <!-- no translation found for shade_display_awareness_entries:3 (7521112827893653392) -->
+ <!-- no translation found for shade_display_awareness_summaries:1 (1955398604822147783) -->
+ <!-- no translation found for shade_display_awareness_summaries:2 (391477482416751568) -->
+ <!-- no translation found for shade_display_awareness_summaries:3 (1746820128097981528) -->
+ <!-- no translation found for shade_display_awareness_values:3 (4313165186636015195) -->
</resources>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index 4fd2c8d1e843..de626284ff87 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -523,8 +523,7 @@
<string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Ishaja ngokushesha"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Kulawulwa umqondisi"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Kulawulwe Isethingi Elikhawulelwe"</string>
- <!-- no translation found for disabled_in_phone_call_text (6568931334337318320) -->
- <skip />
+ <string name="disabled_in_phone_call_text" msgid="6568931334337318320">"Akutholakali ngesikhathi samakholi"</string>
<string name="disabled" msgid="8017887509554714950">"Akusebenzi"</string>
<string name="external_source_trusted" msgid="1146522036773132905">"Kuvumelekile"</string>
<string name="external_source_untrusted" msgid="5037891688911672227">"Akuvumelekile"</string>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index a3e42f1d1e51..4b0400fb3441 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -236,6 +236,14 @@
<string name="bluetooth_active_media_only_battery_level">Active (media only). <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected and active for media only, showing remote device status and battery level for untethered headset. [CHAR LIMIT=NONE] -->
<string name="bluetooth_active_media_only_battery_level_untethered">Active (media only). L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g>, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery.</string>
+ <!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device status and battery level for temporary bond device. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_guest_battery_level">Guest device. <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery.</string>
+ <!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device status and battery level for temporary bond untethered headset. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_guest_battery_level_untethered">Guest device. L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g>, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery.</string>
+ <!-- Connected devices settings. Message when Bluetooth is connected and active for media only, showing remote device status and battery level for temporary bond device. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_guest_media_only_battery_level">Guest device (media only). <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery.</string>
+ <!-- Connected devices settings. Message when Bluetooth is connected and active for media only, showing remote device status and battery level for temporary bond untethered headset. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_guest_media_only_battery_level_untethered">Guest device (media only). L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g>, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level, supports audio sharing. [CHAR LIMIT=NONE] -->
<string name="bluetooth_battery_level_lea_support">Connected (supports audio sharing). <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level for untethered headset, supports audio sharing. [CHAR LIMIT=NONE] -->
@@ -246,10 +254,22 @@
<string name="bluetooth_battery_level_untethered_right_lea_support">Connected (supports audio sharing). Right: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing no battery information, supports audio sharing. [CHAR LIMIT=NONE] -->
<string name="bluetooth_no_battery_level_lea_support">Connected (supports audio sharing)</string>
+ <!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level, supports audio sharing. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_guest_battery_level_lea_support">Guest device (supports audio sharing). <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery.</string>
+ <!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level for untethered headset, supports audio sharing. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_guest_battery_level_untethered_lea_support">Guest device (supports audio sharing). L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g>, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery.</string>
+ <!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing no battery information, supports audio sharing. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_guest_no_battery_level_lea_support">Guest device (supports audio sharing)</string>
<!-- Connected devices settings. Message when Bluetooth is connected and active for media only but no battery information, showing remote device status. [CHAR LIMIT=NONE] -->
<string name="bluetooth_active_media_only_no_battery_level">Active (media only)</string>
+ <!-- Connected devices settings. Message when Bluetooth is connected but not in use with no battery information, showing remote device status for temporary bond device. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_guest_no_battery_level">Guest device</string>
+ <!-- Connected devices settings. Message when Bluetooth is connected and active for media only but no battery information, showing remote device status for temporary bond device. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_guest_media_only_no_battery_level">Guest device (media only)</string>
<!-- Connected devices settings. Message shown when bluetooth device is disconnected but is a known, previously connected device, supports audio sharing [CHAR LIMIT=NONE] -->
<string name="bluetooth_saved_device_lea_support">Supports audio sharing</string>
+ <!-- Connected devices settings. Message shown when temporary bond bluetooth device is disconnected but is a known, previously connected device, supports audio sharing [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_guest_saved_device_lea_support">Guest device. Supports audio sharing</string>
<!-- Connected device settings. Message when the left-side hearing aid device is active for media only. [CHAR LIMIT=NONE] -->
<string name="bluetooth_hearing_aid_media_only_left_active">Active (media only), left only</string>
@@ -1103,6 +1123,13 @@
<!-- Developer settings: text for the WebView provider selection toast shown if an invalid provider was chosen (i.e. the setting list was stale). [CHAR LIMIT=NONE] -->
<string name="select_webview_provider_toast_text">This choice is no longer valid. Try again.</string>
+ <!-- [CHAR LIMIT=50] Label for button to launch current WebView provider's DevTools (developer tools) UI -->
+ <string name="webview_launch_devtools_title">WebView DevTools</string>
+ <!-- [CHAR LIMIT=50] Error toast shown to user when no (current) WebView package is found (when trying to launch DevTools) -->
+ <string name="webview_launch_devtools_no_package">WebView package not found.</string>
+ <!-- [CHAR LIMIT=50] Error toast shown to user when DevTools (developer tools) activity could not be launched (despite there being a WebView package) -->
+ <string name="webview_launch_devtools_no_activity">Could not launch DevTools.</string>
+
<!-- Name of feature to change color setting for the display [CHAR LIMIT=60] -->
<string name="picture_color_mode">Picture color mode</string>
diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
index 27a3cf1198b2..60fe15662980 100644
--- a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
+++ b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java
@@ -124,6 +124,7 @@ public class SecureSettings {
Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT,
Settings.Secure.DOZE_ENABLED,
Settings.Secure.DOZE_ALWAYS_ON,
+ Settings.Secure.DOZE_ALWAYS_ON_WALLPAPER_ENABLED,
Settings.Secure.DOZE_PICK_UP_GESTURE,
Settings.Secure.DOZE_DOUBLE_TAP_GESTURE,
Settings.Secure.DOZE_TAP_SCREEN_GESTURE,
diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
index 9591b4354678..3d941e82727f 100644
--- a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
+++ b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java
@@ -184,6 +184,7 @@ public class SecureSettingsValidators {
VALIDATORS.put(Secure.STATUS_BAR_SHOW_VIBRATE_ICON, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.DOZE_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.DOZE_ALWAYS_ON, BOOLEAN_VALIDATOR);
+ VALIDATORS.put(Secure.DOZE_ALWAYS_ON_WALLPAPER_ENABLED, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.DOZE_PICK_UP_GESTURE, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.DOZE_DOUBLE_TAP_GESTURE, BOOLEAN_VALIDATOR);
VALIDATORS.put(Secure.DOZE_TAP_SCREEN_GESTURE, BOOLEAN_VALIDATOR);
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index 4f5203136bbc..ed11e12c32ff 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -209,7 +209,7 @@ public class SettingsHelper {
// Get datatype for B&R metrics logging.
String datatype = "";
- if (Flags.enableMetricsSettingsBackupAgents()) {
+ if (areAgentMetricsEnabled()) {
datatype = SettingsBackupRestoreKeys.getKeyFromUri(destination);
}
@@ -299,7 +299,7 @@ public class SettingsHelper {
contentValues.put(Settings.NameValueTable.NAME, name);
contentValues.put(Settings.NameValueTable.VALUE, value);
cr.insert(destination, contentValues);
- if (Flags.enableMetricsSettingsBackupAgents()) {
+ if (areAgentMetricsEnabled()) {
mBackupRestoreEventLogger.logItemsRestored(datatype, /* count= */ 1);
}
} catch (Exception e) {
@@ -308,7 +308,7 @@ public class SettingsHelper {
sendBroadcastSystemUI = false;
sendBroadcastAccessibility = false;
Log.e(TAG, "Failed to restore setting name: " + name + " + value: " + value, e);
- if (Flags.enableMetricsSettingsBackupAgents()) {
+ if (areAgentMetricsEnabled()) {
mBackupRestoreEventLogger.logItemsRestoreFailed(
datatype, /* count= */ 1, ERROR_FAILED_TO_RESTORE_SETTING);
}
@@ -785,12 +785,12 @@ public class SettingsHelper {
am.updatePersistentConfigurationWithAttribution(config, mContext.getOpPackageName(),
mContext.getAttributionTag());
- if (Flags.enableMetricsSettingsBackupAgents() && mBackupRestoreEventLogger != null) {
+ if (areAgentMetricsEnabled()) {
mBackupRestoreEventLogger
.logItemsRestored(SettingsBackupRestoreKeys.KEY_LOCALE, localeList.size());
}
} catch (RemoteException e) {
- if (Flags.enableMetricsSettingsBackupAgents() && mBackupRestoreEventLogger != null) {
+ if (areAgentMetricsEnabled()) {
mBackupRestoreEventLogger
.logItemsRestoreFailed(
SettingsBackupRestoreKeys.KEY_LOCALE,
@@ -817,4 +817,8 @@ public class SettingsHelper {
void setBackupRestoreEventLogger(BackupRestoreEventLogger backupRestoreEventLogger) {
mBackupRestoreEventLogger = backupRestoreEventLogger;
}
+
+ private boolean areAgentMetricsEnabled() {
+ return Flags.enableMetricsSettingsBackupAgents() && mBackupRestoreEventLogger != null;
+ }
}
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/WritableNamespacePrefixes.java b/packages/SettingsProvider/src/com/android/providers/settings/WritableNamespacePrefixes.java
index 74fd828f97ea..274fd3593918 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/WritableNamespacePrefixes.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/WritableNamespacePrefixes.java
@@ -124,6 +124,7 @@ final class WritableNamespacePrefixes {
"privacy",
"private_compute_services",
"profcollect_native_boot",
+ "profiling_testing",
"remote_auth",
"remote_key_provisioning_native",
"rollback",
diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java
index 62c03ddc42b9..cb3f54e3c6be 100644
--- a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java
@@ -20,6 +20,8 @@ import static com.google.common.truth.Truth.assertThat;
import static junit.framework.Assert.assertEquals;
+import android.app.backup.BackupAnnotations.OperationType;
+import android.app.backup.BackupRestoreEventLogger;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
@@ -60,11 +62,14 @@ public class SettingsHelperRestoreTest {
private static final float FLOAT_TOLERANCE = 0.01f;
private ContentResolver mContentResolver;
private SettingsHelper mSettingsHelper;
+ private BackupRestoreEventLogger mBackupRestoreEventLogger;
@Before
public void setUp() {
mContentResolver = mInterceptingContext.getContentResolver();
mSettingsHelper = new SettingsHelper(mInterceptingContext);
+ mBackupRestoreEventLogger = new BackupRestoreEventLogger(OperationType.RESTORE);
+ mSettingsHelper.setBackupRestoreEventLogger(mBackupRestoreEventLogger);
}
@After
diff --git a/packages/Shell/res/values-cs/strings.xml b/packages/Shell/res/values-cs/strings.xml
index ab031a4e0f28..d2931d9bc231 100644
--- a/packages/Shell/res/values-cs/strings.xml
+++ b/packages/Shell/res/values-cs/strings.xml
@@ -22,7 +22,7 @@
<string name="bugreport_finished_title" msgid="4429132808670114081">"Zpráva o chybě <xliff:g id="ID">#%d</xliff:g> byla vytvořena"</string>
<string name="bugreport_updating_title" msgid="4423539949559634214">"Přidávání podrobností do zprávy o chybě"</string>
<string name="bugreport_updating_wait" msgid="3322151947853929470">"Čekejte prosím…"</string>
- <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"Na telefonu se brzy zobrazí zpráva o chybě."</string>
+ <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"Zpráva o chybě se brzy zobrazí na telefonu."</string>
<string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"Zprávu o chybě můžete sdílet klepnutím"</string>
<string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"Zprávu o chybě můžete sdílet klepnutím"</string>
<string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"Přejetím můžete zprávu o chybě sdílet bez snímku obrazovky, nebo vyčkejte, než se snímek připraví"</string>
diff --git a/packages/Shell/res/values-pl/strings.xml b/packages/Shell/res/values-pl/strings.xml
index 1ff4bbdcd9c0..0a605654845d 100644
--- a/packages/Shell/res/values-pl/strings.xml
+++ b/packages/Shell/res/values-pl/strings.xml
@@ -22,7 +22,7 @@
<string name="bugreport_finished_title" msgid="4429132808670114081">"Raport o błędzie <xliff:g id="ID">#%d</xliff:g> został zapisany"</string>
<string name="bugreport_updating_title" msgid="4423539949559634214">"Dodaję szczegóły do raportu o błędzie"</string>
<string name="bugreport_updating_wait" msgid="3322151947853929470">"Czekaj..."</string>
- <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"Raport o błędzie będzie pojawiał się na telefonie przez chwilę"</string>
+ <string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"Raport o błędzie za chwilę pojawi się na telefonie"</string>
<string name="bugreport_finished_text" product="tv" msgid="5758325479058638893">"Wybierz, by udostępnić raport o błędzie"</string>
<string name="bugreport_finished_text" product="default" msgid="8353769438382138847">"Kliknij, by udostępnić raport o błędzie"</string>
<string name="bugreport_finished_pending_screenshot_text" product="tv" msgid="2343263822812016950">"Wybierz, by udostępnić raport o błędzie bez zrzutu ekranu, lub poczekaj, aż zostanie on wygenerowany"</string>
diff --git a/packages/Shell/res/values-sl/strings.xml b/packages/Shell/res/values-sl/strings.xml
index 76702d6ccba2..ab6d51a5511a 100644
--- a/packages/Shell/res/values-sl/strings.xml
+++ b/packages/Shell/res/values-sl/strings.xml
@@ -19,7 +19,7 @@
<string name="app_label" msgid="3701846017049540910">"Lupina"</string>
<string name="bugreport_notification_channel" msgid="2574150205913861141">"Poročila o napakah"</string>
<string name="bugreport_in_progress_title" msgid="4311705936714972757">"Poročilo o napaki <xliff:g id="ID">#%d</xliff:g> je v izdelavi"</string>
- <string name="bugreport_finished_title" msgid="4429132808670114081">"Poročilo o napaki <xliff:g id="ID">#%d</xliff:g> zajeto"</string>
+ <string name="bugreport_finished_title" msgid="4429132808670114081">"Poročilo o napaki <xliff:g id="ID">#%d</xliff:g> je zajeto"</string>
<string name="bugreport_updating_title" msgid="4423539949559634214">"Dodajanje podrobnosti v poročilo o napakah"</string>
<string name="bugreport_updating_wait" msgid="3322151947853929470">"Počakajte ..."</string>
<string name="bugreport_finished_text" product="watch" msgid="1223616207145252689">"Poročilo o napakah bo kmalu prikazano v telefonu"</string>
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index 19806e7cdf64..49cdec11e104 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -60,6 +60,7 @@ filegroup {
"src-release/**/*.kt",
"src-release/**/*.java",
],
+ path: "src-release",
visibility: ["//visibility:private"],
}
@@ -69,6 +70,7 @@ filegroup {
"src-debug/**/*.kt",
"src-debug/**/*.java",
],
+ path: "src-debug",
visibility: ["//visibility:private"],
}
@@ -315,11 +317,11 @@ filegroup {
"tests/src/**/systemui/temporarydisplay/TemporaryViewDisplayControllerTest.kt",
"tests/src/**/systemui/statusbar/policy/WalletControllerImplTest.kt",
"tests/src/**/keyguard/ClockEventControllerTest.kt",
- "tests/src/**/systemui/bluetooth/qsdialog/BluetoothStateInteractorTest.kt",
"tests/src/**/systemui/bluetooth/qsdialog/BluetoothDetailsContentManagerTest.kt",
+ "tests/src/**/systemui/bluetooth/qsdialog/BluetoothDetailsContentViewModelTest.kt",
+ "tests/src/**/systemui/bluetooth/qsdialog/BluetoothStateInteractorTest.kt",
"tests/src/**/systemui/bluetooth/qsdialog/BluetoothTileDialogDelegateTest.kt",
"tests/src/**/systemui/bluetooth/qsdialog/BluetoothTileDialogRepositoryTest.kt",
- "tests/src/**/systemui/bluetooth/qsdialog/BluetoothTileDialogViewModelTest.kt",
"tests/src/**/systemui/bluetooth/qsdialog/DeviceItemFactoryTest.kt",
"tests/src/**/systemui/bluetooth/qsdialog/DeviceItemInteractorTest.kt",
"tests/src/**/systemui/broadcast/UserBroadcastDispatcherTest.kt",
@@ -430,12 +432,21 @@ android_library {
],
}
-android_library {
- name: "SystemUI-core",
+filegroup {
+ name: "SystemUI-core-srcs",
srcs: [
"src/**/*.kt",
"src/**/*.java",
"src/**/I*.aidl",
+ ],
+ path: "src",
+ visibility: ["//visibility:private"],
+}
+
+android_library {
+ name: "SystemUI-core",
+ srcs: [
+ ":SystemUI-core-srcs",
":ReleaseJavaFiles",
"compose/features/src/**/*.kt",
"compose/facade/enabled/src/**/*.kt",
@@ -731,9 +742,7 @@ android_library {
srcs: [
"tests/src/**/*.kt",
"tests/src/**/*.java",
- "src/**/*.kt",
- "src/**/*.java",
- "src/**/I*.aidl",
+ ":SystemUI-core-srcs",
":ReleaseJavaFiles",
":SystemUI-tests-multivalent",
":SystemUI-tests-utils",
@@ -841,7 +850,7 @@ java_library {
"androidx.test.uiautomator_uiautomator",
"androidx.core_core-animation-testing",
"androidx.test.ext.junit",
- "inline-mockito-robolectric-prebuilt",
+ "inline-mockito5-robolectric-prebuilt",
"mockito-kotlin-nodeps",
"platform-parametric-runner-lib",
"SystemUICustomizationTestUtils",
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig
index 910f71276376..2c3a5eacf940 100644
--- a/packages/SystemUI/aconfig/systemui.aconfig
+++ b/packages/SystemUI/aconfig/systemui.aconfig
@@ -957,16 +957,6 @@ flag {
}
flag {
- name: "dedicated_notif_inflation_thread"
- namespace: "systemui"
- description: "Create a separate background thread for inflating notifications"
- bug: "308967184"
- metadata {
- purpose: PURPOSE_BUGFIX
- }
-}
-
-flag {
name: "bind_keyguard_media_visibility"
namespace: "systemui"
description: "Binds Keyguard Media Controller Visibility to MediaContainerView"
@@ -1258,13 +1248,6 @@ flag {
}
flag {
- name: "glanceable_hub_back_action"
- namespace: "systemui"
- description: "Support back action from glanceable hub"
- bug: "382771533"
-}
-
-flag {
name: "dream_overlay_updated_font"
namespace: "systemui"
description: "Flag to enable updated font settings for dream overlay"
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/Icon.kt b/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/Icon.kt
index 8b0c00535262..09db2d653326 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/Icon.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/Icon.kt
@@ -19,10 +19,12 @@ package com.android.systemui.common.ui.compose
import androidx.compose.material3.Icon
import androidx.compose.material3.LocalContentColor
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.res.painterResource
-import com.android.compose.ui.graphics.painter.rememberDrawablePainter
+import androidx.core.graphics.drawable.toBitmap
import com.android.systemui.common.shared.model.Icon
/**
@@ -35,7 +37,12 @@ fun Icon(icon: Icon, modifier: Modifier = Modifier, tint: Color = LocalContentCo
val contentDescription = icon.contentDescription?.load()
when (icon) {
is Icon.Loaded -> {
- Icon(rememberDrawablePainter(icon.drawable), contentDescription, modifier, tint)
+ Icon(
+ remember(icon.drawable) { icon.drawable.toBitmap().asImageBitmap() },
+ contentDescription,
+ modifier,
+ tint,
+ )
}
is Icon.Resource -> Icon(painterResource(icon.res), contentDescription, modifier, tint)
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/DefaultBlueprint.kt b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/DefaultBlueprint.kt
index 6e25c8a5bc42..d2fff06ad746 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/DefaultBlueprint.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/DefaultBlueprint.kt
@@ -31,6 +31,7 @@ import androidx.compose.ui.layout.Layout
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.IntRect
+import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.android.compose.animation.scene.ContentScope
import com.android.compose.modifiers.padding
@@ -117,12 +118,12 @@ constructor(
)
Notifications(
areNotificationsVisible = areNotificationsVisible,
- isShadeLayoutWide = true,
burnInParams = null,
modifier =
Modifier.fillMaxWidth(0.5f)
.fillMaxHeight()
- .align(alignment = Alignment.TopEnd),
+ .align(alignment = Alignment.TopEnd)
+ .padding(top = 12.dp),
)
}
}
@@ -150,7 +151,6 @@ constructor(
}
Notifications(
areNotificationsVisible = areNotificationsVisible,
- isShadeLayoutWide = false,
burnInParams = null,
)
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt
index f51049a10569..d903c3d16fdb 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt
@@ -18,12 +18,13 @@ package com.android.systemui.keyguard.ui.composable.section
import android.view.ViewGroup
import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.animation.EnterTransition
+import androidx.compose.animation.ExitTransition
import androidx.compose.animation.core.MutableTransitionState
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
@@ -31,11 +32,9 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.dimensionResource
-import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.android.compose.animation.scene.ContentScope
-import com.android.compose.modifiers.thenIf
import com.android.systemui.common.ui.ConfigurationState
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.ui.composable.blueprint.rememberBurnIn
@@ -118,12 +117,19 @@ constructor(
val isVisible by
keyguardRootViewModel.isAodPromotedNotifVisible.collectAsStateWithLifecycle()
+ val transitionState = remember { MutableTransitionState(isVisible.value) }
+ LaunchedEffect(key1 = isVisible, key2 = transitionState.isIdle) {
+ transitionState.targetState = isVisible.value
+ if (isVisible.isAnimating && transitionState.isIdle) {
+ isVisible.stopAnimating()
+ }
+ }
val burnIn = rememberBurnIn(keyguardClockViewModel)
AnimatedVisibility(
- visible = isVisible,
- enter = fadeIn(),
- exit = fadeOut(),
+ visibleState = transitionState,
+ enter = if (isVisible.isAnimating) fadeIn() else EnterTransition.None,
+ exit = if (isVisible.isAnimating) fadeOut() else ExitTransition.None,
modifier = modifier.burnInAware(aodBurnInViewModel, burnIn.parameters),
) {
AODPromotedNotification(aodPromotedNotificationViewModelFactory)
@@ -186,7 +192,6 @@ constructor(
@Composable
fun ContentScope.Notifications(
areNotificationsVisible: Boolean,
- isShadeLayoutWide: Boolean,
burnInParams: BurnInParameters?,
modifier: Modifier = Modifier,
) {
@@ -198,16 +203,13 @@ constructor(
stackScrollView = stackScrollView.get(),
viewModel = rememberViewModel("Notifications") { viewModelFactory.create() },
modifier =
- modifier
- .fillMaxWidth()
- .thenIf(isShadeLayoutWide) { Modifier.padding(top = 12.dp) }
- .let {
- if (burnInParams == null) {
- it
- } else {
- it.burnInAware(viewModel = aodBurnInViewModel, params = burnInParams)
- }
- },
+ modifier.fillMaxWidth().let {
+ if (burnInParams == null) {
+ it
+ } else {
+ it.burnInAware(viewModel = aodBurnInViewModel, params = burnInParams)
+ }
+ },
)
}
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneTransitionLayoutDataSource.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneTransitionLayoutDataSource.kt
index 6d906bd4aa66..8aa5bc7b7c6f 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneTransitionLayoutDataSource.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneTransitionLayoutDataSource.kt
@@ -68,7 +68,7 @@ class SceneTransitionLayoutDataSource(
}
override fun snapToScene(toScene: SceneKey) {
- state.snapToScene(scene = toScene)
+ state.snapTo(scene = toScene)
}
override fun showOverlay(overlay: OverlayKey, transitionKey: TransitionKey?) {
@@ -97,16 +97,10 @@ class SceneTransitionLayoutDataSource(
}
override fun instantlyShowOverlay(overlay: OverlayKey) {
- state.snapToScene(
- scene = state.transitionState.currentScene,
- currentOverlays = state.currentOverlays + overlay,
- )
+ state.snapTo(overlays = state.currentOverlays + overlay)
}
override fun instantlyHideOverlay(overlay: OverlayKey) {
- state.snapToScene(
- scene = state.transitionState.currentScene,
- currentOverlays = state.currentOverlays - overlay,
- )
+ state.snapTo(overlays = state.currentOverlays - overlay)
}
}
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutState.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutState.kt
index 5b275a556f93..56e8c458ad67 100644
--- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutState.kt
+++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutState.kt
@@ -138,10 +138,13 @@ sealed interface MutableSceneTransitionLayoutState : SceneTransitionLayoutState
transitionKey: TransitionKey? = null,
): Pair<TransitionState.Transition, Job>?
- /** Immediately snap to the given [scene]. */
- fun snapToScene(
- scene: SceneKey,
- currentOverlays: Set<OverlayKey> = transitionState.currentOverlays,
+ /**
+ * Immediately snap to the given [scene] and/or [overlays], instantly interrupting all ongoing
+ * transitions and settling to a [TransitionState.Idle] state.
+ */
+ fun snapTo(
+ scene: SceneKey = transitionState.currentScene,
+ overlays: Set<OverlayKey> = transitionState.currentOverlays,
)
/**
@@ -554,7 +557,7 @@ internal class MutableSceneTransitionLayoutStateImpl(
this.transitionStates = listOf(idle)
}
- override fun snapToScene(scene: SceneKey, currentOverlays: Set<OverlayKey>) {
+ override fun snapTo(scene: SceneKey, overlays: Set<OverlayKey>) {
checkThread()
// Force finish all transitions.
@@ -562,7 +565,7 @@ internal class MutableSceneTransitionLayoutStateImpl(
check(transitionStates.size == 1)
check(currentTransitions.isEmpty())
- transitionStates = listOf(TransitionState.Idle(scene, currentOverlays))
+ transitionStates = listOf(TransitionState.Idle(scene, overlays))
}
override fun showOverlay(
diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt
index fa10f66ab5a2..8fce7087dba6 100644
--- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt
+++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt
@@ -247,7 +247,7 @@ class ElementTest {
rule.runOnUiThread {
// We snap to scene B so that the transition A => B is removed from the list of
// transitions.
- state.snapToScene(SceneB)
+ state.snapTo(SceneB)
state.setTargetScene(SceneC, coroutineScope)
}
}
diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutStateTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutStateTest.kt
index 26f3c259dca9..eea6595cdf5e 100644
--- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutStateTest.kt
+++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutStateTest.kt
@@ -255,7 +255,7 @@ class SceneTransitionLayoutStateTest {
assertThat(transition).hasCurrentScene(SceneB)
// Snap to C.
- state.snapToScene(SceneC)
+ state.snapTo(SceneC)
assertThat(state.transitionState).isIdle()
assertThat(state.transitionState).hasCurrentScene(SceneC)
}
@@ -272,7 +272,7 @@ class SceneTransitionLayoutStateTest {
assertThat(transition).hasToScene(SceneB)
// Snap to C.
- state.snapToScene(SceneC)
+ state.snapTo(SceneC)
assertThat(state.transitionState).isIdle()
assertThat(state.transitionState).hasCurrentScene(SceneC)
}
@@ -375,7 +375,7 @@ class SceneTransitionLayoutStateTest {
val job = transition.coroutineScope.launch { awaitCancellation() }
// Force snap state to SceneB to force finish all current transitions.
- state.snapToScene(SceneB)
+ state.snapTo(SceneB)
assertThat(state.transitionState).isIdle()
assertThat(job.isCancelled).isTrue()
}
@@ -411,7 +411,7 @@ class SceneTransitionLayoutStateTest {
val state = MutableSceneTransitionLayoutStateForTests(SceneA)
state.startTransitionImmediately(this, transition(SceneA, SceneB))
state.startTransitionImmediately(this, transition(SceneB, SceneC))
- state.snapToScene(SceneC)
+ state.snapTo(SceneC)
assertThat(state.transitionState).isIdle()
assertThat(state.transitionState).hasCurrentScene(SceneC)
diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt
index c877d99a77d3..5cbc98fa4c9d 100644
--- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt
+++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt
@@ -457,9 +457,9 @@ class SceneTransitionLayoutTest {
}
// Snap to B then C to compose these scenes at least once.
- rule.runOnUiThread { state.snapToScene(SceneB) }
+ rule.runOnUiThread { state.snapTo(SceneB) }
rule.waitForIdle()
- rule.runOnUiThread { state.snapToScene(SceneC) }
+ rule.runOnUiThread { state.snapTo(SceneC) }
rule.waitForIdle()
assertThat(keyInA).isEqualTo(SceneA)
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/SimpleDigitalClockTextView.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/SimpleDigitalClockTextView.kt
index b9a5f1f18210..92fa6b5be1ed 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/SimpleDigitalClockTextView.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/SimpleDigitalClockTextView.kt
@@ -197,43 +197,12 @@ open class SimpleDigitalClockTextView(
)
}
- var expectedWidth: Int
- var expectedHeight: Int
-
- if (MeasureSpec.getMode(heightMeasureSpec) == EXACTLY) {
- // For view which has fixed height, e.g. small clock,
- // we should always return the size required from parent view
- expectedHeight = heightMeasureSpec
- } else {
- expectedHeight =
- MeasureSpec.makeMeasureSpec(
- if (isSingleDigit()) {
- maxSingleDigitHeight
- } else {
- textBounds.height() + 2 * lockScreenPaint.strokeWidth.toInt()
- },
- MeasureSpec.getMode(measuredHeightAndState),
- )
- }
-
- if (MeasureSpec.getMode(widthMeasureSpec) == EXACTLY) {
- expectedWidth = widthMeasureSpec
- } else {
- expectedWidth =
- MeasureSpec.makeMeasureSpec(
- if (isSingleDigit()) {
- maxSingleDigitWidth
- } else {
- max(
- textBounds.width() + 2 * lockScreenPaint.strokeWidth.toInt(),
- MeasureSpec.getSize(measuredWidthAndState),
- )
- },
- MeasureSpec.getMode(measuredWidthAndState),
- )
- }
-
- setMeasuredDimension(expectedWidth, expectedHeight)
+ setInterpolatedViewBounds(
+ getInterpolatedTextBounds(),
+ widthMeasureSpec,
+ heightMeasureSpec,
+ force = true,
+ )
}
override fun onDraw(canvas: Canvas) {
@@ -359,7 +328,7 @@ open class SimpleDigitalClockTextView(
id == R.id.MINUTE_SECOND_DIGIT
}
- private fun updateInterpolatedTextBounds(): Rect {
+ private fun getInterpolatedTextBounds(): Rect {
val interpolatedTextBounds = Rect()
if (textAnimator.animator.animatedFraction != 1.0f && textAnimator.animator.isRunning) {
interpolatedTextBounds.left =
@@ -399,7 +368,44 @@ open class SimpleDigitalClockTextView(
return interpolatedTextBounds
}
- private fun updateXtranslation(inPoint: Point, interpolatedTextBounds: Rect): Point {
+ private fun setInterpolatedViewBounds(
+ interpBounds: Rect,
+ widthMeasureSpec: Int = measuredWidthAndState,
+ heightMeasureSpec: Int = measuredHeightAndState,
+ force: Boolean = false,
+ ) {
+ val heightMode = MeasureSpec.getMode(heightMeasureSpec)
+ val widthMode = MeasureSpec.getMode(widthMeasureSpec)
+
+ val heightSpec =
+ if (heightMode == EXACTLY) {
+ heightMeasureSpec
+ } else {
+ MeasureSpec.makeMeasureSpec(
+ if (isSingleDigit()) maxSingleDigitHeight
+ else interpBounds.height() + 2 * lockScreenPaint.strokeWidth.toInt(),
+ heightMode,
+ )
+ }
+
+ val widthSpec =
+ if (widthMode == EXACTLY) {
+ widthMeasureSpec
+ } else {
+ MeasureSpec.makeMeasureSpec(
+ if (isSingleDigit()) maxSingleDigitWidth
+ else interpBounds.width() + 2 * lockScreenPaint.strokeWidth.toInt(),
+ widthMode,
+ )
+ }
+
+ if (force || widthSpec != measuredWidthAndState || heightSpec != measuredHeightAndState) {
+ setMeasuredDimension(widthSpec, heightSpec)
+ parent?.requestLayout()
+ }
+ }
+
+ private fun updateXTranslation(inPoint: Point, interpolatedTextBounds: Rect): Point {
when (horizontalAlignment) {
HorizontalAlignment.LEFT -> {
inPoint.x = lockScreenPaint.strokeWidth.toInt() - interpolatedTextBounds.left
@@ -422,7 +428,9 @@ open class SimpleDigitalClockTextView(
// translation of reference point of text
// used for translation when calling textInterpolator
private fun getLocalTranslation(): Point {
- val interpolatedTextBounds = updateInterpolatedTextBounds()
+ val interpolatedTextBounds = getInterpolatedTextBounds()
+ setInterpolatedViewBounds(interpolatedTextBounds)
+
val localTranslation = Point(0, 0)
val correctedBaseline = if (baseline != -1) baseline else baselineFromMeasure
// get the change from current baseline to expected baseline
@@ -452,7 +460,7 @@ open class SimpleDigitalClockTextView(
}
}
- return updateXtranslation(localTranslation, interpolatedTextBounds)
+ return updateXTranslation(localTranslation, interpolatedTextBounds)
}
fun applyStyles(textStyle: FontTextStyle, aodStyle: FontTextStyle?) {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/back/domain/interactor/BackActionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/back/domain/interactor/BackActionInteractorTest.kt
index 4d238ac3798d..8c5fad3906ed 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/back/domain/interactor/BackActionInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/back/domain/interactor/BackActionInteractorTest.kt
@@ -16,7 +16,6 @@
package com.android.systemui.back.domain.interactor
-import android.platform.test.annotations.EnableFlags
import android.platform.test.annotations.RequiresFlagsDisabled
import android.platform.test.annotations.RequiresFlagsEnabled
import android.platform.test.flag.junit.DeviceFlagsValueProvider
@@ -32,7 +31,6 @@ import androidx.test.filters.SmallTest
import com.android.internal.statusbar.IStatusBarService
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
-import com.android.systemui.communal.domain.interactor.CommunalBackActionInteractor
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testScope
@@ -93,7 +91,6 @@ class BackActionInteractorTest : SysuiTestCase() {
@Mock private lateinit var onBackInvokedDispatcher: WindowOnBackInvokedDispatcher
@Mock private lateinit var iStatusBarService: IStatusBarService
@Mock private lateinit var headsUpManager: HeadsUpManager
- @Mock private lateinit var communalBackActionInteractor: CommunalBackActionInteractor
private val keyguardRepository = FakeKeyguardRepository()
private val windowRootViewVisibilityInteractor: WindowRootViewVisibilityInteractor by lazy {
@@ -118,7 +115,6 @@ class BackActionInteractorTest : SysuiTestCase() {
windowRootViewVisibilityInteractor,
shadeBackActionInteractor,
qsController,
- communalBackActionInteractor,
)
}
@@ -297,19 +293,6 @@ class BackActionInteractorTest : SysuiTestCase() {
verify(shadeBackActionInteractor).onBackProgressed(0.4f)
}
- @Test
- @EnableFlags(Flags.FLAG_GLANCEABLE_HUB_BACK_ACTION)
- fun onBackAction_communalCanBeDismissed_communalBackActionInteractorCalled() {
- backActionInteractor.start()
- windowRootViewVisibilityInteractor.setIsLockscreenOrShadeVisible(true)
- powerInteractor.setAwakeForTest()
- val callback = getBackInvokedCallback()
- whenever(communalBackActionInteractor.canBeDismissed()).thenReturn(true)
- callback.onBackInvoked()
-
- verify(communalBackActionInteractor).onBackPressed()
- }
-
private fun getBackInvokedCallback(): OnBackInvokedCallback {
testScope.runCurrent()
val captor = argumentCaptor<OnBackInvokedCallback>()
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalBackActionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalBackActionInteractorTest.kt
deleted file mode 100644
index 70f38f7bc94e..000000000000
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalBackActionInteractorTest.kt
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES 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.communal.domain.interactor
-
-import android.platform.test.annotations.EnableFlags
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.android.systemui.Flags.FLAG_COMMUNAL_HUB
-import com.android.systemui.SysuiTestCase
-import com.android.systemui.communal.data.repository.communalSceneRepository
-import com.android.systemui.communal.shared.model.CommunalScenes
-import com.android.systemui.kosmos.Kosmos
-import com.android.systemui.kosmos.Kosmos.Fixture
-import com.android.systemui.kosmos.runCurrent
-import com.android.systemui.kosmos.runTest
-import com.android.systemui.testKosmos
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@SmallTest
-@RunWith(AndroidJUnit4::class)
-class CommunalBackActionInteractorTest : SysuiTestCase() {
- private val kosmos = testKosmos()
-
- private var Kosmos.underTest by Fixture { communalBackActionInteractor }
-
- @Test
- @EnableFlags(FLAG_COMMUNAL_HUB)
- fun communalShowing_canBeDismissed() =
- kosmos.runTest {
- setCommunalAvailable(true)
- assertThat(underTest.canBeDismissed()).isEqualTo(false)
- communalInteractor.changeScene(CommunalScenes.Communal, "test")
- runCurrent()
- assertThat(underTest.canBeDismissed()).isEqualTo(true)
- }
-
- @Test
- @EnableFlags(FLAG_COMMUNAL_HUB)
- fun onBackPressed_invokesSceneChange() =
- kosmos.runTest {
- underTest.onBackPressed()
- runCurrent()
- assertThat(communalSceneRepository.currentScene.value).isEqualTo(CommunalScenes.Blank)
- }
-}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalTutorialInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalTutorialInteractorTest.kt
index feee9e3d62d2..6eace1b50ea7 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalTutorialInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalTutorialInteractorTest.kt
@@ -128,6 +128,19 @@ class CommunalTutorialInteractorTest : SysuiTestCase() {
}
@Test
+ fun tutorialState_startedAndCommunalSceneShowing_stateWillNotUpdate() =
+ testScope.runTest {
+ val tutorialSettingState by
+ collectLastValue(communalTutorialRepository.tutorialSettingState)
+
+ communalTutorialRepository.setTutorialSettingState(HUB_MODE_TUTORIAL_STARTED)
+
+ goToCommunal()
+
+ assertThat(tutorialSettingState).isEqualTo(HUB_MODE_TUTORIAL_STARTED)
+ }
+
+ @Test
fun tutorialState_completedAndCommunalSceneShowing_stateWillNotUpdate() =
testScope.runTest {
val tutorialSettingState by
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalTransitionViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalTransitionViewModelTest.kt
index da25bcac6c95..1a3606e413cc 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalTransitionViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalTransitionViewModelTest.kt
@@ -35,7 +35,6 @@ import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent
@@ -45,7 +44,6 @@ import org.junit.runner.RunWith
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters
-@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(ParameterizedAndroidJunit4::class)
class CommunalTransitionViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
@@ -67,7 +65,7 @@ class CommunalTransitionViewModelTest(flags: FlagsParameterization) : SysuiTestC
private val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository
private val communalSceneRepository = kosmos.fakeCommunalSceneRepository
- private val sceneInteractor by lazy { kosmos.sceneInteractor }
+ private val sceneInteractor = kosmos.sceneInteractor
private val underTest: CommunalTransitionViewModel by lazy {
kosmos.communalTransitionViewModel
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryFaceAuthInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryFaceAuthInteractorTest.kt
index e36d2455d316..329627af8ec2 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryFaceAuthInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryFaceAuthInteractorTest.kt
@@ -61,7 +61,6 @@ import com.android.systemui.user.data.model.SelectionStatus
import com.android.systemui.user.data.repository.fakeUserRepository
import com.android.systemui.util.mockito.eq
import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.TestScope
@@ -74,7 +73,6 @@ import org.mockito.ArgumentMatchers.anyInt
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
-@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(AndroidJUnit4::class)
class DeviceEntryFaceAuthInteractorTest : SysuiTestCase() {
@@ -82,26 +80,21 @@ class DeviceEntryFaceAuthInteractorTest : SysuiTestCase() {
private val testScope: TestScope = kosmos.testScope
private lateinit var underTest: SystemUIDeviceEntryFaceAuthInteractor
-
private val bouncerRepository = kosmos.fakeKeyguardBouncerRepository
private val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository
+ private val keyguardTransitionInteractor = kosmos.keyguardTransitionInteractor
private val faceAuthRepository = kosmos.fakeDeviceEntryFaceAuthRepository
private val fakeUserRepository = kosmos.fakeUserRepository
private val facePropertyRepository = kosmos.facePropertyRepository
+ private val fakeDeviceEntryFingerprintAuthInteractor =
+ kosmos.deviceEntryFingerprintAuthInteractor
+ private val powerInteractor = kosmos.powerInteractor
private val fakeBiometricSettingsRepository = kosmos.fakeBiometricSettingsRepository
- private val keyguardUpdateMonitor by lazy { kosmos.keyguardUpdateMonitor }
+ private val keyguardUpdateMonitor = kosmos.keyguardUpdateMonitor
private val faceWakeUpTriggersConfig = kosmos.fakeFaceWakeUpTriggersConfig
private val trustManager = kosmos.trustManager
-
- private val keyguardTransitionInteractor by lazy { kosmos.keyguardTransitionInteractor }
- private val fakeDeviceEntryFingerprintAuthInteractor by lazy {
- kosmos.deviceEntryFingerprintAuthInteractor
- }
- private val powerInteractor by lazy { kosmos.powerInteractor }
- private val deviceEntryFaceAuthStatusInteractor by lazy {
- kosmos.deviceEntryFaceAuthStatusInteractor
- }
+ private val deviceEntryFaceAuthStatusInteractor = kosmos.deviceEntryFaceAuthStatusInteractor
@Before
fun setup() {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorTest.kt
index 2feabf8221ad..9b80ca303cd3 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorTest.kt
@@ -34,23 +34,32 @@ package com.android.systemui.keyguard.domain.interactor
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
-import androidx.test.ext.junit.runners.AndroidJUnit4
+import android.platform.test.flag.junit.FlagsParameterization
import androidx.test.filters.SmallTest
import com.android.systemui.Flags
+import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_V2
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
+import com.android.systemui.communal.data.repository.fakeCommunalSceneRepository
import com.android.systemui.communal.domain.interactor.communalInteractor
+import com.android.systemui.communal.domain.interactor.communalSceneInteractor
+import com.android.systemui.communal.domain.interactor.setCommunalV2ConfigEnabled
+import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepositorySpy
import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.util.KeyguardTransitionRepositorySpySubject.Companion.assertThat
+import com.android.systemui.kosmos.collectLastValue
+import com.android.systemui.kosmos.runCurrent
+import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
import com.android.systemui.power.data.repository.fakePowerRepository
import com.android.systemui.power.shared.model.WakeSleepReason
import com.android.systemui.power.shared.model.WakefulnessState
import com.android.systemui.testKosmos
+import com.google.common.truth.Truth
import kotlinx.coroutines.test.advanceTimeBy
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
@@ -58,10 +67,25 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.reset
+import platform.test.runner.parameterized.ParameterizedAndroidJunit4
+import platform.test.runner.parameterized.Parameters
@SmallTest
-@RunWith(AndroidJUnit4::class)
-class FromAlternateBouncerTransitionInteractorTest : SysuiTestCase() {
+@RunWith(ParameterizedAndroidJunit4::class)
+class FromAlternateBouncerTransitionInteractorTest(flags: FlagsParameterization) : SysuiTestCase() {
+
+ companion object {
+ @JvmStatic
+ @Parameters(name = "{0}")
+ fun getParams(): List<FlagsParameterization> {
+ return FlagsParameterization.allCombinationsOf(FLAG_GLANCEABLE_HUB_V2)
+ }
+ }
+
+ init {
+ mSetFlagsRule.setFlagsParameterization(flags)
+ }
+
private val kosmos =
testKosmos().apply {
this.keyguardTransitionRepository = fakeKeyguardTransitionRepositorySpy
@@ -74,6 +98,7 @@ class FromAlternateBouncerTransitionInteractorTest : SysuiTestCase() {
fun setup() {
transitionRepository = kosmos.fakeKeyguardTransitionRepositorySpy
underTest = kosmos.fromAlternateBouncerTransitionInteractor
+ kosmos.setCommunalV2ConfigEnabled(true)
underTest.start()
}
@@ -171,6 +196,39 @@ class FromAlternateBouncerTransitionInteractorTest : SysuiTestCase() {
}
@Test
+ @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
+ fun transitionToOccluded_glanceableHubShowing() =
+ kosmos.runTest {
+ val currentScene by collectLastValue(communalSceneInteractor.currentScene)
+
+ fakePowerRepository.updateWakefulness(
+ WakefulnessState.AWAKE,
+ WakeSleepReason.POWER_BUTTON,
+ WakeSleepReason.POWER_BUTTON,
+ false,
+ )
+ fakeKeyguardRepository.setKeyguardOccluded(false)
+ fakeKeyguardBouncerRepository.setAlternateVisible(true)
+ fakeCommunalSceneRepository.changeScene(CommunalScenes.Communal)
+ runCurrent()
+
+ Truth.assertThat(currentScene).isEqualTo(CommunalScenes.Communal)
+
+ transitionRepository.sendTransitionSteps(
+ from = KeyguardState.GLANCEABLE_HUB,
+ to = KeyguardState.ALTERNATE_BOUNCER,
+ testScope,
+ )
+ reset(transitionRepository)
+
+ fakeKeyguardRepository.setKeyguardOccluded(true)
+ fakeKeyguardBouncerRepository.setAlternateVisible(false)
+ testScope.advanceTimeBy(200) // advance past delay
+
+ Truth.assertThat(currentScene).isEqualTo(CommunalScenes.Blank)
+ }
+
+ @Test
@DisableFlags(Flags.FLAG_KEYGUARD_WM_STATE_REFACTOR)
fun transitionToGone_whenOpeningGlanceableHubEditMode() =
testScope.runTest {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorTest.kt
index 63bb1001c873..d9e76222e51f 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorTest.kt
@@ -17,13 +17,17 @@
package com.android.systemui.keyguard.domain.interactor
import android.platform.test.annotations.EnableFlags
-import androidx.test.ext.junit.runners.AndroidJUnit4
+import android.platform.test.flag.junit.FlagsParameterization
import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.ObservableTransitionState
+import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_V2
import com.android.systemui.Flags.FLAG_KEYGUARD_WM_STATE_REFACTOR
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
import com.android.systemui.communal.data.repository.fakeCommunalSceneRepository
+import com.android.systemui.communal.domain.interactor.communalSceneInteractor
+import com.android.systemui.communal.domain.interactor.setCommunalV2Available
+import com.android.systemui.communal.domain.interactor.setCommunalV2ConfigEnabled
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.coroutines.collectValues
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepositorySpy
@@ -33,30 +37,55 @@ import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.keyguard.util.KeyguardTransitionRepositorySpySubject.Companion.assertThat
+import com.android.systemui.kosmos.collectLastValue
+import com.android.systemui.kosmos.runCurrent
+import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
+import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest
+import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.testKosmos
-import com.android.systemui.user.domain.interactor.selectedUserInteractor
+import com.google.common.truth.Truth
import junit.framework.Assert.assertEquals
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
+import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.reset
+import platform.test.runner.parameterized.ParameterizedAndroidJunit4
+import platform.test.runner.parameterized.Parameters
@SmallTest
-@RunWith(AndroidJUnit4::class)
-class FromPrimaryBouncerTransitionInteractorTest : SysuiTestCase() {
+@RunWith(ParameterizedAndroidJunit4::class)
+class FromPrimaryBouncerTransitionInteractorTest(flags: FlagsParameterization) : SysuiTestCase() {
+
+ companion object {
+ @JvmStatic
+ @Parameters(name = "{0}")
+ fun getParams(): List<FlagsParameterization> {
+ return FlagsParameterization.allCombinationsOf(FLAG_GLANCEABLE_HUB_V2)
+ }
+ }
+
+ init {
+ mSetFlagsRule.setFlagsParameterization(flags)
+ }
+
private val kosmos =
testKosmos().apply {
this.keyguardTransitionRepository = fakeKeyguardTransitionRepositorySpy
}
val underTest = kosmos.fromPrimaryBouncerTransitionInteractor
val testScope = kosmos.testScope
- val selectedUserInteractor = kosmos.selectedUserInteractor
val transitionRepository = kosmos.fakeKeyguardTransitionRepositorySpy
val bouncerRepository = kosmos.fakeKeyguardBouncerRepository
+ @Before
+ fun setUp() {
+ kosmos.setCommunalV2ConfigEnabled(true)
+ }
+
@Test
fun testSurfaceBehindVisibility() =
testScope.runTest {
@@ -213,4 +242,33 @@ class FromPrimaryBouncerTransitionInteractorTest : SysuiTestCase() {
to = KeyguardState.OCCLUDED,
)
}
+
+ @Test
+ @EnableFlags(FLAG_GLANCEABLE_HUB_V2)
+ fun testTransitionToDozing_bouncerShowingOnTopOfGlanceableHub() =
+ kosmos.runTest {
+ underTest.start()
+ setCommunalV2Available(true)
+
+ val currentScene by collectLastValue(communalSceneInteractor.currentScene)
+ // Communal is showing.
+ fakeCommunalSceneRepository.changeScene(CommunalScenes.Communal)
+
+ Truth.assertThat(currentScene).isEqualTo(CommunalScenes.Communal)
+
+ // Bouncer is shown on top of the Glanceable Hub.
+ bouncerRepository.setPrimaryShow(true)
+ transitionRepository.sendTransitionSteps(
+ from = KeyguardState.GLANCEABLE_HUB,
+ to = KeyguardState.PRIMARY_BOUNCER,
+ testScope,
+ )
+
+ reset(transitionRepository)
+
+ powerInteractor.setAsleepForTest()
+ runCurrent()
+
+ Truth.assertThat(currentScene).isEqualTo(CommunalScenes.Blank)
+ }
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt
index fee2dfc88020..29e95cd911f8 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt
@@ -46,7 +46,6 @@ import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import junit.framework.Assert.assertEquals
-import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
@@ -54,15 +53,13 @@ import org.junit.Assert.assertThrows
import org.junit.Test
import org.junit.runner.RunWith
-@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(AndroidJUnit4::class)
class KeyguardTransitionInteractorTest : SysuiTestCase() {
val kosmos = testKosmos()
- val testScope = kosmos.testScope
+ val underTest = kosmos.keyguardTransitionInteractor
val repository = kosmos.fakeKeyguardTransitionRepository
-
- val underTest by lazy { kosmos.keyguardTransitionInteractor }
+ val testScope = kosmos.testScope
@Test
fun transitionCollectorsReceivesOnlyAppropriateEvents() =
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
index a090faba5bf7..8df70ef0fd2e 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
@@ -17,6 +17,7 @@
package com.android.systemui.keyguard.domain.interactor
import android.app.StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP
+import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.FlagsParameterization
import androidx.test.filters.SmallTest
@@ -30,7 +31,6 @@ import com.android.systemui.Flags.glanceableHubV2
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
import com.android.systemui.communal.domain.interactor.CommunalSceneTransitionInteractor
-import com.android.systemui.communal.domain.interactor.communalInteractor
import com.android.systemui.communal.domain.interactor.communalSceneInteractor
import com.android.systemui.communal.domain.interactor.communalSceneTransitionInteractor
import com.android.systemui.communal.domain.interactor.setCommunalAvailable
@@ -126,14 +126,14 @@ class KeyguardTransitionScenariosTest(flags: FlagsParameterization?) : SysuiTest
}
private val powerInteractor by lazy { kosmos.powerInteractor }
- private val communalInteractor by lazy { kosmos.communalInteractor }
private val communalSceneInteractor by lazy { kosmos.communalSceneInteractor }
companion object {
@JvmStatic
@Parameters(name = "{0}")
fun getParams(): List<FlagsParameterization> {
- return FlagsParameterization.allCombinationsOf().andSceneContainer()
+ return FlagsParameterization.allCombinationsOf(FLAG_GLANCEABLE_HUB_V2)
+ .andSceneContainer()
}
}
@@ -902,6 +902,7 @@ class KeyguardTransitionScenariosTest(flags: FlagsParameterization?) : SysuiTest
@Test
@DisableSceneContainer
+ @DisableFlags(FLAG_GLANCEABLE_HUB_V2)
fun primaryBouncerToGlanceableHubWhileDreaming() =
testScope.runTest {
// Setup - Move past initial delay with [KeyguardInteractor#isAbleToDream]
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/DozingToDreamingTransitionViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/DozingToDreamingTransitionViewModelTest.kt
new file mode 100644
index 000000000000..052dfd52887f
--- /dev/null
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/DozingToDreamingTransitionViewModelTest.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.keyguard.ui.viewmodel
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
+import com.android.systemui.keyguard.shared.model.KeyguardState
+import com.android.systemui.kosmos.collectValues
+import com.android.systemui.kosmos.runTest
+import com.android.systemui.kosmos.testScope
+import com.android.systemui.testKosmos
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class DozingToDreamingTransitionViewModelTest : SysuiTestCase() {
+ val kosmos = testKosmos()
+
+ val underTest by lazy { kosmos.dozingToDreamingTransitionViewModel }
+
+ @Test
+ fun notificationShadeAlpha() =
+ kosmos.runTest {
+ val values by collectValues(underTest.notificationAlpha)
+ assertThat(values).isEmpty()
+
+ fakeKeyguardTransitionRepository.sendTransitionSteps(
+ from = KeyguardState.DOZING,
+ to = KeyguardState.DREAMING,
+ testScope,
+ )
+
+ assertThat(values).isNotEmpty()
+ values.forEach { assertThat(it).isEqualTo(0) }
+ }
+}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java
index 95d9c8f4e819..f5a71113235a 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java
@@ -240,6 +240,8 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
@DisableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_DEVICE_GROUPING)
@Test
public void onBindViewHolder_bindConnectedRemoteDevice_verifyView() {
+ when(mMediaSwitchingController.getSelectedMediaDevice())
+ .thenReturn(ImmutableList.of(mMediaDevice1));
when(mMediaSwitchingController.getSelectableMediaDevice())
.thenReturn(ImmutableList.of(mMediaDevice2));
when(mMediaSwitchingController.isCurrentConnectedDeviceRemote()).thenReturn(true);
@@ -854,6 +856,8 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
.thenReturn(ImmutableList.of(mMediaDevice2));
when(mMediaSwitchingController.getDeselectableMediaDevice())
.thenReturn(ImmutableList.of(mMediaDevice1));
+ when(mMediaSwitchingController.getSelectedMediaDevice())
+ .thenReturn(ImmutableList.of(mMediaDevice1));
when(mMediaSwitchingController.isCurrentConnectedDeviceRemote()).thenReturn(true);
mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter
.onCreateViewHolder(new LinearLayout(mContext), 0);
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/GridLayoutTypeInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/GridLayoutTypeInteractorTest.kt
index 9e400a6c0a4c..c775bfd75f6e 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/GridLayoutTypeInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/GridLayoutTypeInteractorTest.kt
@@ -19,7 +19,6 @@ package com.android.systemui.qs.panels.domain.interactor
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
-import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
@@ -35,7 +34,6 @@ import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
-@EnableSceneContainer
class GridLayoutTypeInteractorTest : SysuiTestCase() {
val kosmos = testKosmos()
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/QSColumnsInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/QSColumnsInteractorTest.kt
index 9fe783b98046..2e7aeb433e04 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/QSColumnsInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/domain/interactor/QSColumnsInteractorTest.kt
@@ -22,7 +22,6 @@ import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.common.ui.data.repository.configurationRepository
import com.android.systemui.coroutines.collectLastValue
-import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.testCase
import com.android.systemui.kosmos.testScope
import com.android.systemui.qs.panels.data.repository.QSColumnsRepository
@@ -77,7 +76,6 @@ class QSColumnsInteractorTest : SysuiTestCase() {
}
@Test
- @EnableSceneContainer
fun withDualShade_returnsCorrectValue() =
with(kosmos) {
testScope.runTest {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/MediaInRowInLandscapeViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/MediaInRowInLandscapeViewModelTest.kt
index d5e502e99de5..fdbf42c9afd8 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/MediaInRowInLandscapeViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/MediaInRowInLandscapeViewModelTest.kt
@@ -21,7 +21,6 @@ import android.content.res.mainResources
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository
-import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.media.controls.ui.controller.MediaHierarchyManager.Companion.LOCATION_QQS
@@ -37,7 +36,6 @@ import com.android.systemui.shade.shared.model.ShadeMode
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlin.test.Test
-import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
@@ -45,7 +43,6 @@ import org.junit.runner.RunWith
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters
-@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(ParameterizedAndroidJunit4::class)
@SmallTest
class MediaInRowInLandscapeViewModelTest(private val testData: TestData) : SysuiTestCase() {
@@ -66,7 +63,6 @@ class MediaInRowInLandscapeViewModelTest(private val testData: TestData) : Sysui
}
@Test
- @EnableSceneContainer
fun shouldMediaShowInRow() =
with(kosmos) {
testScope.runTest {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/QSColumnsViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/QSColumnsViewModelTest.kt
index 4912c319bf2e..241cdbfbef83 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/QSColumnsViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/panels/ui/viewmodel/QSColumnsViewModelTest.kt
@@ -21,7 +21,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.common.ui.data.repository.configurationRepository
-import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.runCurrent
import com.android.systemui.kosmos.testCase
@@ -89,7 +88,6 @@ class QSColumnsViewModelTest : SysuiTestCase() {
}
@Test
- @EnableSceneContainer
fun mediaLocationNull_dualShade_alwaysDualShadeColumns() =
with(kosmos) {
testScope.runTest {
@@ -113,7 +111,6 @@ class QSColumnsViewModelTest : SysuiTestCase() {
}
@Test
- @EnableSceneContainer
fun mediaLocationQS_dualShade_alwaysDualShadeColumns() =
with(kosmos) {
testScope.runTest {
@@ -136,7 +133,6 @@ class QSColumnsViewModelTest : SysuiTestCase() {
}
@Test
- @EnableSceneContainer
fun mediaLocationQQS_dualShade_alwaysDualShadeColumns() =
with(kosmos) {
testScope.runTest {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/InternetTileNewImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/InternetTileNewImplTest.kt
index 64e6f4bd48b8..7ed3cb3e4586 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/InternetTileNewImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/InternetTileNewImplTest.kt
@@ -34,7 +34,6 @@ import com.android.systemui.qs.flags.QSComposeFragment
import com.android.systemui.qs.logging.QSLogger
import com.android.systemui.qs.tiles.dialog.InternetDetailsViewModel
import com.android.systemui.qs.tiles.dialog.InternetDialogManager
-import com.android.systemui.qs.tiles.dialog.WifiStateWorker
import com.android.systemui.res.R
import com.android.systemui.statusbar.connectivity.AccessPointController
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
@@ -61,9 +60,6 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.MockitoAnnotations
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.times
-import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters
@@ -99,7 +95,6 @@ class InternetTileNewImplTest(flags: FlagsParameterization) : SysuiTestCase() {
@Mock private lateinit var activityStarter: ActivityStarter
@Mock private lateinit var logger: QSLogger
@Mock private lateinit var dialogManager: InternetDialogManager
- @Mock private lateinit var wifiStateWorker: WifiStateWorker
@Mock private lateinit var accessPointController: AccessPointController
@Mock private lateinit var internetDetailsViewModelFactory: InternetDetailsViewModel.Factory
@@ -136,7 +131,6 @@ class InternetTileNewImplTest(flags: FlagsParameterization) : SysuiTestCase() {
logger,
viewModel,
dialogManager,
- wifiStateWorker,
accessPointController,
internetDetailsViewModelFactory,
)
@@ -245,26 +239,6 @@ class InternetTileNewImplTest(flags: FlagsParameterization) : SysuiTestCase() {
assertThat(underTest.state.secondaryLabel).isEqualTo(WIFI_SSID)
}
- @Test
- fun secondaryClick_turnsWifiOff() {
- whenever(wifiStateWorker.isWifiEnabled).thenReturn(true)
-
- underTest.secondaryClick(null)
- looper.processAllMessages()
-
- verify(wifiStateWorker, times(1)).isWifiEnabled = eq(false)
- }
-
- @Test
- fun secondaryClick_turnsWifiOn() {
- whenever(wifiStateWorker.isWifiEnabled).thenReturn(false)
-
- underTest.secondaryClick(null)
- looper.processAllMessages()
-
- verify(wifiStateWorker, times(1)).isWifiEnabled = eq(true)
- }
-
companion object {
const val WIFI_SSID = "test ssid"
val ACTIVE_WIFI =
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java
index 3a3f5371d195..61d0c8dbb087 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/ScreenRecordTileTest.java
@@ -345,11 +345,21 @@ public class ScreenRecordTileTest extends SysuiTestCase {
public void testNotStartingAndRecording_returnDetailsViewModel() {
when(mController.isStarting()).thenReturn(false);
when(mController.isRecording()).thenReturn(false);
+ when(mController.isScreenCaptureDisabled()).thenReturn(false);
mTile.getDetailsViewModel(Assert::assertNotNull);
}
@Test
@EnableFlags(QsDetailedView.FLAG_NAME)
+ public void testRecordingDisabled_notReturnDetailsViewModel() {
+ when(mController.isStarting()).thenReturn(false);
+ when(mController.isRecording()).thenReturn(false);
+ when(mController.isScreenCaptureDisabled()).thenReturn(true);
+ mTile.getDetailsViewModel(Assert::assertNull);
+ }
+
+ @Test
+ @EnableFlags(QsDetailedView.FLAG_NAME)
public void testStarting_notReturnDetailsViewModel() {
when(mController.isStarting()).thenReturn(true);
when(mController.isRecording()).thenReturn(false);
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/InternetTileMapperTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/InternetTileMapperTest.kt
index b087bbc29bf7..54a653df696f 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/InternetTileMapperTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/InternetTileMapperTest.kt
@@ -191,11 +191,7 @@ class InternetTileMapperTest : SysuiTestCase() {
label,
activationState,
secondaryLabel,
- setOf(
- QSTileState.UserAction.CLICK,
- QSTileState.UserAction.TOGGLE_CLICK,
- QSTileState.UserAction.LONG_CLICK,
- ),
+ setOf(QSTileState.UserAction.CLICK, QSTileState.UserAction.LONG_CLICK),
contentDescription,
null,
QSTileState.SideViewIcon.Chevron,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractorTest.kt
index ce4a3432a5b4..3db5efcb6eb8 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractorTest.kt
@@ -29,7 +29,6 @@ import com.android.systemui.qs.tiles.base.interactor.QSTileInputTestKtx
import com.android.systemui.qs.tiles.dialog.InternetDetailsContentManager
import com.android.systemui.qs.tiles.dialog.InternetDetailsViewModel
import com.android.systemui.qs.tiles.dialog.InternetDialogManager
-import com.android.systemui.qs.tiles.dialog.WifiStateWorker
import com.android.systemui.qs.tiles.impl.internet.domain.model.InternetTileModel
import com.android.systemui.statusbar.connectivity.AccessPointController
import com.android.systemui.util.mockito.nullable
@@ -56,7 +55,6 @@ class InternetTileUserActionInteractorTest : SysuiTestCase() {
private lateinit var underTest: InternetTileUserActionInteractor
private lateinit var internetDialogManager: InternetDialogManager
- private lateinit var wifiStateWorker: WifiStateWorker
private lateinit var controller: AccessPointController
private lateinit var internetDetailsViewModelFactory: InternetDetailsViewModel.Factory
private lateinit var internetDetailsContentManagerFactory: InternetDetailsContentManager.Factory
@@ -65,7 +63,6 @@ class InternetTileUserActionInteractorTest : SysuiTestCase() {
@Before
fun setup() {
internetDialogManager = mock<InternetDialogManager>()
- wifiStateWorker = mock<WifiStateWorker>()
controller = mock<AccessPointController>()
internetDetailsViewModelFactory = mock<InternetDetailsViewModel.Factory>()
internetDetailsContentManagerFactory = mock<InternetDetailsContentManager.Factory>()
@@ -81,7 +78,6 @@ class InternetTileUserActionInteractorTest : SysuiTestCase() {
InternetTileUserActionInteractor(
kosmos.testScope.coroutineContext,
internetDialogManager,
- wifiStateWorker,
controller,
inputHandler,
internetDetailsViewModelFactory,
@@ -133,26 +129,6 @@ class InternetTileUserActionInteractorTest : SysuiTestCase() {
}
@Test
- fun handleSecondaryClickWhenWifiOn() =
- kosmos.testScope.runTest {
- whenever(wifiStateWorker.isWifiEnabled).thenReturn(true)
-
- underTest.handleInput(QSTileInputTestKtx.toggleClick(InternetTileModel.Active()))
-
- verify(wifiStateWorker, times(1)).isWifiEnabled = eq(false)
- }
-
- @Test
- fun handleSecondaryClickWhenWifiOff() =
- kosmos.testScope.runTest {
- whenever(wifiStateWorker.isWifiEnabled).thenReturn(false)
-
- underTest.handleInput(QSTileInputTestKtx.toggleClick(InternetTileModel.Inactive()))
-
- verify(wifiStateWorker, times(1)).isWifiEnabled = eq(true)
- }
-
- @Test
fun detailsViewModel() =
kosmos.testScope.runTest {
assertThat(underTest.detailsViewModel.getTitle()).isEqualTo("Internet")
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeModeInteractorImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeModeInteractorImplTest.kt
index d26e195d360a..668f568d7f46 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeModeInteractorImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeModeInteractorImplTest.kt
@@ -20,7 +20,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
-import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.testScope
import com.android.systemui.shade.shared.model.ShadeMode
import com.android.systemui.testKosmos
@@ -32,7 +31,6 @@ import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
-@EnableSceneContainer
class ShadeModeInteractorImplTest : SysuiTestCase() {
private val kosmos = testKosmos()
@@ -82,7 +80,7 @@ class ShadeModeInteractorImplTest : SysuiTestCase() {
}
@Test
- fun isDualShade_settingEnabledSceneContainerEnabled_returnsTrue() =
+ fun isDualShade_settingEnabled_returnsTrue() =
testScope.runTest {
// TODO(b/391578667): Add a test case for user switching once the bug is fixed.
val shadeMode by collectLastValue(underTest.shadeMode)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt
index dde867814159..b8f66acf6413 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt
@@ -48,7 +48,6 @@ import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.TestScope
@@ -60,7 +59,6 @@ import org.mockito.kotlin.verify
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters
-@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(ParameterizedAndroidJunit4::class)
class ShadeStartableTest(flags: FlagsParameterization) : SysuiTestCase() {
@@ -105,7 +103,6 @@ class ShadeStartableTest(flags: FlagsParameterization) : SysuiTestCase() {
}
@Test
- @EnableSceneContainer
fun hydrateShadeMode_dualShadeEnabled() =
testScope.runTest {
overrideResource(R.bool.config_use_split_notification_shade, false)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shared/system/QuickStepContractTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shared/system/QuickStepContractTest.kt
index d92781a5f3ce..ef03fab95778 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shared/system/QuickStepContractTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shared/system/QuickStepContractTest.kt
@@ -16,10 +16,8 @@
package com.android.systemui.shared.system
-import android.platform.test.annotations.DisableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
-import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_BACK_ACTION
import com.android.systemui.SysuiTestCase
import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BOUNCER_SHOWING
import com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_COMMUNAL_HUB_SHOWING
@@ -32,7 +30,6 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class QuickStepContractTest : SysuiTestCase() {
@Test
- @DisableFlags(FLAG_GLANCEABLE_HUB_BACK_ACTION)
fun isBackGestureDisabled_hubShowing() {
val sysuiStateFlags = SYSUI_STATE_COMMUNAL_HUB_SHOWING
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt
index d2ea62da0940..83361dad9ff0 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt
@@ -76,7 +76,6 @@ import org.mockito.junit.MockitoJUnit
class NotificationShadeDepthControllerTest : SysuiTestCase() {
private val kosmos = testKosmos()
- private val applicationScope = kosmos.testScope.backgroundScope
@Mock private lateinit var windowRootViewBlurInteractor: WindowRootViewBlurInteractor
@Mock private lateinit var statusBarStateController: StatusBarStateController
@Mock private lateinit var blurUtils: BlurUtils
@@ -134,7 +133,6 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
context,
ResourcesSplitShadeStateController(),
windowRootViewBlurInteractor,
- applicationScope,
appZoomOutOptional,
dumpManager,
configurationController,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/notification/domain/interactor/SingleNotificationChipInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/notification/domain/interactor/SingleNotificationChipInteractorTest.kt
index 05f2585cfaa5..cabe4afdea60 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/notification/domain/interactor/SingleNotificationChipInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/notification/domain/interactor/SingleNotificationChipInteractorTest.kt
@@ -306,7 +306,7 @@ class SingleNotificationChipInteractorTest : SysuiTestCase() {
}
@Test
- fun notificationChip_appIsVisibleOnCreation_emitsNull() =
+ fun notificationChip_appIsVisibleOnCreation_emitsIsAppVisibleTrue() =
kosmos.runTest {
activityManagerRepository.fake.startingIsAppVisibleValue = true
@@ -323,11 +323,12 @@ class SingleNotificationChipInteractorTest : SysuiTestCase() {
val latest by collectLastValue(underTest.notificationChip)
- assertThat(latest).isNull()
+ assertThat(latest).isNotNull()
+ assertThat(latest!!.isAppVisible).isTrue()
}
@Test
- fun notificationChip_appNotVisibleOnCreation_emitsValue() =
+ fun notificationChip_appNotVisibleOnCreation_emitsIsAppVisibleFalse() =
kosmos.runTest {
activityManagerRepository.fake.startingIsAppVisibleValue = false
@@ -345,10 +346,11 @@ class SingleNotificationChipInteractorTest : SysuiTestCase() {
val latest by collectLastValue(underTest.notificationChip)
assertThat(latest).isNotNull()
+ assertThat(latest!!.isAppVisible).isFalse()
}
@Test
- fun notificationChip_hidesWhenAppIsVisible() =
+ fun notificationChip_updatesWhenAppIsVisible() =
kosmos.runTest {
val underTest =
factory.create(
@@ -364,13 +366,13 @@ class SingleNotificationChipInteractorTest : SysuiTestCase() {
val latest by collectLastValue(underTest.notificationChip)
activityManagerRepository.fake.setIsAppVisible(UID, false)
- assertThat(latest).isNotNull()
+ assertThat(latest!!.isAppVisible).isFalse()
activityManagerRepository.fake.setIsAppVisible(UID, true)
- assertThat(latest).isNull()
+ assertThat(latest!!.isAppVisible).isTrue()
activityManagerRepository.fake.setIsAppVisible(UID, false)
- assertThat(latest).isNotNull()
+ assertThat(latest!!.isAppVisible).isFalse()
}
// Note: This test is theoretically impossible because the notification key should contain the
@@ -396,6 +398,7 @@ class SingleNotificationChipInteractorTest : SysuiTestCase() {
)
val latest by collectLastValue(underTest.notificationChip)
assertThat(latest).isNotNull()
+ assertThat(latest!!.isAppVisible).isFalse()
// WHEN the notif gets a new UID that starts as visible
activityManagerRepository.fake.startingIsAppVisibleValue = true
@@ -408,9 +411,8 @@ class SingleNotificationChipInteractorTest : SysuiTestCase() {
)
)
- // THEN we re-fetch the app visibility state with the new UID, and since that UID is
- // visible, we hide the chip
- assertThat(latest).isNull()
+ // THEN we re-fetch the app visibility state with the new UID
+ assertThat(latest!!.isAppVisible).isTrue()
}
companion object {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/notification/domain/interactor/StatusBarNotificationChipsInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/notification/domain/interactor/StatusBarNotificationChipsInteractorTest.kt
index e89c929a5827..d8e4cd927bec 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/notification/domain/interactor/StatusBarNotificationChipsInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/notification/domain/interactor/StatusBarNotificationChipsInteractorTest.kt
@@ -21,8 +21,8 @@ import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
-import com.android.systemui.coroutines.collectLastValue
-import com.android.systemui.coroutines.collectValues
+import com.android.systemui.activity.data.repository.activityManagerRepository
+import com.android.systemui.activity.data.repository.fake
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.collectValues
@@ -41,7 +41,6 @@ import com.android.systemui.testKosmos
import com.android.systemui.util.time.fakeSystemClock
import com.google.common.truth.Truth.assertThat
import kotlin.test.Test
-import kotlinx.coroutines.test.runTest
import org.junit.runner.RunWith
import org.mockito.kotlin.mock
@@ -55,9 +54,9 @@ class StatusBarNotificationChipsInteractorTest : SysuiTestCase() {
@Test
@DisableFlags(StatusBarNotifChips.FLAG_NAME)
- fun notificationChips_flagOff_noNotifs() =
+ fun shownNotificationChips_flagOff_noNotifs() =
kosmos.runTest {
- val latest by collectLastValue(underTest.notificationChips)
+ val latest by collectLastValue(underTest.shownNotificationChips)
setNotifs(
listOf(
@@ -74,9 +73,9 @@ class StatusBarNotificationChipsInteractorTest : SysuiTestCase() {
@Test
@EnableFlags(StatusBarNotifChips.FLAG_NAME)
- fun notificationChips_noNotifs_empty() =
+ fun shownNotificationChips_noNotifs_empty() =
kosmos.runTest {
- val latest by collectLastValue(underTest.notificationChips)
+ val latest by collectLastValue(underTest.shownNotificationChips)
setNotifs(emptyList())
@@ -86,9 +85,9 @@ class StatusBarNotificationChipsInteractorTest : SysuiTestCase() {
@Test
@EnableFlags(StatusBarNotifChips.FLAG_NAME)
@DisableFlags(StatusBarConnectedDisplays.FLAG_NAME)
- fun notificationChips_notifMissingStatusBarChipIconView_cdFlagOff_empty() =
+ fun shownNotificationChips_notifMissingStatusBarChipIconView_cdFlagOff_empty() =
kosmos.runTest {
- val latest by collectLastValue(underTest.notificationChips)
+ val latest by collectLastValue(underTest.shownNotificationChips)
setNotifs(
listOf(
@@ -105,9 +104,9 @@ class StatusBarNotificationChipsInteractorTest : SysuiTestCase() {
@Test
@EnableFlags(StatusBarNotifChips.FLAG_NAME, StatusBarConnectedDisplays.FLAG_NAME)
- fun notificationChips_notifMissingStatusBarChipIconView_cdFlagOn_notEmpty() =
+ fun shownNotificationChips_notifMissingStatusBarChipIconView_cdFlagOn_notEmpty() =
kosmos.runTest {
- val latest by collectLastValue(underTest.notificationChips)
+ val latest by collectLastValue(underTest.shownNotificationChips)
setNotifs(
listOf(
@@ -124,9 +123,9 @@ class StatusBarNotificationChipsInteractorTest : SysuiTestCase() {
@Test
@EnableFlags(StatusBarNotifChips.FLAG_NAME)
- fun notificationChips_onePromotedNotif_statusBarIconViewMatches() =
+ fun shownNotificationChips_onePromotedNotif_statusBarIconViewMatches() =
kosmos.runTest {
- val latest by collectLastValue(underTest.notificationChips)
+ val latest by collectLastValue(underTest.shownNotificationChips)
val icon = mock<StatusBarIconView>()
setNotifs(
@@ -146,9 +145,9 @@ class StatusBarNotificationChipsInteractorTest : SysuiTestCase() {
@Test
@EnableFlags(StatusBarNotifChips.FLAG_NAME)
- fun notificationChips_onlyForPromotedNotifs() =
+ fun shownNotificationChips_onlyForPromotedNotifs() =
kosmos.runTest {
- val latest by collectLastValue(underTest.notificationChips)
+ val latest by collectLastValue(underTest.shownNotificationChips)
val firstIcon = mock<StatusBarIconView>()
val secondIcon = mock<StatusBarIconView>()
@@ -179,12 +178,42 @@ class StatusBarNotificationChipsInteractorTest : SysuiTestCase() {
assertThat(latest!![1].statusBarChipIconView).isEqualTo(secondIcon)
}
+ @Test
+ @EnableFlags(StatusBarNotifChips.FLAG_NAME)
+ fun shownNotificationChips_onlyForNotVisibleApps() =
+ kosmos.runTest {
+ activityManagerRepository.fake.startingIsAppVisibleValue = false
+
+ val latest by collectLastValue(underTest.shownNotificationChips)
+
+ val uid = 433
+ setNotifs(
+ listOf(
+ activeNotificationModel(
+ key = "notif",
+ uid = uid,
+ statusBarChipIcon = mock<StatusBarIconView>(),
+ promotedContent = PromotedNotificationContentModel.Builder("notif1").build(),
+ )
+ )
+ )
+
+ activityManagerRepository.fake.setIsAppVisible(uid, isAppVisible = false)
+ assertThat(latest).hasSize(1)
+
+ activityManagerRepository.fake.setIsAppVisible(uid, isAppVisible = true)
+ assertThat(latest).isEmpty()
+
+ activityManagerRepository.fake.setIsAppVisible(uid, isAppVisible = false)
+ assertThat(latest).hasSize(1)
+ }
+
/** Regression test for b/388521980. */
@Test
@EnableFlags(StatusBarNotifChips.FLAG_NAME)
- fun notificationChips_callNotifIsAlsoPromoted_callNotifExcluded() =
+ fun shownNotificationChips_callNotifIsAlsoPromoted_callNotifExcluded() =
kosmos.runTest {
- val latest by collectLastValue(underTest.notificationChips)
+ val latest by collectLastValue(underTest.shownNotificationChips)
setNotifs(
listOf(
@@ -212,9 +241,9 @@ class StatusBarNotificationChipsInteractorTest : SysuiTestCase() {
@Test
@EnableFlags(StatusBarNotifChips.FLAG_NAME)
- fun notificationChips_notifUpdatesGoThrough() =
+ fun shownNotificationChips_notifUpdatesGoThrough() =
kosmos.runTest {
- val latest by collectLastValue(underTest.notificationChips)
+ val latest by collectLastValue(underTest.shownNotificationChips)
val firstIcon = mock<StatusBarIconView>()
val secondIcon = mock<StatusBarIconView>()
@@ -262,9 +291,9 @@ class StatusBarNotificationChipsInteractorTest : SysuiTestCase() {
@Test
@EnableFlags(StatusBarNotifChips.FLAG_NAME)
- fun notificationChips_promotedNotifDisappearsThenReappears() =
+ fun shownNotificationChips_promotedNotifDisappearsThenReappears() =
kosmos.runTest {
- val latest by collectLastValue(underTest.notificationChips)
+ val latest by collectLastValue(underTest.shownNotificationChips)
setNotifs(
listOf(
@@ -304,9 +333,9 @@ class StatusBarNotificationChipsInteractorTest : SysuiTestCase() {
@Test
@EnableFlags(StatusBarNotifChips.FLAG_NAME)
- fun notificationChips_sortedBasedOnFirstAppearanceTime() =
+ fun shownNotificationChips_sortedBasedOnFirstAppearanceTime() =
kosmos.runTest {
- val latest by collectLastValue(underTest.notificationChips)
+ val latest by collectLastValue(underTest.shownNotificationChips)
val firstIcon = mock<StatusBarIconView>()
val secondIcon = mock<StatusBarIconView>()
@@ -391,9 +420,9 @@ class StatusBarNotificationChipsInteractorTest : SysuiTestCase() {
@Test
@EnableFlags(StatusBarNotifChips.FLAG_NAME)
- fun notificationChips_notifChangesKey() =
+ fun shownNotificationChips_notifChangesKey() =
kosmos.runTest {
- val latest by collectLastValue(underTest.notificationChips)
+ val latest by collectLastValue(underTest.shownNotificationChips)
val firstIcon = mock<StatusBarIconView>()
val secondIcon = mock<StatusBarIconView>()
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinatorTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinatorTest.java
deleted file mode 100644
index 544d20145db3..000000000000
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinatorTest.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.notification.collection.coordinator;
-
-import static android.app.Notification.FLAG_FOREGROUND_SERVICE;
-import static android.app.Notification.FLAG_PROMOTED_ONGOING;
-import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
-import static android.app.NotificationManager.IMPORTANCE_HIGH;
-import static android.app.NotificationManager.IMPORTANCE_MIN;
-
-import static junit.framework.Assert.assertFalse;
-import static junit.framework.Assert.assertTrue;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-
-import android.app.Notification;
-import android.app.PendingIntent;
-import android.app.Person;
-import android.content.Intent;
-import android.graphics.Color;
-import android.os.UserHandle;
-import android.platform.test.annotations.DisableFlags;
-import android.platform.test.annotations.EnableFlags;
-import android.testing.TestableLooper;
-
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
-
-import com.android.systemui.SysuiTestCase;
-import com.android.systemui.statusbar.notification.collection.NotifPipeline;
-import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
-import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter;
-import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner;
-import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUi;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-@TestableLooper.RunWithLooper
-public class ColorizedFgsCoordinatorTest extends SysuiTestCase {
-
- private static final int NOTIF_USER_ID = 0;
- @Mock private NotifPipeline mNotifPipeline;
-
- private NotificationEntryBuilder mEntryBuilder;
- private ColorizedFgsCoordinator mColorizedFgsCoordinator;
- private NotifSectioner mFgsSection;
-
- @Before
- public void setup() {
- MockitoAnnotations.initMocks(this);
- allowTestableLooperAsMainThread();
-
- mColorizedFgsCoordinator = new ColorizedFgsCoordinator();
-
- mEntryBuilder = new NotificationEntryBuilder()
- .setUser(new UserHandle(NOTIF_USER_ID));
-
- mColorizedFgsCoordinator.attach(mNotifPipeline);
-
- mFgsSection = mColorizedFgsCoordinator.getSectioner();
- }
-
- @Test
- public void testIncludeFGSInSection_importanceDefault() {
- // GIVEN the notification represents a colorized foreground service with > min importance
- mEntryBuilder
- .setFlag(mContext, FLAG_FOREGROUND_SERVICE, true)
- .setImportance(IMPORTANCE_DEFAULT)
- .modifyNotification(mContext)
- .setColorized(true).setColor(Color.WHITE);
-
- // THEN the entry is in the fgs section
- assertTrue(mFgsSection.isInSection(mEntryBuilder.build()));
- }
-
- @Test
- public void testDiscludeFGSInSection_importanceMin() {
- // GIVEN the notification represents a colorized foreground service with min importance
- mEntryBuilder
- .setFlag(mContext, FLAG_FOREGROUND_SERVICE, true)
- .setImportance(IMPORTANCE_MIN)
- .modifyNotification(mContext)
- .setColorized(true).setColor(Color.WHITE);
-
- // THEN the entry is NOT in the fgs section
- assertFalse(mFgsSection.isInSection(mEntryBuilder.build()));
- }
-
- @Test
- public void testDiscludeNonFGSInSection() {
- // GIVEN the notification represents a colorized notification with high importance that
- // is NOT a foreground service
- mEntryBuilder
- .setImportance(IMPORTANCE_HIGH)
- .setFlag(mContext, FLAG_FOREGROUND_SERVICE, false)
- .modifyNotification(mContext).setColorized(false);
-
- // THEN the entry is NOT in the fgs section
- assertFalse(mFgsSection.isInSection(mEntryBuilder.build()));
- }
-
- @Test
- public void testIncludeCallInSection_importanceDefault() {
- // GIVEN the notification represents a call with > min importance
- mEntryBuilder
- .setImportance(IMPORTANCE_DEFAULT)
- .modifyNotification(mContext)
- .setStyle(makeCallStyle());
-
- // THEN the entry is in the fgs section
- assertTrue(mFgsSection.isInSection(mEntryBuilder.build()));
- }
-
- @Test
- public void testDiscludeCallInSection_importanceMin() {
- // GIVEN the notification represents a call with min importance
- mEntryBuilder
- .setImportance(IMPORTANCE_MIN)
- .modifyNotification(mContext)
- .setStyle(makeCallStyle());
-
- // THEN the entry is NOT in the fgs section
- assertFalse(mFgsSection.isInSection(mEntryBuilder.build()));
- }
-
- @Test
- @EnableFlags(PromotedNotificationUi.FLAG_NAME)
- public void testIncludePromotedOngoingInSection_flagEnabled() {
- // GIVEN the notification has FLAG_PROMOTED_ONGOING
- mEntryBuilder.setFlag(mContext, FLAG_PROMOTED_ONGOING, true);
-
- // THEN the entry is in the fgs section
- assertTrue(mFgsSection.isInSection(mEntryBuilder.build()));
- }
-
- @Test
- @DisableFlags(PromotedNotificationUi.FLAG_NAME)
- public void testDiscludePromotedOngoingInSection_flagDisabled() {
- // GIVEN the notification has FLAG_PROMOTED_ONGOING
- mEntryBuilder.setFlag(mContext, FLAG_PROMOTED_ONGOING, true);
-
- // THEN the entry is NOT in the fgs section
- assertFalse(mFgsSection.isInSection(mEntryBuilder.build()));
- }
-
- @Test
- @EnableFlags(PromotedNotificationUi.FLAG_NAME)
- public void promoterSelectsPromotedOngoing_flagEnabled() {
- ArgumentCaptor<NotifPromoter> captor = ArgumentCaptor.forClass(NotifPromoter.class);
- verify(mNotifPipeline).addPromoter(captor.capture());
- NotifPromoter promoter = captor.getValue();
-
- // GIVEN the notification has FLAG_PROMOTED_ONGOING
- mEntryBuilder.setFlag(mContext, FLAG_PROMOTED_ONGOING, true);
-
- // THEN the entry is promoted to top level
- assertTrue(promoter.shouldPromoteToTopLevel(mEntryBuilder.build()));
- }
-
- @Test
- @EnableFlags(PromotedNotificationUi.FLAG_NAME)
- public void promoterIgnoresNonPromotedOngoing_flagEnabled() {
- ArgumentCaptor<NotifPromoter> captor = ArgumentCaptor.forClass(NotifPromoter.class);
- verify(mNotifPipeline).addPromoter(captor.capture());
- NotifPromoter promoter = captor.getValue();
-
- // GIVEN the notification does not have FLAG_PROMOTED_ONGOING
- mEntryBuilder.setFlag(mContext, FLAG_PROMOTED_ONGOING, false);
-
- // THEN the entry is NOT promoted to top level
- assertFalse(promoter.shouldPromoteToTopLevel(mEntryBuilder.build()));
- }
-
- @Test
- @DisableFlags(PromotedNotificationUi.FLAG_NAME)
- public void noPromoterAdded_flagDisabled() {
- verify(mNotifPipeline, never()).addPromoter(any());
- }
-
- private Notification.CallStyle makeCallStyle() {
- final PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0,
- new Intent("action"), PendingIntent.FLAG_IMMUTABLE);
- final Person person = new Person.Builder().setName("person").build();
- return Notification.CallStyle.forIncomingCall(person, pendingIntent, pendingIntent);
- }
-}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinatorTest.kt
new file mode 100644
index 000000000000..e93c74252251
--- /dev/null
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinatorTest.kt
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.systemui.statusbar.notification.collection.coordinator
+
+import android.app.Notification
+import android.app.NotificationManager
+import android.app.PendingIntent
+import android.app.Person
+import android.content.Intent
+import android.graphics.Color
+import android.platform.test.annotations.DisableFlags
+import android.platform.test.annotations.EnableFlags
+import android.testing.TestableLooper.RunWithLooper
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.kosmos.useUnconfinedTestDispatcher
+import com.android.systemui.statusbar.notification.collection.buildEntry
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter
+import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
+import com.android.systemui.statusbar.notification.collection.notifPipeline
+import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUi
+import com.android.systemui.testKosmos
+import com.android.systemui.util.mockito.withArgCaptor
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.kotlin.any
+import org.mockito.kotlin.never
+import org.mockito.kotlin.verify
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+@RunWithLooper
+class ColorizedFgsCoordinatorTest : SysuiTestCase() {
+ private val kosmos = testKosmos().useUnconfinedTestDispatcher()
+ private val notifPipeline
+ get() = kosmos.notifPipeline
+
+ private lateinit var colorizedFgsCoordinator: ColorizedFgsCoordinator
+ private lateinit var sectioner: NotifSectioner
+
+ @Before
+ fun setup() {
+ allowTestableLooperAsMainThread()
+
+ colorizedFgsCoordinator = ColorizedFgsCoordinator()
+ colorizedFgsCoordinator.attach(notifPipeline)
+ sectioner = colorizedFgsCoordinator.sectioner
+ }
+
+ @Test
+ fun testIncludeFGSInSection_importanceDefault() {
+ // GIVEN the notification represents a colorized foreground service with > min importance
+ val entry = buildEntry {
+ setFlag(mContext, Notification.FLAG_FOREGROUND_SERVICE, true)
+ setImportance(NotificationManager.IMPORTANCE_DEFAULT)
+ modifyNotification(mContext).setColorized(true).setColor(Color.WHITE)
+ }
+
+ // THEN the entry is in the fgs section
+ assertTrue(sectioner.isInSection(entry))
+ }
+
+ @Test
+ fun testDiscludeFGSInSection_importanceMin() {
+ // GIVEN the notification represents a colorized foreground service with min importance
+ val entry = buildEntry {
+ setFlag(mContext, Notification.FLAG_FOREGROUND_SERVICE, true)
+ setImportance(NotificationManager.IMPORTANCE_MIN)
+ modifyNotification(mContext).setColorized(true).setColor(Color.WHITE)
+ }
+
+ // THEN the entry is NOT in the fgs section
+ assertFalse(sectioner.isInSection(entry))
+ }
+
+ @Test
+ fun testDiscludeNonFGSInSection() {
+ // GIVEN the notification represents a colorized notification with high importance that
+ // is NOT a foreground service
+ val entry = buildEntry {
+ setImportance(NotificationManager.IMPORTANCE_HIGH)
+ setFlag(mContext, Notification.FLAG_FOREGROUND_SERVICE, false)
+ modifyNotification(mContext).setColorized(false)
+ }
+
+ // THEN the entry is NOT in the fgs section
+ assertFalse(sectioner.isInSection(entry))
+ }
+
+ @Test
+ fun testIncludeCallInSection_importanceDefault() {
+ // GIVEN the notification represents a call with > min importance
+ val entry = buildEntry {
+ setImportance(NotificationManager.IMPORTANCE_DEFAULT)
+ modifyNotification(mContext).setStyle(makeCallStyle())
+ }
+
+ // THEN the entry is in the fgs section
+ assertTrue(sectioner.isInSection(entry))
+ }
+
+ @Test
+ fun testDiscludeCallInSection_importanceMin() {
+ // GIVEN the notification represents a call with min importance
+ val entry = buildEntry {
+ setImportance(NotificationManager.IMPORTANCE_MIN)
+ modifyNotification(mContext).setStyle(makeCallStyle())
+ }
+
+ // THEN the entry is NOT in the fgs section
+ assertFalse(sectioner.isInSection(entry))
+ }
+
+ @Test
+ @EnableFlags(PromotedNotificationUi.FLAG_NAME)
+ fun testIncludePromotedOngoingInSection_flagEnabled() {
+ // GIVEN the notification has FLAG_PROMOTED_ONGOING
+ val entry = buildEntry { setFlag(mContext, Notification.FLAG_PROMOTED_ONGOING, true) }
+
+ // THEN the entry is in the fgs section
+ assertTrue(sectioner.isInSection(entry))
+ }
+
+ @Test
+ @DisableFlags(PromotedNotificationUi.FLAG_NAME)
+ fun testDiscludePromotedOngoingInSection_flagDisabled() {
+ // GIVEN the notification has FLAG_PROMOTED_ONGOING
+ val entry = buildEntry { setFlag(mContext, Notification.FLAG_PROMOTED_ONGOING, true) }
+
+ // THEN the entry is NOT in the fgs section
+ assertFalse(sectioner.isInSection(entry))
+ }
+
+ @Test
+ @EnableFlags(PromotedNotificationUi.FLAG_NAME)
+ fun promoterSelectsPromotedOngoing_flagEnabled() {
+ val promoter: NotifPromoter = withArgCaptor { verify(notifPipeline).addPromoter(capture()) }
+
+ // GIVEN the notification has FLAG_PROMOTED_ONGOING
+ val entry = buildEntry { setFlag(mContext, Notification.FLAG_PROMOTED_ONGOING, true) }
+
+ // THEN the entry is promoted to top level
+ assertTrue(promoter.shouldPromoteToTopLevel(entry))
+ }
+
+ @Test
+ @EnableFlags(PromotedNotificationUi.FLAG_NAME)
+ fun promoterIgnoresNonPromotedOngoing_flagEnabled() {
+ val promoter: NotifPromoter = withArgCaptor { verify(notifPipeline).addPromoter(capture()) }
+
+ // GIVEN the notification does not have FLAG_PROMOTED_ONGOING
+ val entry = buildEntry { setFlag(mContext, Notification.FLAG_PROMOTED_ONGOING, false) }
+
+ // THEN the entry is NOT promoted to top level
+ assertFalse(promoter.shouldPromoteToTopLevel(entry))
+ }
+
+ @Test
+ @DisableFlags(PromotedNotificationUi.FLAG_NAME)
+ fun noPromoterAdded_flagDisabled() {
+ verify(notifPipeline, never()).addPromoter(any())
+ }
+
+ private fun makeCallStyle(): Notification.CallStyle {
+ val pendingIntent =
+ PendingIntent.getBroadcast(mContext, 0, Intent("action"), PendingIntent.FLAG_IMMUTABLE)
+ val person = Person.Builder().setName("person").build()
+ return Notification.CallStyle.forOngoingCall(person, pendingIntent)
+ }
+
+ companion object {
+ private const val NOTIF_USER_ID = 0
+ }
+}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelTest.kt
index 6381b4e0fef7..d570f18e35d8 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelTest.kt
@@ -57,12 +57,11 @@ class NotificationShelfViewModelTest : SysuiTestCase() {
statusBarStateController = mock()
whenever(screenOffAnimationController.allowWakeUpIfDozing()).thenReturn(true)
}
+ private val underTest = kosmos.notificationShelfViewModel
private val deviceEntryFaceAuthRepository = kosmos.fakeDeviceEntryFaceAuthRepository
private val keyguardRepository = kosmos.fakeKeyguardRepository
+ private val keyguardTransitionController = kosmos.lockscreenShadeTransitionController
private val powerRepository = kosmos.fakePowerRepository
- private val keyguardTransitionController by lazy { kosmos.lockscreenShadeTransitionController }
-
- private val underTest by lazy { kosmos.notificationShelfViewModel }
@Test
fun canModifyColorOfNotifications_whenKeyguardNotShowing() =
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
index 6f785a3731e1..dde6e2ee1866 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
@@ -65,11 +65,9 @@ import com.android.keyguard.KeyguardMessageArea;
import com.android.keyguard.KeyguardMessageAreaController;
import com.android.keyguard.KeyguardSecurityModel;
import com.android.keyguard.KeyguardUpdateMonitor;
-import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.Flags;
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.biometrics.domain.interactor.UdfpsOverlayInteractor;
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor;
import com.android.systemui.bouncer.domain.interactor.BouncerInteractor;
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerCallbackInteractor;
@@ -146,7 +144,6 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
@Mock private SysuiStatusBarStateController mStatusBarStateController;
@Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@Mock private View mNotificationContainer;
- @Mock private KeyguardBypassController mBypassController;
@Mock private KeyguardMessageAreaController.Factory mKeyguardMessageAreaFactory;
@Mock private KeyguardMessageAreaController mKeyguardMessageAreaController;
@Mock private KeyguardMessageArea mKeyguardMessageArea;
@@ -158,7 +155,6 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
@Mock private PrimaryBouncerCallbackInteractor mPrimaryBouncerCallbackInteractor;
@Mock private PrimaryBouncerInteractor mPrimaryBouncerInteractor;
@Mock private AlternateBouncerInteractor mAlternateBouncerInteractor;
- @Mock private UdfpsOverlayInteractor mUdfpsOverlayInteractor;
@Mock private ActivityStarter mActivityStarter;
@Mock private BouncerView mBouncerView;
@Mock private BouncerViewDelegate mBouncerViewDelegate;
@@ -167,7 +163,6 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
@Mock private NotificationShadeWindowView mNotificationShadeWindowView;
@Mock private WindowInsetsController mWindowInsetsController;
@Mock private TaskbarDelegate mTaskbarDelegate;
- @Mock private StatusBarKeyguardViewManager.KeyguardViewManagerCallback mCallback;
@Mock private SelectedUserInteractor mSelectedUserInteractor;
@Mock private DeviceEntryInteractor mDeviceEntryInteractor;
@Mock private SceneInteractor mSceneInteractor;
@@ -190,8 +185,6 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
private KeyguardTransitionInteractor mKeyguardTransitionInteractor;
@Captor
private ArgumentCaptor<OnBackInvokedCallback> mBackCallbackCaptor;
- @Captor
- private ArgumentCaptor<KeyguardUpdateMonitorCallback> mKeyguardUpdateMonitorCallback;
@Mock
private KeyguardDismissActionInteractor mKeyguardDismissActionInteractor;
@@ -227,7 +220,6 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
mock(DockManager.class),
mNotificationShadeWindowController,
mKeyguardStateController,
- mKeyguardMessageAreaFactory,
Optional.of(mSysUiUnfoldComponent),
() -> mShadeController,
mLatencyTracker,
@@ -236,7 +228,6 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
mPrimaryBouncerInteractor,
mBouncerView,
mAlternateBouncerInteractor,
- mUdfpsOverlayInteractor,
mActivityStarter,
mKeyguardTransitionInteractor,
mock(KeyguardDismissTransitionInteractor.class),
@@ -732,7 +723,6 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
mock(DockManager.class),
mock(NotificationShadeWindowController.class),
mKeyguardStateController,
- mKeyguardMessageAreaFactory,
Optional.of(mSysUiUnfoldComponent),
() -> mShadeController,
mLatencyTracker,
@@ -741,7 +731,6 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
mPrimaryBouncerInteractor,
mBouncerView,
mAlternateBouncerInteractor,
- mUdfpsOverlayInteractor,
mActivityStarter,
mock(KeyguardTransitionInteractor.class),
mock(KeyguardDismissTransitionInteractor.class),
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/data/repository/WallpaperRepositoryImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/data/repository/WallpaperRepositoryImplTest.kt
index d89516dea622..7c166de81502 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/data/repository/WallpaperRepositoryImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/data/repository/WallpaperRepositoryImplTest.kt
@@ -22,20 +22,23 @@ import android.content.ComponentName
import android.content.Intent
import android.content.pm.UserInfo
import android.platform.test.annotations.EnableFlags
+import android.provider.Settings
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import com.android.app.wallpaperManager
import com.android.internal.R
import com.android.systemui.SysuiTestCase
+import com.android.systemui.broadcast.broadcastDispatcher
import com.android.systemui.coroutines.collectLastValue
-import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
+import com.android.systemui.kosmos.testScope
import com.android.systemui.res.R as SysUIR
import com.android.systemui.shared.Flags as SharedFlags
+import com.android.systemui.testKosmos
import com.android.systemui.user.data.model.SelectedUserModel
import com.android.systemui.user.data.model.SelectionStatus
-import com.android.systemui.user.data.repository.FakeUserRepository
+import com.android.systemui.user.data.repository.fakeUserRepository
+import com.android.systemui.util.settings.fakeSettings
import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.test.StandardTestDispatcher
-import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
@@ -43,6 +46,7 @@ import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.any
+import org.mockito.kotlin.doAnswer
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever
@@ -50,42 +54,39 @@ import org.mockito.kotlin.whenever
@RunWith(AndroidJUnit4::class)
class WallpaperRepositoryImplTest : SysuiTestCase() {
- private val testDispatcher = StandardTestDispatcher()
- private val testScope = TestScope(testDispatcher)
- private val userRepository = FakeUserRepository()
- private val wallpaperFocalAreaRepository = FakeWallpaperFocalAreaRepository()
- private val wallpaperManager: WallpaperManager = mock()
- private val keyguardTransitionInteractor: KeyguardTransitionInteractor = mock()
-
- private val underTest: WallpaperRepositoryImpl by lazy {
- WallpaperRepositoryImpl(
- testScope.backgroundScope,
- testDispatcher,
- fakeBroadcastDispatcher,
- userRepository,
- wallpaperFocalAreaRepository,
- wallpaperManager,
- context,
- keyguardTransitionInteractor,
- )
- }
+ private var isWallpaperSupported = true
+ private val kosmos =
+ testKosmos().apply {
+ wallpaperManager =
+ mock<WallpaperManager>() {
+ on { isWallpaperSupported } doAnswer { isWallpaperSupported }
+ }
+ }
+ private val secureSettings = kosmos.fakeSettings
+ private val testScope = kosmos.testScope
+ private val userRepository = kosmos.fakeUserRepository
+ private val broadcastDispatcher = kosmos.broadcastDispatcher
+
+ // Initialized in each test since certain flows rely on mocked data that isn't
+ // modifiable after start, like wallpaperManager.isWallpaperSupported
+ private lateinit var underTest: WallpaperRepositoryImpl
lateinit var focalAreaTarget: String
@Before
fun setUp() {
- whenever(wallpaperManager.isWallpaperSupported).thenReturn(true)
focalAreaTarget = context.resources.getString(SysUIR.string.focal_area_target)
}
@Test
fun wallpaperInfo_nullInfo() =
testScope.runTest {
+ underTest = kosmos.wallpaperRepository
val latest by collectLastValue(underTest.wallpaperInfo)
- whenever(wallpaperManager.getWallpaperInfoForUser(any())).thenReturn(null)
+ whenever(kosmos.wallpaperManager.getWallpaperInfoForUser(any())).thenReturn(null)
- fakeBroadcastDispatcher.sendIntentToMatchingReceiversOnly(
+ broadcastDispatcher.sendIntentToMatchingReceiversOnly(
context,
Intent(Intent.ACTION_WALLPAPER_CHANGED),
)
@@ -96,11 +97,13 @@ class WallpaperRepositoryImplTest : SysuiTestCase() {
@Test
fun wallpaperInfo_hasInfoFromManager() =
testScope.runTest {
+ underTest = kosmos.wallpaperRepository
val latest by collectLastValue(underTest.wallpaperInfo)
- whenever(wallpaperManager.getWallpaperInfoForUser(any())).thenReturn(UNSUPPORTED_WP)
+ whenever(kosmos.wallpaperManager.getWallpaperInfoForUser(any()))
+ .thenReturn(UNSUPPORTED_WP)
- fakeBroadcastDispatcher.sendIntentToMatchingReceiversOnly(
+ broadcastDispatcher.sendIntentToMatchingReceiversOnly(
context,
Intent(Intent.ACTION_WALLPAPER_CHANGED),
)
@@ -111,7 +114,8 @@ class WallpaperRepositoryImplTest : SysuiTestCase() {
@Test
fun wallpaperInfo_initialValueIsFetched() =
testScope.runTest {
- whenever(wallpaperManager.getWallpaperInfoForUser(USER_WITH_SUPPORTED_WP.id))
+ underTest = kosmos.wallpaperRepository
+ whenever(kosmos.wallpaperManager.getWallpaperInfoForUser(USER_WITH_SUPPORTED_WP.id))
.thenReturn(SUPPORTED_WP)
userRepository.setUserInfos(listOf(USER_WITH_SUPPORTED_WP))
userRepository.setSelectedUserInfo(USER_WITH_SUPPORTED_WP)
@@ -126,15 +130,16 @@ class WallpaperRepositoryImplTest : SysuiTestCase() {
@Test
fun wallpaperInfo_updatesOnUserChanged() =
testScope.runTest {
+ underTest = kosmos.wallpaperRepository
val latest by collectLastValue(underTest.wallpaperInfo)
val user3 = UserInfo(/* id= */ 3, /* name= */ "user3", /* flags= */ 0)
val user3Wp = mock<WallpaperInfo>()
- whenever(wallpaperManager.getWallpaperInfoForUser(user3.id)).thenReturn(user3Wp)
+ whenever(kosmos.wallpaperManager.getWallpaperInfoForUser(user3.id)).thenReturn(user3Wp)
val user4 = UserInfo(/* id= */ 4, /* name= */ "user4", /* flags= */ 0)
val user4Wp = mock<WallpaperInfo>()
- whenever(wallpaperManager.getWallpaperInfoForUser(user4.id)).thenReturn(user4Wp)
+ whenever(kosmos.wallpaperManager.getWallpaperInfoForUser(user4.id)).thenReturn(user4Wp)
userRepository.setUserInfos(listOf(user3, user4))
@@ -154,15 +159,16 @@ class WallpaperRepositoryImplTest : SysuiTestCase() {
@Test
fun wallpaperInfo_doesNotUpdateOnUserChanging() =
testScope.runTest {
+ underTest = kosmos.wallpaperRepository
val latest by collectLastValue(underTest.wallpaperInfo)
val user3 = UserInfo(/* id= */ 3, /* name= */ "user3", /* flags= */ 0)
val user3Wp = mock<WallpaperInfo>()
- whenever(wallpaperManager.getWallpaperInfoForUser(user3.id)).thenReturn(user3Wp)
+ whenever(kosmos.wallpaperManager.getWallpaperInfoForUser(user3.id)).thenReturn(user3Wp)
val user4 = UserInfo(/* id= */ 4, /* name= */ "user4", /* flags= */ 0)
val user4Wp = mock<WallpaperInfo>()
- whenever(wallpaperManager.getWallpaperInfoForUser(user4.id)).thenReturn(user4Wp)
+ whenever(kosmos.wallpaperManager.getWallpaperInfoForUser(user4.id)).thenReturn(user4Wp)
userRepository.setUserInfos(listOf(user3, user4))
@@ -183,17 +189,18 @@ class WallpaperRepositoryImplTest : SysuiTestCase() {
@Test
fun wallpaperInfo_updatesOnIntent() =
testScope.runTest {
+ underTest = kosmos.wallpaperRepository
val latest by collectLastValue(underTest.wallpaperInfo)
val wp1 = mock<WallpaperInfo>()
- whenever(wallpaperManager.getWallpaperInfoForUser(any())).thenReturn(wp1)
+ whenever(kosmos.wallpaperManager.getWallpaperInfoForUser(any())).thenReturn(wp1)
assertThat(latest).isEqualTo(wp1)
// WHEN the info is new and a broadcast is sent
val wp2 = mock<WallpaperInfo>()
- whenever(wallpaperManager.getWallpaperInfoForUser(any())).thenReturn(wp2)
- fakeBroadcastDispatcher.sendIntentToMatchingReceiversOnly(
+ whenever(kosmos.wallpaperManager.getWallpaperInfoForUser(any())).thenReturn(wp2)
+ broadcastDispatcher.sendIntentToMatchingReceiversOnly(
context,
Intent(Intent.ACTION_WALLPAPER_CHANGED),
)
@@ -205,15 +212,16 @@ class WallpaperRepositoryImplTest : SysuiTestCase() {
@Test
fun wallpaperInfo_wallpaperNotSupported_alwaysNull() =
testScope.runTest {
- whenever(wallpaperManager.isWallpaperSupported).thenReturn(false)
+ isWallpaperSupported = false
+ underTest = kosmos.wallpaperRepository
val latest by collectLastValue(underTest.wallpaperInfo)
assertThat(latest).isNull()
// Even WHEN there *is* current wallpaper
val wp1 = mock<WallpaperInfo>()
- whenever(wallpaperManager.getWallpaperInfoForUser(any())).thenReturn(wp1)
- fakeBroadcastDispatcher.sendIntentToMatchingReceiversOnly(
+ whenever(kosmos.wallpaperManager.getWallpaperInfoForUser(any())).thenReturn(wp1)
+ broadcastDispatcher.sendIntentToMatchingReceiversOnly(
context,
Intent(Intent.ACTION_WALLPAPER_CHANGED),
)
@@ -226,6 +234,8 @@ class WallpaperRepositoryImplTest : SysuiTestCase() {
@EnableFlags(SharedFlags.FLAG_AMBIENT_AOD)
fun wallpaperSupportsAmbientMode_deviceDoesNotSupport_false() =
testScope.runTest {
+ underTest = kosmos.wallpaperRepository
+ secureSettings.putInt(Settings.Secure.DOZE_ALWAYS_ON_WALLPAPER_ENABLED, 1)
context.orCreateTestableResources.addOverride(
R.bool.config_dozeSupportsAodWallpaper,
false,
@@ -239,6 +249,8 @@ class WallpaperRepositoryImplTest : SysuiTestCase() {
@EnableFlags(SharedFlags.FLAG_AMBIENT_AOD)
fun wallpaperSupportsAmbientMode_deviceDoesSupport_true() =
testScope.runTest {
+ underTest = kosmos.wallpaperRepository
+ secureSettings.putInt(Settings.Secure.DOZE_ALWAYS_ON_WALLPAPER_ENABLED, 1)
context.orCreateTestableResources.addOverride(
R.bool.config_dozeSupportsAodWallpaper,
true,
@@ -249,19 +261,34 @@ class WallpaperRepositoryImplTest : SysuiTestCase() {
}
@Test
- @Ignore("ag/31591766")
+ @EnableFlags(SharedFlags.FLAG_AMBIENT_AOD)
+ fun wallpaperSupportsAmbientMode_deviceDoesSupport_settingDisabled_false() =
+ testScope.runTest {
+ underTest = kosmos.wallpaperRepository
+ secureSettings.putInt(Settings.Secure.DOZE_ALWAYS_ON_WALLPAPER_ENABLED, 0)
+ context.orCreateTestableResources.addOverride(
+ R.bool.config_dozeSupportsAodWallpaper,
+ true,
+ )
+
+ val latest by collectLastValue(underTest.wallpaperSupportsAmbientMode)
+ assertThat(latest).isFalse()
+ }
+
+ @Test
@EnableFlags(SharedFlags.FLAG_EXTENDED_WALLPAPER_EFFECTS)
fun shouldSendNotificationLayout_setExtendedEffectsWallpaper_launchSendLayoutJob() =
testScope.runTest {
+ underTest = kosmos.wallpaperRepository
val latest by collectLastValue(underTest.shouldSendFocalArea)
val extedendEffectsWallpaper =
mock<WallpaperInfo>().apply {
whenever(this.component).thenReturn(ComponentName(context, focalAreaTarget))
}
- whenever(wallpaperManager.getWallpaperInfoForUser(any()))
+ whenever(kosmos.wallpaperManager.getWallpaperInfoForUser(any()))
.thenReturn(extedendEffectsWallpaper)
- fakeBroadcastDispatcher.sendIntentToMatchingReceiversOnly(
+ broadcastDispatcher.sendIntentToMatchingReceiversOnly(
context,
Intent(Intent.ACTION_WALLPAPER_CHANGED),
)
@@ -275,14 +302,15 @@ class WallpaperRepositoryImplTest : SysuiTestCase() {
@EnableFlags(SharedFlags.FLAG_EXTENDED_WALLPAPER_EFFECTS)
fun shouldSendNotificationLayout_setNotExtendedEffectsWallpaper_cancelSendLayoutJob() =
testScope.runTest {
+ underTest = kosmos.wallpaperRepository
val latest by collectLastValue(underTest.shouldSendFocalArea)
val extendedEffectsWallpaper =
mock<WallpaperInfo>().apply {
whenever(this.component).thenReturn(ComponentName("", focalAreaTarget))
}
- whenever(wallpaperManager.getWallpaperInfoForUser(any()))
+ whenever(kosmos.wallpaperManager.getWallpaperInfoForUser(any()))
.thenReturn(extendedEffectsWallpaper)
- fakeBroadcastDispatcher.sendIntentToMatchingReceiversOnly(
+ broadcastDispatcher.sendIntentToMatchingReceiversOnly(
context,
Intent(Intent.ACTION_WALLPAPER_CHANGED),
)
@@ -290,11 +318,14 @@ class WallpaperRepositoryImplTest : SysuiTestCase() {
assertThat(underTest.sendLockscreenLayoutJob).isNotNull()
assertThat(underTest.sendLockscreenLayoutJob!!.isActive).isEqualTo(true)
- whenever(wallpaperManager.getWallpaperInfoForUser(any())).thenReturn(UNSUPPORTED_WP)
- fakeBroadcastDispatcher.sendIntentToMatchingReceiversOnly(
+ whenever(kosmos.wallpaperManager.getWallpaperInfoForUser(any()))
+ .thenReturn(UNSUPPORTED_WP)
+ broadcastDispatcher.sendIntentToMatchingReceiversOnly(
context,
Intent(Intent.ACTION_WALLPAPER_CHANGED),
)
+ runCurrent()
+
assertThat(latest).isFalse()
assertThat(underTest.sendLockscreenLayoutJob?.isCancelled).isEqualTo(true)
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModelTest.kt
index 390518f3e2e5..3da4f29a6fcb 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModelTest.kt
@@ -23,32 +23,28 @@ import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.testScope
-import com.android.systemui.lifecycle.activateIn
import com.android.systemui.testKosmos
+import com.android.systemui.window.data.repository.fakeWindowRootViewBlurRepository
+import com.android.systemui.window.data.repository.windowRootViewBlurRepository
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
-import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
-@EnableFlags(Flags.FLAG_BOUNCER_UI_REVAMP)
+@EnableFlags(Flags.FLAG_BOUNCER_UI_REVAMP, Flags.FLAG_GLANCEABLE_HUB_BLURRED_BACKGROUND)
class WindowRootViewModelTest : SysuiTestCase() {
val kosmos = testKosmos()
val testScope = kosmos.testScope
val underTest by lazy { kosmos.windowRootViewModel }
- @Before
- fun setup() {
- underTest.activateIn(testScope)
- }
-
@Test
fun bouncerTransitionChangesWindowBlurRadius() =
testScope.runTest {
+ kosmos.fakeWindowRootViewBlurRepository.isBlurSupported.value = true
val blurRadius by collectLastValue(underTest.blurRadius)
val isBlurOpaque by collectLastValue(underTest.isBlurOpaque)
runCurrent()
@@ -59,4 +55,27 @@ class WindowRootViewModelTest : SysuiTestCase() {
assertThat(blurRadius).isEqualTo(30)
assertThat(isBlurOpaque).isEqualTo(false)
}
+
+ @Test
+ fun blurRadiusDoesNotChangeWhenBlurIsNotSupported() =
+ testScope.runTest {
+ kosmos.fakeWindowRootViewBlurRepository.isBlurSupported.value = false
+ val blurRadius by collectLastValue(underTest.blurRadius)
+ runCurrent()
+
+ kosmos.fakeBouncerTransitions.first().windowBlurRadius.value = 30.0f
+ runCurrent()
+
+ assertThat(blurRadius).isEqualTo(0f)
+
+ kosmos.fakeGlanceableHubTransitions.first().windowBlurRadius.value = 50.0f
+ runCurrent()
+
+ assertThat(blurRadius).isEqualTo(0f)
+
+ kosmos.windowRootViewBlurRepository.blurRadius.value = 60
+ runCurrent()
+
+ assertThat(blurRadius).isEqualTo(0f)
+ }
}
diff --git a/packages/SystemUI/res-keyguard/values-bs/strings.xml b/packages/SystemUI/res-keyguard/values-bs/strings.xml
index baef51ae9d48..249cc6c215eb 100644
--- a/packages/SystemUI/res-keyguard/values-bs/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-bs/strings.xml
@@ -34,7 +34,7 @@
<string name="keyguard_plugged_in_charging_fast" msgid="4386594091107340426">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Brzo punjenje"</string>
<string name="keyguard_plugged_in_charging_slowly" msgid="217655355424210">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Sporo punjenje"</string>
<string name="keyguard_plugged_in_charging_limited" msgid="5369697538556777542">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Punjenje je na čekanju radi zaštite baterije"</string>
- <string name="keyguard_plugged_in_incompatible_charger" msgid="6384203333154532125">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Provjera dodatne opreme za punjenje"</string>
+ <string name="keyguard_plugged_in_incompatible_charger" msgid="6384203333154532125">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Provjera dodatka za punjenje"</string>
<string name="keyguard_network_locked_message" msgid="407096292844868608">"Mreža je zaključana"</string>
<string name="keyguard_missing_sim_message_short" msgid="685029586173458728">"Nema SIM-a"</string>
<string name="keyguard_permanent_disabled_sim_message_short" msgid="3955052454216046100">"Neupotrebljiv SIM."</string>
diff --git a/packages/SystemUI/res-keyguard/values-kn/strings.xml b/packages/SystemUI/res-keyguard/values-kn/strings.xml
index 7560621d382c..55d9374f341f 100644
--- a/packages/SystemUI/res-keyguard/values-kn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-kn/strings.xml
@@ -23,7 +23,7 @@
<string name="keyguard_enter_your_pin" msgid="5429932527814874032">"ನಿಮ್ಮ ಪಿನ್ ನಮೂದಿಸಿ"</string>
<string name="keyguard_enter_pin" msgid="8114529922480276834">"ಪಿನ್ ನಮೂದಿಸಿ"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"ನಿಮ್ಮ ಪ್ಯಾಟರ್ನ್ ನಮೂದಿಸಿ"</string>
- <string name="keyguard_enter_pattern" msgid="7616595160901084119">"ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಬಿಡಿಸಿ"</string>
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಬರೆಯಿರಿ"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ"</string>
<string name="keyguard_enter_password" msgid="6483623792371009758">"ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"ಅಮಾನ್ಯ ಕಾರ್ಡ್."</string>
diff --git a/packages/SystemUI/res/layout/battery_status_chip.xml b/packages/SystemUI/res/layout/battery_status_chip.xml
index 74371839e247..7399651d4248 100644
--- a/packages/SystemUI/res/layout/battery_status_chip.xml
+++ b/packages/SystemUI/res/layout/battery_status_chip.xml
@@ -24,21 +24,13 @@
<LinearLayout
android:id="@+id/rounded_container"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:minHeight="@dimen/ongoing_appops_chip_height"
- android:layout_gravity="center"
- android:background="@drawable/statusbar_chip_bg"
- android:clipToOutline="true"
- android:gravity="center"
- android:maxWidth="@dimen/ongoing_appops_chip_max_width"
- android:minWidth="@dimen/ongoing_appops_chip_min_width">
+ style="@style/StatusBar.EventChip">
<com.android.systemui.battery.BatteryMeterView
android:id="@+id/battery_meter_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginHorizontal="10dp" />
+ android:layout_marginHorizontal="@dimen/ongoing_appops_chip_content_horizontal_margin" />
</LinearLayout>
</merge> \ No newline at end of file
diff --git a/packages/SystemUI/res/layout/bindable_status_bar_compose_icon.xml b/packages/SystemUI/res/layout/bindable_status_bar_compose_icon.xml
new file mode 100644
index 000000000000..fa9318bc151c
--- /dev/null
+++ b/packages/SystemUI/res/layout/bindable_status_bar_compose_icon.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ ~ Copyright (C) 2023 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<!-- Base layout that provides a single bindable compose view -->
+<com.android.systemui.statusbar.pipeline.shared.ui.view.SingleBindableStatusBarComposeIconView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical"
+ >
+
+ <androidx.compose.ui.platform.ComposeView
+ android:id="@+id/compose_view"
+ android:layout_height="@dimen/status_bar_bindable_icon_size"
+ android:layout_width="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:padding="4sp"
+ />
+
+</com.android.systemui.statusbar.pipeline.shared.ui.view.SingleBindableStatusBarComposeIconView>
diff --git a/packages/SystemUI/res/layout/magic_action_button.xml b/packages/SystemUI/res/layout/magic_action_button.xml
index 82d8d7043ff0..381d6b17dec5 100644
--- a/packages/SystemUI/res/layout/magic_action_button.xml
+++ b/packages/SystemUI/res/layout/magic_action_button.xml
@@ -1,4 +1,5 @@
-<Button xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.systemui.statusbar.notification.row.MagicActionButton
+ xmlns:android="http://schemas.android.com/apk/res/android"
style="@android:style/Widget.Material.Button"
android:layout_width="wrap_content"
android:layout_height="@dimen/magic_action_button_touch_target_height"
diff --git a/packages/SystemUI/res/layout/promoted_notification_info.xml b/packages/SystemUI/res/layout/promoted_notification_info.xml
index 5d170a98a806..2e0a0ca1185c 100644
--- a/packages/SystemUI/res/layout/promoted_notification_info.xml
+++ b/packages/SystemUI/res/layout/promoted_notification_info.xml
@@ -323,31 +323,43 @@ asked for it -->
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="60dp"
+ android:layout_marginTop="@dimen/notification_importance_button_separation"
android:gravity="center_vertical"
- android:paddingStart="4dp"
- android:paddingEnd="4dp"
+ android:background="@drawable/rounded_corners"
+ android:backgroundTint="@androidprv:color/materialColorPrimaryContainer"
>
<TextView
- android:id="@+id/promoted_demote"
- android:text="@string/notification_inline_disable_promotion"
- android:layout_width="wrap_content"
+ android:id="@+id/promoted_explain_title"
+ android:text="@string/live_notifications_title"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:gravity="start|center_vertical"
- android:minWidth="@dimen/notification_importance_toggle_size"
- android:minHeight="@dimen/notification_importance_toggle_size"
- android:maxWidth="200dp"
+ android:padding="16dp"
+ android:color="@androidprv:color/materialColorOnPrimary"
style="@style/TextAppearance.NotificationInfo.Button"/>
<TextView
- android:id="@+id/promoted_dismiss"
- android:text="@string/notification_inline_dismiss"
+ android:id="@+id/promoted_explain"
+ android:text="@string/live_notifications_desc"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/promoted_explain_title"
+ android:gravity="start|center_vertical"
+ android:maxWidth="200dp"
+ android:padding="16dp"
+ style="@style/TextAppearance.NotificationImportanceDetail"/>
+ <TextView
+ android:id="@+id/promoted_demote"
+ android:text="@string/notification_inline_disable_promotion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_below="@id/promoted_explain"
android:layout_alignParentEnd="true"
- android:gravity="end|center_vertical"
+ android:padding="16dp"
+ android:gravity="start|center_vertical"
android:minWidth="@dimen/notification_importance_toggle_size"
android:minHeight="@dimen/notification_importance_toggle_size"
- android:maxWidth="125dp"
+ android:maxWidth="200dp"
style="@style/TextAppearance.NotificationInfo.Button"/>
</RelativeLayout>
diff --git a/packages/SystemUI/res/layout/status_bar_event_chip_compose.xml b/packages/SystemUI/res/layout/status_bar_event_chip_compose.xml
new file mode 100644
index 000000000000..ff96ab15cd15
--- /dev/null
+++ b/packages/SystemUI/res/layout/status_bar_event_chip_compose.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ ~ Copyright (C) 2025 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT 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"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_gravity="center_vertical|end">
+
+ <LinearLayout
+ android:id="@+id/rounded_container"
+ style="@style/StatusBar.EventChip">
+
+ <!-- Stub for the composable -->
+ <androidx.compose.ui.platform.ComposeView
+ android:id="@+id/compose_view"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginHorizontal="@dimen/ongoing_appops_chip_content_horizontal_margin" />
+
+ </LinearLayout>
+</merge>
diff --git a/packages/SystemUI/res/layout/volume_dialog.xml b/packages/SystemUI/res/layout/volume_dialog.xml
index 8ad99abccdfe..889aefed0c5c 100644
--- a/packages/SystemUI/res/layout/volume_dialog.xml
+++ b/packages/SystemUI/res/layout/volume_dialog.xml
@@ -14,7 +14,6 @@
limitations under the License.
-->
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/volume_dialog"
android:layout_width="match_parent"
@@ -30,42 +29,47 @@
android:layout_marginTop="@dimen/volume_dialog_background_top_margin"
android:layout_marginBottom="@dimen/volume_dialog_background_vertical_margin"
android:background="@drawable/volume_dialog_background"
- app:layout_constraintBottom_toBottomOf="@id/volume_dialog_settings"
+ app:layout_constraintBottom_toBottomOf="@id/volume_dialog_bottom_section_container"
app:layout_constraintEnd_toEndOf="@id/volume_dialog_main_slider_container"
app:layout_constraintStart_toStartOf="@id/volume_dialog_main_slider_container"
app:layout_constraintTop_toTopOf="@id/volume_dialog_main_slider_container" />
- <include
- android:id="@id/volume_ringer_drawer"
- layout="@layout/volume_ringer_drawer"
+ <FrameLayout
+ android:id="@+id/volume_dialog_top_section_container"
android:layout_width="0dp"
android:layout_height="0dp"
- android:layout_marginEnd="@dimen/volume_dialog_ringer_drawer_diff_end_margin"
android:layout_marginBottom="@dimen/volume_dialog_components_spacing"
+ android:clipChildren="false"
app:layout_constraintBottom_toTopOf="@id/volume_dialog_main_slider_container"
app:layout_constraintEnd_toEndOf="@id/volume_dialog_main_slider_container"
+ app:layout_constraintHeight_default="spread"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintWidth_default="spread">
+
+ <include layout="@layout/volume_dialog_top_section" />
+ </FrameLayout>
<include
android:id="@+id/volume_dialog_main_slider_container"
layout="@layout/volume_dialog_slider" />
- <ImageButton
- android:id="@+id/volume_dialog_settings"
- android:layout_width="@dimen/volume_dialog_button_size"
- android:layout_height="@dimen/volume_dialog_button_size"
+ <FrameLayout
+ android:id="@+id/volume_dialog_bottom_section_container"
+ android:layout_width="0dp"
+ android:layout_height="0dp"
android:layout_marginTop="@dimen/volume_dialog_components_spacing"
- android:background="@drawable/ripple_drawable_20dp"
- android:contentDescription="@string/accessibility_volume_settings"
- android:scaleType="centerInside"
- android:soundEffectsEnabled="false"
- android:tint="@androidprv:color/materialColorPrimary"
+ android:clipChildren="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/volume_dialog_main_slider_container"
+ app:layout_constraintHeight_default="wrap"
app:layout_constraintStart_toStartOf="@id/volume_dialog_main_slider_container"
app:layout_constraintTop_toBottomOf="@id/volume_dialog_main_slider_container"
- app:layout_constraintVertical_bias="0" />
+ app:layout_constraintVertical_bias="0"
+ app:layout_constraintWidth_default="wrap">
+
+ <include layout="@layout/volume_dialog_bottom_section" />
+ </FrameLayout>
<LinearLayout
android:id="@+id/volume_dialog_floating_sliders_container"
diff --git a/packages/SystemUI/res/layout/volume_dialog_bottom_section.xml b/packages/SystemUI/res/layout/volume_dialog_bottom_section.xml
new file mode 100644
index 000000000000..b94c430e011c
--- /dev/null
+++ b/packages/SystemUI/res/layout/volume_dialog_bottom_section.xml
@@ -0,0 +1,26 @@
+<!--
+ Copyright (C) 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ android:id="@+id/volume_dialog_settings"
+ android:layout_width="@dimen/volume_dialog_button_size"
+ android:layout_height="@dimen/volume_dialog_button_size"
+ android:layout_gravity="center"
+ android:background="@drawable/ripple_drawable_20dp"
+ android:contentDescription="@string/accessibility_volume_settings"
+ android:scaleType="centerInside"
+ android:soundEffectsEnabled="false"
+ android:tint="@androidprv:color/materialColorPrimary" /> \ No newline at end of file
diff --git a/packages/SystemUI/res/layout/volume_ringer_drawer.xml b/packages/SystemUI/res/layout/volume_dialog_top_section.xml
index 8f51dbca2774..4fc20e218c5e 100644
--- a/packages/SystemUI/res/layout/volume_ringer_drawer.xml
+++ b/packages/SystemUI/res/layout/volume_dialog_top_section.xml
@@ -23,16 +23,17 @@
android:clipToPadding="false"
android:gravity="center"
android:layoutDirection="ltr"
+ android:paddingEnd="@dimen/volume_dialog_ringer_drawer_diff_end_margin"
app:layoutDescription="@xml/volume_dialog_ringer_drawer_motion_scene">
<View
android:id="@+id/ringer_buttons_background"
android:layout_width="@dimen/volume_dialog_width"
android:layout_height="0dp"
- android:visibility="gone"
android:layout_marginTop="@dimen/volume_dialog_background_vertical_margin"
android:layout_marginBottom="@dimen/volume_dialog_background_vertical_margin"
- android:background="@drawable/volume_dialog_ringer_background" />
+ android:background="@drawable/volume_dialog_ringer_background"
+ android:visibility="gone" />
<!-- add ringer buttons here -->
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index e1ad98fe6aab..b8b69b6ea992 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Batterypersentasie is onbekend."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Gekoppel aan <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Gekoppel aan <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Vou groep uit."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Maak app oop."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nie gekoppel nie."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Swerwing"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Af"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Verken sentrummodus"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Kry toegang tot jou gunstelinglegstukke en -skermbeskermers terwyl jy laai."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Kom ons begin"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Wys jou gunstelingsluimerskerms tydens die laaiproses"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Wissel gebruiker"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"aftrekkieslys"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alle programme en data in hierdie sessie sal uitgevee word."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Word aan die bokant van gesprekskennisgewings en as \'n profielfoto op sluitskerm gewys, verskyn as \'n borrel, onderbreek Moenie Steur Nie"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioriteit"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> steun nie gesprekskenmerke nie"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Terugvoer"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Maak toe"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Moenie weer wys nie"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Hierdie kennisgewings kan nie gewysig word nie."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Gebruik vingerafdruk om oop te maak"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Stawing word vereis. Raak die vingerafdruksensor om te staaf."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Oproep aan die gang"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Nog besig"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiele data"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Gekoppel"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Tydelik gekoppel"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Voubare toestel word ontvou"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Voubare toestel word omgekeer"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Voorste skerm is aangeskakel"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"gevou"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"oopgevou"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index feee18ff7219..c89ea75ad4cd 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"የባትሪ መቶኛ አይታወቅም።"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"ከ<xliff:g id="BLUETOOTH">%s</xliff:g> ጋር ተገናኝቷል።"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"ከ<xliff:g id="CAST">%s</xliff:g> ጋር ተገናኝቷል።"</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"ቡድንን ዘርጋ።"</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"መተግበሪያ ክፈት።"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"አልተገናኘም።"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"በማዛወር ላይ"</string>
<string name="cell_data_off" msgid="4886198950247099526">"ጠፍቷል"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"የመገናኛ ሁነታን ያስሱ"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"ኃይል በሚሞሉበት ወቅት የእርስዎን ተወዳጅ ምግብሮች እና ማያ ገፅ ቆጣቢዎችን ይድረሱ።"</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"እንሂድ"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"ኃይል በሚሞሉበት ጊዜ ተወዳጅ የገፀ ማያ አሳራፊዎችዎን ያሳዩ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ተጠቃሚ ቀይር"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ወደታች ተጎታች ምናሌ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"በዚህ ክፍለ-ጊዜ ውስጥ ያሉ ሁሉም መተግበሪያዎች እና ውሂብ ይሰረዛሉ።"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"በውይይት ማሳወቂያዎች አናት ላይ እና በማያ ገፅ መቆለፊያ ላይ እንደ መገለጫ ምስል ይታያል፣ እንደ አረፋ ሆኖ ይታያል፣ አትረብሽን ያቋርጣል"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ቅድሚያ"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> የውይይት ባህሪያትን አይደግፍም"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ግብረመልስ"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"አሰናብት"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"ዳግም አታሳይ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"እነዚህ ማሳወቂያዎች ሊሻሻሉ አይችሉም።"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ለመክፈት የጣት አሻራ ይጠቀሙ"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"ማረጋገጥ ያስፈልጋል። ለማረጋገጥ የጣት አሻራ ዳሳሹን ይንኩ።"</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"እየተካሄደ ያለ ጥሪ"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"በመካሄድ ላይ ያለ"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"የተንቀሳቃሽ ስልክ ውሂብ"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"ተገናኝቷል"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"በጊዜያዊነት ተገናኝቷል"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"መታጠፍ የሚችል መሣሪያ እየተዘረጋ ነው"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"መታጠፍ የሚችል መሣሪያ እየተገለበጠ ነው"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"የፊት ለፊት ማያ ገፅ በርቷል"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"የታጠፈ"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"የተዘረጋ"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 31bbbb63f7ef..962f1c954a31 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"نسبة شحن البطارية غير معروفة."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"متصل بـ <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"تم الاتصال بـ <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"سيتم توسيع المجموعة."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"سيتم فتح التطبيق."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"غير متصل."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"التجوال"</string>
<string name="cell_data_off" msgid="4886198950247099526">"غير مفعّلة"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"التعرُّف على \"وضع الإرساء\""</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"يمكنك الاطّلاع على التطبيقات المصغّرة وشاشات الاستراحة المفضَّلة لديك أثناء شحن الجهاز."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"لنبدأ"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"سيتم عرض شاشات الاستراحة المفضَّلة أثناء شحن الجهاز"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"تبديل المستخدم"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"القائمة المنسدلة"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"سيتم حذف كل التطبيقات والبيانات في هذه الجلسة."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"تظهر في أعلى إشعارات المحادثات وكصورة ملف شخصي على شاشة القفل وتظهر على شكل فقاعة لمقاطعة ميزة \"عدم الإزعاج\"."</string>
<string name="notification_priority_title" msgid="2079708866333537093">"الأولوية"</string>
<string name="no_shortcut" msgid="8257177117568230126">"لا يدعم تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> ميزات المحادثات."</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"الملاحظات"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"إغلاق"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"عدم الإظهار مرة أخرى"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"يتعذّر تعديل هذه الإشعارات."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"يمكنك استخدام بصمة الإصبع للفتح"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"المصادقة مطلوبة. المس مستشعر بصمات الإصبع للمصادقة."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"مكالمة جارية"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"مستمر"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"بيانات الجوّال"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"متصلة بالإنترنت"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"متصلة مؤقتًا"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"جهاز قابل للطي يجري فتحه"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"جهاز قابل للطي يجري قلبه"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"تم تفعيل الشاشة الأمامية"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"مطوي"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"غير مطوي"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"‫%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index 7d7e4f759bb7..b88e9e97fae1 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"বাৰ্তালাপৰ জাননীৰ শীৰ্ষত আৰু প্ৰ’ফাইল চিত্ৰ হিচাপে লক স্ক্ৰীনত দেখুৱায়, এটা বাবল হিচাপে দেখা পোৱা যায়, অসুবিধা নিদিব ম’ডত ব্যাঘাত জন্মায়"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"অগ্ৰাধিকাৰ"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ বাৰ্তালাপৰ সুবিধাসমূহ সমৰ্থন নকৰে"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"মতামত"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"অগ্ৰাহ্য কৰক"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"পুনৰাই নেদেখুৱাব"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"এই জাননীসমূহ সংশোধন কৰিব নোৱাৰি।"</string>
@@ -1395,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"জপাব পৰা ডিভাইচৰ জাপ খুলি থকা হৈছে"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"জপাব পৰা ডিভাইচৰ ওলোটাই থকা হৈছে"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"সন্মুখৰ স্ক্ৰীনখন অন কৰা হৈছে"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"ফ’ল্ড কৰা"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"আনফ’ল্ড কৰা"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 2551d9cfafa0..e629969acd10 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Batareyanın faizi naməlumdur."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> üzərindən qoşuldu."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> cihazına qoşulub."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Qrupu genişləndirin."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Tətbiqi açın."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Qoşulu deyil."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Rouminq"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Deaktiv"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Hab rejimini araşdırın"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Şarj edərkən sevimli vidcet və ekran qoruyucularınıza daxil olun."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Başlayaq"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Şarj edilərkən sevimli ekran qoruyucularınızı göstərin"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"aşağı çəkilən menyu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Bu sessiyada bütün tətbiqlər və data silinəcək."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Söhbət bildirişlərinin yuxarısında və kilid ekranında profil şəkli kimi göstərilir, baloncuq kimi görünür, Narahat Etməyin rejimini kəsir"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> söhbət funksiyalarını dəstəkləmir"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Rəy"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Rədd edin"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Yenidən göstərməyin"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirişlər dəyişdirilə bilməz."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Açmaq üçün barmaq izindən istifadə edin"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Doğrulanma tələb olunur. Doğrulamaq üçün barmaq izi sensoruna toxunun."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Davam edən zəng"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Davam edir"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobil data"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Qoşulub"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Müvəqqəti qoşulub"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Qatlana bilən cihaz açılır"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Qatlana bilən cihaz fırladılır"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Ön ekran aktiv edildi"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"qatlanmış"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"açıq"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index b01d83736dc0..1970144f74c6 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -109,14 +109,14 @@
<string name="screenrecord_title" msgid="4257171601439507792">"Snimač ekrana"</string>
<string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Obrađujemo video snimka ekrana"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Obaveštenje o sesiji snimanja ekrana je aktivno"</string>
- <string name="screenrecord_permission_dialog_title" msgid="7415261783188749730">"Želite da snimite ekran?"</string>
- <string name="screenrecord_permission_dialog_option_text_single_app" msgid="1996450687814647583">"Snimi jednu aplikaciju"</string>
+ <string name="screenrecord_permission_dialog_title" msgid="7415261783188749730">"Želite da snimate ekran?"</string>
+ <string name="screenrecord_permission_dialog_option_text_single_app" msgid="1996450687814647583">"Snimaj jednu aplikaciju"</string>
<string name="screenrecord_permission_dialog_option_text_entire_screen" msgid="4882406311415082016">"Snimi ovaj ekran"</string>
<string name="screenrecord_permission_dialog_option_text_entire_screen_for_display" msgid="4169494703993148253">"Snimi %s"</string>
<string name="screenrecord_permission_dialog_warning_entire_screen" msgid="1321758636709366068">"Kada snimate ceo ekran, snima se sve što je na njemu. Zato pazite na lozinke, informacije o plaćanju, poruke, slike, audio i video sadržaj."</string>
<string name="screenrecord_permission_dialog_warning_single_app" msgid="3738199712880063924">"Kada snimate aplikaciju, snima se sav sadržaj koji se prikazuje ili pušta u njoj. Zato pazite na lozinke, informacije o plaćanju, poruke, slike, audio i video sadržaj."</string>
<string name="screenrecord_permission_dialog_continue_entire_screen" msgid="5557974446773486600">"Snimi ekran"</string>
- <string name="screenrecord_app_selector_title" msgid="3854492366333954736">"Odaberite aplikaciju koju želite da snimite"</string>
+ <string name="screenrecord_app_selector_title" msgid="3854492366333954736">"Odaberite aplikaciju za snimanje"</string>
<string name="screenrecord_audio_label" msgid="6183558856175159629">"Snimaj zvuk"</string>
<string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Zvuk uređaja"</string>
<string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Zvuk sa uređaja, na primer, muzika, pozivi i melodije zvona"</string>
@@ -573,7 +573,7 @@
<string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Kada delite aplikaciju, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> vidi sav sadržaj koji se prikazuje ili pušta u njoj. Zato pazite na lozinke, informacije o plaćanju, poruke, slike, audio i video sadržaj."</string>
<string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Deli ekran"</string>
<string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> je onemogućila ovu opciju"</string>
- <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Odaberite aplikaciju koju želite da delite"</string>
+ <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Odaberite aplikaciju za deljenje"</string>
<string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Želite da prebacite ekran?"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Prebaci jednu aplikaciju"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_entire_screen" msgid="8389508187954155307">"Prebaci ceo ekran"</string>
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Prikazuje se u vrhu obaveštenja o konverzacijama i kao slika profila na zaključanom ekranu, pojavljuje se kao oblačić, prekida režim Ne uznemiravaj"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritetno"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ne podržava funkcije konverzacije"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Povratne informacije"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Odbaci"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Ne prikazuj ponovo"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ova obaveštenja ne mogu da se menjaju."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Uređaj na preklop se otvara"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Uređaj na preklop se obrće"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Prednji ekran je uključen"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Prevucite da biste koristili unutrašnji ekran"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"zatvoreno"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"otvoreno"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 8f1af5f6e944..afbac9f8be09 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"З’яўляецца ўверсе раздзела размоў як усплывальнае апавяшчэнне, якое перарывае рэжым \"Не турбаваць\" і паказвае на экране блакіроўкі відарыс профілю"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Прыярытэт"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> не падтрымлівае функцыі размовы"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Водгук"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Закрыць"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Больш не паказваць"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Гэтыя апавяшчэнні нельга змяніць."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Складная прылада ў раскладзеным выглядзе"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Перавернутая складная прылада"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Пярэдні экран уключаны"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Правядзіце пальцам, каб выкарыстоўваць унутраны экран"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"складзена"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"раскладзена"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 353815293907..77542de3bec9 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Процентът на батерията е неизвестен."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Има връзка с <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Установена е връзка с/ъс <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Разгъване на групата."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Отваряне на приложението."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Няма връзка."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роуминг"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Изключени"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Разглеждане на режима „Контролен център“"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Използвайте любимите си приспособления и скрийнсейвъри по време на зареждане."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Начало"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Показване на любимите ви скрийнсейвъри при зареждане"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Превключване между потребителите"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"падащо меню"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Всички приложения и данни в тази сесия ще бъдат изтрити."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Показва се в горната част на известията за разговори и като снимка на потребителския профил на заключения екран, изглежда като балонче, прекъсва режима „Не безпокойте“"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Приоритет"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> не поддържа функциите за разговор"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Отзиви"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Отхвърляне"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Да не се показва отново"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Тези известия не могат да бъдат променяни."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Използвайте отпечатък за отваряне"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Изисква се удостоверяване на самоличността. За целта докоснете сензора за отпечатъци."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Текущо обаждане"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Текуща активност"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобилни данни"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Свързано"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Установена е временна връзка"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Разгъване на сгъваемо устройство"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Обръщане на сгъваемо устройство"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Предният екран е включен"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"затворено"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"отворено"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 4d885942e779..6bd1e0c0fc71 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"ব্যাটারি কত শতাংশ আছে তা জানা যায়নি।"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>এ সংযুক্ত হয়ে আছে।"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> এর সাথে সংযুক্ত৷"</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"গ্রুপ বড় করুন।"</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"অ্যাপ্লিকেশন খুলুন।"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"সংযুক্ত নয়৷"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"রোমিং"</string>
<string name="cell_data_off" msgid="4886198950247099526">"বন্ধ"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"হাব মোড ঘুরে দেখুন"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"চার্জ করার সময় আপনার পছন্দের উইজেট এবং স্ক্রিন সেভার অ্যাক্সেস করুন।"</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"শুরু করা যাক"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"চার্জিংয়ের সময় আপনার পছন্দের স্ক্রিন সেভার দেখুন"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ব্যবহারকারী পাল্টে দিন"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"পুলডাউন মেনু"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"এই সেশনের সব অ্যাপ ও ডেটা মুছে ফেলা হবে।"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"কথোপকথনের বিজ্ঞপ্তির উপরের দিকে এবং প্রোফাইল ছবি হিসেবে লক স্ক্রিনে দেখানো হয়, বাবল হিসেবেও এটি দেখা যায় এবং এর ফলে \'বিরক্ত করবে না\' মোডে কাজ করতে অসুবিধা হয়"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"অগ্রাধিকার"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এ কথোপকথন ফিচার কাজ করে না"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"মতামত"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"বাতিল করুন"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"আর দেখতে চাই না"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"এই বিজ্ঞপ্তিগুলি পরিবর্তন করা যাবে না।"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"খুলতে ফিঙ্গারপ্রিন্ট ব্যবহার করুন"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"যাচাইকরণ করতে হবে। যাচাইকরণ করতে আঙুলের ছাপের সেন্সরে টাচ করুন।"</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"চালু থাকা কল"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"চলছে"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"মোবাইল ডেটা"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"কানেক্ট করা আছে"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"সাময়িকভাবে কানেক্ট করা হয়েছে"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"ফোল্ড করা যায় এমন ডিভাইস খোলা হচ্ছে"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"ফোল্ড করা যায় এমন ডিভাইস উল্টানো হচ্ছে"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"ফ্রন্ট স্ক্রিন চালু আছে"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"ফোল্ড করা রয়েছে"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"ফোল্ড করা নেই"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index 9e86aa96bab5..4ccc38ad8572 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -250,8 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Postotak napunjenosti baterije nije poznat"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Povezan na <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Povezan na <xliff:g id="CAST">%s</xliff:g>."</string>
- <string name="accessibility_expand_group" msgid="521237935987978624">"Proširite grupu."</string>
- <string name="accessibility_open_application" msgid="1749126077501259712">"Otvorite aplikaciju."</string>
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Proširivanje grupe."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Otvaranje aplikacije."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nije povezano."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Isključeno"</string>
@@ -541,7 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Istražite način rada središta"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Pristupajte svojim omiljenim vidžetima i čuvarima ekrana tokom punjenja."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Započnimo"</string>
- <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Prikaz vaših omiljenih čuvara zaslona tijekom punjenja"</string>
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Prikaz vaših omiljenih čuvara ekrana tokom punjenja"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Zamijeni korisnika"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"padajući meni"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Sve aplikacije i podaci iz ove sesije će se izbrisati."</string>
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Prikazuje se na vrhu obavještenja u razgovorima i kao slika profila na zaključanom ekranu, izgleda kao oblačić, prekida funkciju Ne ometaj"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritetno"</string>
<string name="no_shortcut" msgid="8257177117568230126">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> ne podržava funkcije razgovora"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Povratne informacije"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Odbaci"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Ne prikazuj ponovo"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ta obavještenja se ne mogu izmijeniti."</string>
@@ -1305,7 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Otvorite pomoću otiska prsta"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Potrebna je autentifikacija. Dodirnite senzor za otisak prsta da autentificirate."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Poziv u toku"</string>
- <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"U tijeku"</string>
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"U toku"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Prijenos podataka na mobilnoj mreži"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Povezano"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Privremeno povezano"</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Sklopivi uređaj se rasklapa"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Sklopivi uređaj se obrće"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Prednji ekran je uključen"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Kliznite za upotrebu unutarnjeg zaslona"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"sklopljeno"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"otklopljeno"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 25b236de53a0..80558a92194c 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Es desconeix el percentatge de bateria."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"S\'ha connectat a <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Està connectat amb <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Desplega el grup."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Obre l\'aplicació."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Sense connexió."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Itinerància"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Desactivades"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Explora el mode Hub"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Accedeix als teus widgets i estalvis de pantalla preferits mentre es carrega."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Som-hi"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Mostra els teus estalvis de pantalla preferits durant la càrrega"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Canvia d\'usuari"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menú desplegable"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Totes les aplicacions i les dades d\'aquesta sessió se suprimiran."</string>
@@ -573,7 +570,7 @@
<!-- no translation found for media_projection_entry_app_permission_dialog_option_text_entire_screen (5100078808078139706) -->
<skip />
<string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="5504288438067851086">"Quan comparteixes tota la pantalla, qualsevol cosa que es mostra en pantalla és visible a <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges, les fotos i l\'àudio i el vídeo."</string>
- <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Quan comparteixes una aplicació, qualsevol cosa que es mostra o que es reprodueix en aquesta aplicació és visible a <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges, les fotos i l\'àudio i el vídeo."</string>
+ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Quan comparteixes una aplicació, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> pot veure qualsevol cosa que s\'hi mostra o que s\'hi reprodueix. Per aquest motiu, ves amb compte amb les contrasenyes, les dades de pagament, els missatges, les fotos i l\'àudio i el vídeo."</string>
<string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Comparteix la pantalla"</string>
<string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ha desactivat aquesta opció"</string>
<string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Tria una aplicació per compartir"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Es mostra a la part superior de les notificacions de les converses i com a foto de perfil a la pantalla de bloqueig, apareix com una bombolla, interromp el mode No molestis"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritat"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> no admet les funcions de converses"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Suggeriments"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Ignora"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"No ho tornis a mostrar"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Aquestes notificacions no es poden modificar."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Utilitza l\'empremta digital per obrir"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autenticació necessària. Toca el sensor d\'empremtes digitals per autenticar-te."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Trucada en curs"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"En curs"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Dades mòbils"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Connectat"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Connexió temporal"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Dispositiu plegable desplegant-se"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Dispositiu plegable girant"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"La pantalla frontal està activada"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"plegat"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"desplegat"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 26105c70ba2e..ee321074a250 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Procento baterie není známé."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Připojeno k zařízení <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Jste připojeni k zařízení <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Rozbalit skupinu."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Otevřít aplikaci."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nepřipojeno."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Vypnuto"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Prozkoumejte Režim centra"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Mějte po ruce oblíbené widgety a spořiče obrazovky při nabíjení."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Jdeme na to"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Během nabíjení zobrazovat oblíbené spořiče obrazovky"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Přepnout uživatele"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rozbalovací nabídka"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Veškeré aplikace a data v této relaci budou vymazána."</string>
@@ -573,7 +570,7 @@
<!-- no translation found for media_projection_entry_app_permission_dialog_option_text_entire_screen (5100078808078139706) -->
<skip />
<string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="5504288438067851086">"Při sdílení celé obrazovky vidí aplikace <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> vše, co se na obrazovce nachází nebo děje. Buďte proto opatrní, když jde o hesla, platební údaje, zprávy, fotografie, zvuk a video."</string>
- <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Při sdílení aplikace vidí aplikace <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> vše, co se ve sdílené aplikaci nachází nebo děje. Buďte proto opatrní, když jde o hesla, platební údaje, zprávy, fotografie, zvuk a video."</string>
+ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Při sdílení aplikace vidí <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> vše, co se ve sdílené aplikaci nachází nebo děje. Buďte proto opatrní, když jde o hesla, platební údaje, zprávy, fotografie, zvuk a video."</string>
<string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Sdílet obrazovku"</string>
<string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> tuto možnost zakázala"</string>
<string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Vyberte aplikaci ke sdílení"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Zobrazuje se v horní části sekce konverzací a na obrazovce uzamčení se objevuje jako profilová fotka, má podobu bubliny a deaktivuje režim Nerušit"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritní"</string>
<string name="no_shortcut" msgid="8257177117568230126">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> funkce konverzace nepodporuje"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Zpětná vazba"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Zavřít"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Už nezobrazovat"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Tato oznámení nelze upravit."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"K otevření použijte otisk prstu"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Je vyžadováno ověření. Dotkněte se snímače otisků prstů."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Probíhající hovor"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Probíhá"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilní data"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Připojeno"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Dočasně připojeno"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Rozkládání rozkládacího zařízení"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Otáčení rozkládacího zařízení"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Přední obrazovka je zapnutá"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"složené"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"rozložené"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 2fe576f53f54..323b9d884ad5 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Vises øverst i samtalenotifikationer og som et profilbillede på låseskærmen. Vises som en boble, der afbryder Forstyr ikke"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> understøtter ikke samtalefunktioner"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Luk"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Vis ikke igen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Disse notifikationer kan ikke redigeres."</string>
@@ -1395,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Foldbar enhed foldes ud"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Foldbar enhed vendes om"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Frontskærmen er aktiveret"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"foldet"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"foldet ud"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 68f3a4101128..3c8be75f894b 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -142,7 +142,7 @@
<string name="share_to_app_stop_dialog_title_generic" msgid="9079161538135843648">"Teilen beenden?"</string>
<string name="share_to_app_stop_dialog_message_entire_screen_with_host_app" msgid="522823522115375414">"Du teilst momentan deinen gesamten Bildschirm mit der App <xliff:g id="HOST_APP_NAME">%1$s</xliff:g>"</string>
<string name="share_to_app_stop_dialog_message_entire_screen" msgid="5090115386271179270">"Du teilst momentan deinen gesamten Bildschirm mit einer App"</string>
- <string name="share_to_app_stop_dialog_message_single_app_specific" msgid="5923772039347985172">"Du teilst momentan die App <xliff:g id="APP_BEING_SHARED_NAME">%1$s</xliff:g>"</string>
+ <string name="share_to_app_stop_dialog_message_single_app_specific" msgid="5923772039347985172">"Du teilst momentan <xliff:g id="APP_BEING_SHARED_NAME">%1$s</xliff:g>"</string>
<string name="share_to_app_stop_dialog_message_single_app_generic" msgid="6681016774654578261">"Du teilst momentan Inhalte einer App"</string>
<string name="share_to_app_stop_dialog_message_generic" msgid="7622174291691249392">"Du teilst momentan Inhalte mit einer App"</string>
<string name="share_to_app_stop_dialog_button" msgid="6334056916284230217">"Freigabe beenden"</string>
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Akkustand unbekannt."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Mit <xliff:g id="BLUETOOTH">%s</xliff:g> verbunden"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Verbunden mit <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Gruppe erweitern."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Anwendung öffnen."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nicht verbunden"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Aus"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Hub-Modus entdecken"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Du kannst während des Ladevorgangs auf deine bevorzugten Widgets und Bildschirmschoner zugreifen."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Los gehts"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Beim Laden deine bevorzugten Bildschirmschoner anzeigen"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Nutzer wechseln"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"Pull-down-Menü"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alle Apps und Daten in dieser Sitzung werden gelöscht."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Wird oben im Bereich „Unterhaltungen“ sowie als Profilbild auf dem Sperrbildschirm angezeigt, erscheint als Bubble, unterbricht „Bitte nicht stören“"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Priorität"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> unterstützt keine Funktionen für Unterhaltungen"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Schließen"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Nicht mehr anzeigen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Diese Benachrichtigungen können nicht geändert werden."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Mit Fingerabdruck öffnen"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentifizierung erforderlich. Tippe dazu einfach auf den Fingerabdrucksensor."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Aktiver Anruf"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Aktiv"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile Daten"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Verbunden"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Vorübergehend verbunden"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Faltbares Gerät wird geöffnet"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Faltbares Gerät wird umgeklappt"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Frontdisplay aktiviert"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"zugeklappt"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"aufgeklappt"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 412e3156f6c8..470dd2c1f353 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Άγνωστο ποσοστό μπαταρίας."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Συνδέθηκε στο <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Συνδέθηκε σε <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Αναπτύξτε την ομάδα."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Ανοίξτε την εφαρμογή."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Μη συνδεδεμένο"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Περιαγωγή"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Ανενεργά"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Εξερεύνηση της λειτουργίας Hub"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Αποκτήστε πρόσβαση στα αγαπημένα σας γραφικά στοιχεία και τις προφυλάξεις οθόνης κατά τη φόρτιση."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Ας ξεκινήσουμε"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Εμφάνιση αγαπημένων προφυλάξεων οθόνης κατά τη φόρτιση"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Εναλλαγή χρήστη"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"αναπτυσσόμενο μενού"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Όλες οι εφαρμογές και τα δεδομένα αυτής της περιόδου σύνδεσης θα διαγραφούν."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Εμφανίζεται στην κορυφή των ειδοποιήσεων συζήτησης και ως φωτογραφία προφίλ στην οθόνη κλειδώματος, εμφανίζεται ως συννεφάκι, διακόπτει τη λειτουργία Μην ενοχλείτε"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Προτεραιότητα"</string>
<string name="no_shortcut" msgid="8257177117568230126">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> δεν υποστηρίζει τις λειτουργίες συζήτησης"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Σχόλια"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Παράβλεψη"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Να μην εμφανιστεί ξανά"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Δεν είναι δυνατή η τροποποίηση αυτών των ειδοποιήσεων"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Χρήση δακτυλικού αποτυπώματος για άνοιγμα"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Απαιτείται έλεγχος ταυτότητας. Αγγίξτε τον αισθητήρα δακτυλικών αποτυπωμάτων για έλεγχο ταυτότητας."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Κλήση σε εξέλιξη"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Σε εξέλιξη"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Δεδομένα κινητής τηλεφωνίας"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Συνδέθηκε"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Προσωρινή σύνδεση"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Αναδιπλούμενη συσκευή που ξεδιπλώνει"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Αναδιπλούμενη συσκευή που διπλώνει"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Η μπροστινή οθόνη ενεργοποιήθηκε"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"διπλωμένη"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"ξεδιπλωμένη"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index d5c5666d6983..0c161a7493f5 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Battery percentage unknown."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Connected to <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Connected to <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Expand group."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Open application."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Not connected."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Off"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Explore Hub Mode"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Access your favourite widgets and screen savers while charging."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Let\'s go"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Show your favourite screensavers while charging"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"All apps and data in this session will be deleted."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Shows at the top of conversation notifications and as a profile picture on lock screen, appears as a bubble, interrupts Do Not Disturb"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Priority"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> doesn’t support conversation features"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Dismiss"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Don\'t show again"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Use fingerprint to open"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentication required. Touch the fingerprint sensor to authenticate."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Ongoing call"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Ongoing"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Connected"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Temporarily connected"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Foldable device being unfolded"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Foldable device being flipped around"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Front screen turned on"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"folded"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"unfolded"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index b3010e2b7d1a..3a7440bceaa0 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Shows at the top of conversation notifications and as a profile picture on lock screen, appears as a bubble, interrupts Do Not Disturb"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Priority"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> doesn’t support conversation features"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Dismiss"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Don\'t show again"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Foldable device being unfolded"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Foldable device being flipped around"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Front screen turned on"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Slide to use inner screen"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"folded"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"unfolded"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index d5c5666d6983..0c161a7493f5 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Battery percentage unknown."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Connected to <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Connected to <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Expand group."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Open application."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Not connected."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Off"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Explore Hub Mode"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Access your favourite widgets and screen savers while charging."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Let\'s go"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Show your favourite screensavers while charging"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"All apps and data in this session will be deleted."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Shows at the top of conversation notifications and as a profile picture on lock screen, appears as a bubble, interrupts Do Not Disturb"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Priority"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> doesn’t support conversation features"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Dismiss"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Don\'t show again"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Use fingerprint to open"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentication required. Touch the fingerprint sensor to authenticate."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Ongoing call"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Ongoing"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Connected"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Temporarily connected"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Foldable device being unfolded"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Foldable device being flipped around"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Front screen turned on"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"folded"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"unfolded"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index d5c5666d6983..0c161a7493f5 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Battery percentage unknown."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Connected to <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Connected to <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Expand group."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Open application."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Not connected."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Off"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Explore Hub Mode"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Access your favourite widgets and screen savers while charging."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Let\'s go"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Show your favourite screensavers while charging"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"All apps and data in this session will be deleted."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Shows at the top of conversation notifications and as a profile picture on lock screen, appears as a bubble, interrupts Do Not Disturb"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Priority"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> doesn’t support conversation features"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Dismiss"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Don\'t show again"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Use fingerprint to open"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentication required. Touch the fingerprint sensor to authenticate."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Ongoing call"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Ongoing"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobile data"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Connected"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Temporarily connected"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Foldable device being unfolded"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Foldable device being flipped around"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Front screen turned on"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"folded"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"unfolded"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 966c9f36cf3b..dd8f735197b8 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Aparece en forma de burbuja y como foto de perfil en la parte superior de las notificaciones de conversación, en la pantalla de bloqueo, y detiene el modo No interrumpir"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritaria"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> no admite funciones de conversación"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Comentarios"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Descartar"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"No volver a mostrar"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"No se pueden modificar estas notificaciones."</string>
@@ -963,8 +962,8 @@
<string name="right_keycode" msgid="2480715509844798438">"Clave de código derecho"</string>
<string name="left_icon" msgid="5036278531966897006">"Ícono izquierdo"</string>
<string name="right_icon" msgid="1103955040645237425">"Ícono derecho"</string>
- <string name="drag_to_add_tiles" msgid="8933270127508303672">"Mantén presionada la tarjeta y arrástrala para agregarla"</string>
- <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Mantén presionada la tarjeta y arrástrala para reorganizarla"</string>
+ <string name="drag_to_add_tiles" msgid="8933270127508303672">"Mantén presionada una tarjeta y arrástrala para agregarla"</string>
+ <string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Mantén presionada una tarjeta y arrástrala para reubicarla"</string>
<string name="drag_to_remove_tiles" msgid="4682194717573850385">"Arrastra aquí para quitar"</string>
<string name="drag_to_remove_disabled" msgid="933046987838658850">"Necesitas al menos <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> tarjetas"</string>
<string name="qs_edit" msgid="5583565172803472437">"Editar"</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Dispositivo plegable siendo desplegado"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Dispositivo plegable siendo girado"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Pantalla frontal activada"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Desliza para usar la pantalla interior"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"plegado"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"desplegado"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 3c052beeb2b8..a2fcc5c75e1e 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Porcentaje de batería desconocido."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Conectado a <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Conectado a <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Mostrar grupo."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Abrir aplicación."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"No conectado."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Desactivados"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Descubre el modo Base"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Accede a tus widgets y salvapantallas favoritos mientras se carga."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Vamos allá"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Muestra tus salvapantallas favoritos mientras se carga"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Cambiar de usuario"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menú desplegable"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Se eliminarán todas las aplicaciones y datos de esta sesión."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Se muestra encima de las notificaciones de conversaciones y como imagen de perfil en la pantalla de bloqueo, aparece como burbuja e interrumpe el modo No molestar"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioridad"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> no admite funciones de conversación"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Comentarios"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Cerrar"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"No volver a mostrar"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Estas notificaciones no se pueden modificar."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Usa la huella digital para abrir"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autenticación obligatoria. Toca el sensor de huellas digitales para autenticarte."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Llamada en curso"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"En curso"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Datos móviles"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Conectado"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Conectada temporalmente"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Dispositivo plegable desplegándose"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Dispositivo plegable mostrado desde varios ángulos"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Pantalla frontal encendida"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"plegado"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"desplegado"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index defaa77a0935..bca749190858 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -133,7 +133,7 @@
<string name="screenrecord_save_error" msgid="5862648532560118815">"Viga ekraanisalvestise salvestamisel"</string>
<string name="screenrecord_start_error" msgid="2200660692479682368">"Viga ekraanikuva salvestamise alustamisel"</string>
<string name="screenrecord_stop_dialog_title" msgid="8716193661764511095">"Kas peatada salvestamine?"</string>
- <string name="screenrecord_stop_dialog_message" msgid="6262768207331626817">"Salvestate praegu kogu oma ekraanikuva"</string>
+ <string name="screenrecord_stop_dialog_message" msgid="6262768207331626817">"Salvestate praegu kogu oma ekraanikuva."</string>
<string name="screenrecord_stop_dialog_message_specific_app" msgid="5995770227684523244">"Salvestate praegu rakendust <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="screenrecord_stop_dialog_button" msgid="2883812564938194350">"Peata salvestamine"</string>
<string name="share_to_app_chip_accessibility_label" msgid="4210256229976947065">"Ekraani jagamine"</string>
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Kuvatakse mullina vestluste märguannete ülaosas ja profiilipildina lukustuskuval ning katkestab režiimi Mitte segada"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioriteetne"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ei toeta vestlusfunktsioone"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Tagasiside"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Loobu"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Ära enam näita"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Neid märguandeid ei saa muuta."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Volditava seadme lahtivoltimine"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Volditava seadme ümberpööramine"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Esiekraan on sisse lülitatud"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Lohistamine sisemisele ekraanile"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"kokku volditud"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"lahti volditud"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 02da5a1619d2..f447dc6e6c48 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Bateriaren ehunekoa ezezaguna da."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> gailura konektatuta."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Hona konektatuta: <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Zabaldu taldea."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Ireki aplikazioa."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Konektatu gabe."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Ibiltaritza"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Desaktibatuta"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Arakatu kontrol-zentro modua"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Erabili gogoko dituzun widgetak eta pantaila-babesleak gailua kargatu bitartean."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Has gaitezen"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Bistaratu gogoko pantaila-babesleak kargatu bitartean"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Aldatu erabiltzailea"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"zabaldu menua"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Saioko aplikazio eta datu guztiak ezabatuko dira."</string>
@@ -576,7 +573,7 @@
<string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Aplikazio bat partekatzen ari zarenean, aplikazio horretan agertzen den edo bertan erreproduzitzen ari den guztia ikusi dezake <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> aplikazioak. Beraz, kontuz ibili pasahitzekin, ordainketen xehetasunekin, mezuekin, argazkiekin, audioekin eta bideoekin, besteak beste."</string>
<string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Partekatu pantaila"</string>
<string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak aukera desgaitu du"</string>
- <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Aukeratu zer aplikazio partekatu nahi duzun"</string>
+ <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Aukeratu zein aplikazio partekatu nahi duzun"</string>
<string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Pantaila igorri nahi duzu?"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Igorri aplikazio bat"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_entire_screen" msgid="8389508187954155307">"Igorri pantaila osoa"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Elkarrizketen jakinarazpenen goialdean eta profileko argazki gisa agertzen da pantaila blokeatuan, burbuila batean, eta ez molestatzeko modua eteten du"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Lehentasuna"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak ez ditu onartzen elkarrizketetarako eginbideak"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Iritzia"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Baztertu"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Ez erakutsi berriro"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Jakinarazpen horiek ezin dira aldatu."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Erabili hatz-marka irekitzeko"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autentifikazioa behar da. Autentifikatzeko, ukitu hatz-marken sentsorea."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Deia abian"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Abian"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Datu-konexioa"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Konektatuta"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Aldi baterako konektatuta"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Gailu tolesgarria zabaltzen"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Gailu tolesgarria biratzen"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Aurreko pantaila piztuta dago"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"tolestuta"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"tolestu gabe"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 52538971217e..800bf785c339 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"در بالای اعلان‌های مکالمه و به‌صورت عکس نمایه در صفحه قفل نشان داده می‌شود، به‌صورت حبابک ظاهر می‌شود، در حالت «مزاحم نشوید» وقفه ایجاد می‌کند"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"اولویت"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> از ویژگی‌های مکالمه پشتیبانی نمی‌کند"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"بازخورد"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"بستن"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"دیگر نشان داده نشود"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"این اعلان‌ها قابل اصلاح نیستند."</string>
@@ -921,7 +920,7 @@
<string name="group_accessibility_toggle_bounce_keys" msgid="4183584952493519179">"تغییر وضعیت کلیدهای ضدتکرار"</string>
<string name="group_accessibility_toggle_mouse_keys" msgid="534757719357514361">"تغییر وضعیت کلیدهای موشواره"</string>
<string name="group_accessibility_toggle_sticky_keys" msgid="7722214637652104184">"تغییر وضعیت کلیدهای چسبان"</string>
- <string name="group_accessibility_toggle_slow_keys" msgid="8569881436531795062">"تغییر وضعیت کلیدهای آهسته"</string>
+ <string name="group_accessibility_toggle_slow_keys" msgid="8569881436531795062">"تغییر وضعیت کلیدهای تأخیری"</string>
<string name="group_accessibility_toggle_voice_access" msgid="5436708239015479017">"تغییر وضعیت «دسترسی صوتی»"</string>
<string name="group_accessibility_toggle_talkback" msgid="5017967056006325713">"‏روشن/خاموش کردن TalkBack"</string>
<string name="group_accessibility_toggle_magnification" msgid="3892267763383743128">"روشن/خاموش کردن درشت‌نمایی"</string>
@@ -1320,7 +1319,7 @@
<string name="wifi_empty_list_wifi_on" msgid="3864376632067585377">"درحال جستجوی شبکه…"</string>
<string name="wifi_failed_connect_message" msgid="4161863112079000071">"اتصال به شبکه برقرار نشد"</string>
<string name="wifi_wont_autoconnect_for_now" msgid="5782282612749867762">"‏فعلاً Wi-Fi به‌طور خودکار متصل نمی‌شود"</string>
- <string name="see_all_networks" msgid="3773666844913168122">"مشاهده همه"</string>
+ <string name="see_all_networks" msgid="3773666844913168122">"دیدن همه"</string>
<string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"برای تغییر شبکه، اترنت را قطع کنید"</string>
<string name="wifi_scan_notify_message" msgid="3753839537448621794">"‏برای بهبود تجربه استفاده از دستگاه، برنامه‌ها و سرویس‌ها همچنان می‌توانند در هر زمانی شبکه‌های Wi-Fi را اسکن کنند؛ حتی وقتی که Wi-Fi خاموش باشد. می‌توانید این مورد را در تنظیمات اسکن کردن Wi‑Fi تغییر دهید. "<annotation id="link">"تغییر"</annotation></string>
<string name="turn_off_airplane_mode" msgid="8425587763226548579">"خاموش کردن حالت هواپیما"</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"دستگاه تاشو درحال باز شدن"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"دستگاه تاشو درحال چرخش به اطراف"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"صفحه‌نمایش جلو روشن شد"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"برای استفاده از صفحه‌نمایش داخلی، بلغزانید"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"تاشده"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"تانشده"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 1bd952eeff9d..fdf18a3c77e2 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -252,10 +252,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Akun varaustaso ei tiedossa."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Yhteys: <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Yhdistetty kohteeseen <xliff:g id="CAST">%s</xliff:g>"</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Laajenna ryhmä."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Avaa sovellus."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Ei yhteyttä."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Pois päältä"</string>
@@ -545,8 +543,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Tutustu hubitilaan"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Käytä suosikkiwidgetejä ja -näytönsäästäjiä latauksen aikana."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Aloitetaan"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Näytä suosikkinäytönsäästäjiä latauksen aikana"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Vaihda käyttäjää"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"alasvetovalikko"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Kaikki sovellukset ja tämän istunnon tiedot poistetaan."</string>
@@ -809,8 +806,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Näkyy keskusteluilmoitusten yläosassa ja profiilikuvana lukitusnäytöllä, näkyy kuplana, keskeyttää Älä häiritse ‑tilan"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Tärkeä"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ei tue keskusteluominaisuuksia"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Palaute"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Hylkää"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Älä näytä uudelleen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Näitä ilmoituksia ei voi muokata"</string>
@@ -1310,8 +1306,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Avaa sormenjäljellä"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Todennus vaaditaan. Todenna koskettamalla sormenjälkitunnistinta."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Käynnissä oleva puhelu"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Käynnissä"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiilidata"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Yhdistetty"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Väliaikaisesti yhdistetty"</string>
@@ -1401,6 +1396,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Taitettava laite taitetaan"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Taitettava laite käännetään ympäri"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Etunäyttö päällä"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"taitettu"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"taittamaton"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 6360a12a4176..dde9b64f661b 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Pourcentage de la pile inconnu."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Connecté à : <xliff:g id="BLUETOOTH">%s</xliff:g>"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Connecté à <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Développer le groupe."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Ouvrir l\'appli."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Non connecté"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Itinérance"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Désactivé"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Explorer le mode Console"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Accéder à vos widgets et écrans de veille préférés pendant le chargement."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Allons-y"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Affichez vos écrans de veille préférés pendant le chargement"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Changer d\'utilisateur"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu déroulant"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Toutes les applis et les données de cette session seront supprimées."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"S\'affiche dans le haut des notifications de conversation et comme photo de profil à l\'écran de verrouillage, s\'affiche comme bulle, interrompt le mode Ne pas déranger"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritaire"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ne prend pas en charge les fonctionnalités de conversation"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Commentaires"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Fermer"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Ne plus afficher"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ces notifications ne peuvent pas être modifiées"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Servez-vous de votre empreinte digitale pour ouvrir"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentification requise. Touchez le capteur d\'empreintes digitales pour vous authentifier."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Appel en cours"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"En cours"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Données cellulaires"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Connexion active"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Connectée temporairement"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Appareil pliable en cours de dépliage"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Appareil pliable en train d\'être retourné"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Écran avant activé"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"plié"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"déplié"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 6d9760c48044..53dbfea51363 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -114,7 +114,7 @@
<string name="screenrecord_permission_dialog_option_text_entire_screen" msgid="4882406311415082016">"Enregistrer cet écran"</string>
<string name="screenrecord_permission_dialog_option_text_entire_screen_for_display" msgid="4169494703993148253">"Enregistrer %s"</string>
<string name="screenrecord_permission_dialog_warning_entire_screen" msgid="1321758636709366068">"Lorsque vous enregistrez l\'intégralité de votre écran, tout ce qui s\'y affiche est enregistré. Faites donc attention aux éléments tels que les mots de passe, les détails de mode de paiement, les messages, les photos, et les contenus audio et vidéo."</string>
- <string name="screenrecord_permission_dialog_warning_single_app" msgid="3738199712880063924">"Lorsque vous enregistrez une appli, tout ce qui est affiché ou lu dans celle-ci est enregistré. Faites donc attention aux éléments tels que les mots de passe, détails de mode de paiement, messages, photos et contenus audio et vidéo."</string>
+ <string name="screenrecord_permission_dialog_warning_single_app" msgid="3738199712880063924">"Lorsque vous enregistrez une appli, tout ce qui est affiché ou lu dans celle-ci est enregistré. Faites donc preuve de vigilance concernant les mots de passe, les infos sur le mode de paiement, les messages, les photos, et les contenus audio et vidéo."</string>
<string name="screenrecord_permission_dialog_continue_entire_screen" msgid="5557974446773486600">"Enregistrer l\'écran"</string>
<string name="screenrecord_app_selector_title" msgid="3854492366333954736">"Choisir l\'appli à enregistrer"</string>
<string name="screenrecord_audio_label" msgid="6183558856175159629">"Enregistrer l\'audio"</string>
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Pourcentage de la batterie inconnu."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Connecté à : <xliff:g id="BLUETOOTH">%s</xliff:g>"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Connecté à <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Développer le groupe."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Ouvrir l\'application."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Non connecté"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Itinérance"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Désactivées"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Découvrir le mode Hub"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Accédez à vos widgets et économiseurs d\'écran préférés lorsque l\'appareil est en charge."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"C\'est parti"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Afficher vos économiseurs d\'écran préférés pendant la recharge"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Changer d\'utilisateur"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu déroulant"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Toutes les applications et les données de cette session seront supprimées."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"S\'affiche en haut des notifications de conversation et en tant que photo de profil sur l\'écran de verrouillage, apparaît sous forme de bulle, interrompt le mode Ne pas déranger"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritaire"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> n\'est pas compatible avec les fonctionnalités de conversation"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Commentaires"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Ignorer"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Ne plus afficher"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Impossible de modifier ces notifications."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Utilisez votre empreinte pour ouvrir"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Authentification requise. Appuyez sur le lecteur d\'empreintes digitales pour vous authentifier."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Appel en cours"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"En cours"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Données mobiles"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Connecté"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Connexion temporaire"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Appareil pliable qui est déplié"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Appareil pliable qui est retourné"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Écran avant activé"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"plié"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"déplié"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index 3195ff506213..03ec2b0ad817 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Móstrase na parte superior das notificacións das conversas e como imaxe do perfil na pantalla de bloqueo, aparece como unha burbulla e interrompe o modo Non molestar"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioridade"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> non admite funcións de conversa"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Comentarios"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Pechar"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Non volver mostrar"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Estas notificacións non se poden modificar."</string>
@@ -1395,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Dispositivo pregable abríndose"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Dispositivo pregable xirando"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Activouse a pantalla dianteira"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"dispositivo pregado"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"dispositivo despregado"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index 7ad58e97ab7e..0c27927e2662 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"બૅટરીની ટકાવારી અજાણ છે."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> થી કનેક્ટ થયાં."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> થી કનેક્ટ કરેલ."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"ગ્રૂપને મોટું કરો."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"ઍપ્લિકેશન ખોલો."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"કનેક્ટ થયેલું નથી."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"રોમિંગ"</string>
<string name="cell_data_off" msgid="4886198950247099526">"બંધ કરો"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"હબ મોડ શોધખોળ કરો"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"ચાર્જ કરતી વખતે તમારા મનપસંદ વિજેટ અને સ્ક્રીન સેવર ઍક્સેસ કરો."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"ચાલો પ્રારંભ કરીએ"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"ચાર્જ વખતે તમારું મનપસંદ સ્ક્રીનસેવર બતાવો"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"વપરાશકર્તા સ્વિચ કરો"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"પુલડાઉન મેનૂ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"આ સત્રમાંની તમામ ઍપ અને ડેટા કાઢી નાખવામાં આવશે."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"વાતચીતના નોટિફિકેશન વિભાગની ટોચ પર અને લૉક કરેલી સ્ક્રીન પર પ્રોફાઇલ ફોટો તરીકે બતાવે છે, બબલ તરીકે દેખાય છે, ખલેલ પાડશો નહીં મોડમાં વિક્ષેપ ઊભો કરે છે"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"પ્રાધાન્યતા"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> વાતચીતની સુવિધાઓને સપોર્ટ આપતી નથી"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"પ્રતિસાદ"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"છોડી દો"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"ફરી બતાવશો નહીં"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"આ નોટિફિકેશનમાં કોઈ ફેરફાર થઈ શકશે નહીં."</string>
@@ -914,7 +910,7 @@
<string name="keyboard_shortcut_group_applications" msgid="7386239431100651266">"ઍપ્લિકેશનો"</string>
<string name="keyboard_shortcut_group_applications_assist" msgid="6772492350416591448">"Assistant"</string>
<string name="keyboard_shortcut_group_applications_browser" msgid="2776211137869809251">"બ્રાઉઝર"</string>
- <string name="keyboard_shortcut_group_applications_contacts" msgid="2807268086386201060">"Contacts"</string>
+ <string name="keyboard_shortcut_group_applications_contacts" msgid="2807268086386201060">"સંપર્કો"</string>
<string name="keyboard_shortcut_group_applications_email" msgid="7852376788894975192">"ઇમેઇલ"</string>
<string name="keyboard_shortcut_group_applications_sms" msgid="6912633831752843566">"SMS"</string>
<string name="keyboard_shortcut_group_applications_music" msgid="9032078456666204025">"મ્યુઝિક"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ખોલવા માટે ફિંગરપ્રિન્ટનો ઉપયોગ કરો"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"પ્રમાણીકરણ આવશ્યક છે. પ્રમાણિત કરવા માટે ફિંગરપ્રિન્ટ સેન્સરને ટચ કરો."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"ચાલુ કૉલ"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"ચાલી રહેલી પ્રવૃત્તિ"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"મોબાઇલ ડેટા"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"કનેક્ટ કરેલું"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"હંગામી રીતે કનેક્ટ કર્યું"</string>
@@ -1399,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"ફોલ્ડ કરી શકાય એવું ડિવાઇસ અનફોલ્ડ કરવામાં આવી રહ્યું છે"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"ફોલ્ડ કરી શકાય એવું ડિવાઇસ ફ્લિપ કરવામાં આવી રહ્યું છે"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"ફ્રન્ટ સ્ક્રીનની સુવિધા ચાલુ કરેલી છે"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"અંદરની સ્ક્રીનનો ઉપયોગ કરવા માટે સ્લાઇડ કરો"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"ફોલ્ડ કરેલું"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"અનફોલ્ડ કરેલું"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index f629f221bdf5..f2daffe3f443 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -142,7 +142,7 @@
<string name="share_to_app_stop_dialog_title_generic" msgid="9079161538135843648">"क्या आपको शेयर करने की प्रोसेस बंद करनी है?"</string>
<string name="share_to_app_stop_dialog_message_entire_screen_with_host_app" msgid="522823522115375414">"फ़िलहाल, <xliff:g id="HOST_APP_NAME">%1$s</xliff:g> पर पूरी स्क्रीन शेयर की जा रही है"</string>
<string name="share_to_app_stop_dialog_message_entire_screen" msgid="5090115386271179270">"फ़िलहाल, किसी ऐप्लिकेशन पर पूरी स्क्रीन शेयर की जा रही है"</string>
- <string name="share_to_app_stop_dialog_message_single_app_specific" msgid="5923772039347985172">"फ़िलहाल, <xliff:g id="APP_BEING_SHARED_NAME">%1$s</xliff:g> शेयर किया जा रहा है"</string>
+ <string name="share_to_app_stop_dialog_message_single_app_specific" msgid="5923772039347985172">"फ़िलहाल, <xliff:g id="APP_BEING_SHARED_NAME">%1$s</xliff:g> की स्क्रीन शेयर की जा रही है"</string>
<string name="share_to_app_stop_dialog_message_single_app_generic" msgid="6681016774654578261">"फ़िलहाल, कोई ऐप्लिकेशन शेयर किया जा रहा है"</string>
<string name="share_to_app_stop_dialog_message_generic" msgid="7622174291691249392">"फ़िलहाल, ऐप्लिकेशन के साथ कुछ शेयर किया जा रहा है"</string>
<string name="share_to_app_stop_dialog_button" msgid="6334056916284230217">"शेयर करना बंद करें"</string>
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"इस बारे में जानकारी नहीं है कि अभी बैटरी कितने प्रतिशत चार्ज है."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> से कनेक्ट किया गया."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> से कनेक्ट है."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"ग्रुप को बड़ा करें."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"ऐप्लिकेशन खोलें."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"कनेक्ट नहीं है."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"रोमिंग"</string>
<string name="cell_data_off" msgid="4886198950247099526">"बंद है"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"हब मोड को एक्सप्लोर करें"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"चार्जिंग के दौरान, अपने पसंदीदा विजेट और स्क्रीन सेवर को ऐक्सेस करें."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"आइए शुरू करें"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"चार्ज करते समय अपने पसंदीदा स्क्रीन सेवर दिखाएं"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"उपयोगकर्ता बदलें"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"पुलडाउन मेन्यू"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"इस सेशन के सभी ऐप्लिकेशन और डेटा को हटा दिया जाएगा."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"यह कई तरीकों से दिखती है, जैसे कि बातचीत वाली सूचनाओं में सबसे ऊपर, बबल के तौर पर, और लॉक स्क्रीन पर प्रोफ़ाइल फ़ोटो के तौर पर. साथ ही, यह \'परेशान न करें\' मोड को बायपास कर सकती है"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"प्राथमिकता"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> पर बातचीत की सुविधाएं काम नहीं करतीं"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"सुझाव/राय दें या शिकायत करें"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"खारिज करें"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"फिर से न दिखाएं"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ये सूचनाएं नहीं बदली जा सकती हैं."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"खोलने के लिए, फ़िंगरप्रिंट का इस्तेमाल करें"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"पुष्टि करना ज़रूरी है. पुष्टि करने के लिए, फ़िंगरप्रिंट सेंसर को छुएं."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"पहले से जारी कॉल"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"जारी है"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"मोबाइल डेटा"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"कनेक्ट हो गया"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"इंटरनेट कनेक्शन कुछ समय के लिए है"</string>
@@ -1399,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"फ़ोल्ड किया जा सकने वाला डिवाइस अनफ़ोल्ड किया जा रहा है"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"फ़ोल्ड किया जा सकने वाला डिवाइस पलटा जा रहा है"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"फ़्रंट स्क्रीन चालू है"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"इनर स्क्रीन का इस्तेमाल करने के लिए स्लाइड करें"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"डिवाइस फ़ोल्ड किया गया"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"डिवाइस अनफ़ोल्ड किया गया"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
@@ -1457,7 +1453,7 @@
<string name="shortcut_helper_category_current_app_shortcuts" msgid="4017840565974573628">"मौजूदा ऐप्लिकेशन"</string>
<string name="shortcut_helper_category_a11y" msgid="6314444792641773464">"सुलभता"</string>
<string name="shortcut_helper_title" msgid="8567500639300970049">"कीबोर्ड शॉर्टकट"</string>
- <string name="shortcut_helper_customize_mode_title" msgid="8327297960035006036">"शॉर्टकट पसंद के मुताबिक बनाएं"</string>
+ <string name="shortcut_helper_customize_mode_title" msgid="8327297960035006036">"पसंद के मुताबिक शॉर्टकट बनाएं"</string>
<string name="shortcut_customize_mode_remove_shortcut_dialog_title" msgid="7106420484940737208">"क्या आपको शॉर्टकट हटाना है?"</string>
<string name="shortcut_customize_mode_reset_shortcut_dialog_title" msgid="8131184731313717780">"क्या आपको फिर से डिफ़ॉल्ट शॉर्टकट चालू करने हैं?"</string>
<string name="shortcut_customize_mode_add_shortcut_description" msgid="7636040209946696120">"यह शॉर्टकट बनाने के लिए, ऐक्शन बटन और एक या उससे ज़्यादा अन्य बटन एक साथ दबाएं"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index dd0a6c1e729e..5222e8010e81 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Prikazuje se pri vrhu obavijesti razgovora i kao profilna slika na zaključanom zaslonu, izgleda kao oblačić, prekida Ne uznemiravaj"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritetno"</string>
<string name="no_shortcut" msgid="8257177117568230126">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> ne podržava značajke razgovora"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Povratne informacije"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Odbaci"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Ne prikazuj ponovo"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Te se obavijesti ne mogu izmijeniti."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Rasklopljen sklopivi uređaj"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Okretanje sklopivog uređaja sa svih strana"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Prednji zaslon je uključen"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Kliznite za upotrebu unutarnjeg zaslona"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"zatvoreno"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"otvoreno"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 56270b4062a9..109c52fd6e8d 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Az akkumulátor töltöttségi szintje ismeretlen."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Csatlakoztatva a következőhöz: <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Csatlakozva a következőhöz: <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Csoport kibontása."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Alkalmazás megnyitása."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nincs csatlakozva."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Ki"</string>
@@ -298,7 +296,7 @@
<string name="accessibility_rotation_lock_on_landscape" msgid="936972553861524360">"A képernyő zárolva van fekvő tájolásban."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="2356633398683813837">"A képernyő zárolva van álló tájolásban."</string>
<string name="dessert_case" msgid="9104973640704357717">"Dessert Case"</string>
- <string name="start_dreams" msgid="9131802557946276718">"Képernyővédő"</string>
+ <string name="start_dreams" msgid="9131802557946276718">"Képernyőkímélő"</string>
<string name="ethernet_label" msgid="2203544727007463351">"Ethernet"</string>
<string name="quick_settings_dnd_label" msgid="7728690179108024338">"Ne zavarjanak"</string>
<string name="quick_settings_modes_label" msgid="879156359479504244">"Módok"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"A Hub mód felfedezése"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Töltés közben hozzáférhet kedvenc moduljaihoz és képernyőkímélőihez."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Kezdés"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Kedvenc képernyőkímélők megjelenítése töltés közben"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Felhasználóváltás"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"lehúzható menü"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"A munkamenetben található összes alkalmazás és adat törlődni fog."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"A beszélgetésekre vonatkozó értesítések tetején, lebegő buborékként látható, megjeleníti a profilképet a lezárási képernyőn, és megszakítja a Ne zavarjanak funkciót"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritás"</string>
<string name="no_shortcut" msgid="8257177117568230126">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> nem támogatja a beszélgetési funkciókat"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Visszajelzés"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Elvetés"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Ne jelenjen meg újra"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ezeket az értesítéseket nem lehet módosítani."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Ujjlenyomat használata a megnyitáshoz"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Hitelesítés szükséges. Érintse meg az ujjlenyomat-érzékelőt a hitelesítéshez."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Hívás folyamatban"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Folyamatban van"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobiladat"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Csatlakozva"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Ideiglenesen csatlakoztatva"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Összehajtható eszköz kihajtása"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Összehajtható eszköz körbeforgatása"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Előlapi képernyő bekapcsolva"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"összehajtva"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"kihajtva"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index bb92212f0004..914d2cd8fd78 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Մարտկոցի լիցքի մակարդակն անհայտ է։"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Միացված է <xliff:g id="BLUETOOTH">%s</xliff:g>-ին:"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Միացված է <xliff:g id="CAST">%s</xliff:g>-ին:"</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Ծավալել խումբը։"</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Բացել հավելվածը։"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Միացված չէ:"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Ռոումինգ"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Անջատված է"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Բացահայտեք հանգույցի ռեժիմը"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Օգտագործեք ձեր սիրած վիջեթները և էկրանապահները, մինչ ձեր սարքը լիցքավորվում է։"</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Սկսել"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Ցուցադրել էկրանապահներ լիցքավորման ժամանակ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Անջատել օգտվողին"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"իջնող ընտրացանկ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Այս աշխատաշրջանի բոլոր հավելվածներն ու տվյալները կջնջվեն:"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Ցուցադրվում է զրույցների ծանուցումների վերևում, ինչպես նաև կողպէկրանին որպես պրոֆիլի նկար, հայտնվում է ամպիկի տեսքով, ընդհատում է «Չանհանգստացնել» ռեժիմը"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Կարևոր"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը զրույցի գործառույթներ չի աջակցում"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Կարծիք հայտնել"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Փակել"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Այլևս ցույց չտալ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Այս ծանուցումները չեն կարող փոփոխվել:"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Բացելու համար օգտագործեք մատնահետքը"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Պահանջվում է նույնականացում։ Դրա համար մատը հպեք մատնահետքի սկաներին։"</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Ընթացիկ զանգ"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Հիմա"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Բջջային ինտերնետ"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Միացած է"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Ժամանակավոր կապ"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Ծալովի սարք՝ բացված վիճակում"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Ծալովի սարք՝ շրջված վիճակում"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Առջևի էկրանը միացված է"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"ծալված"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"բացված"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 60f8ea7f60fa..62e347603242 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Persentase baterai tidak diketahui."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Terhubung ke <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Terhubung ke <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Meluaskan grup."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Membuka aplikasi."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Tidak terhubung."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Nonaktif"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Jelajahi mode hub"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Akses widget dan screensaver favorit Anda saat mengisi daya."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Mulai"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Tampilkan screensaver favorit saat mengisi daya"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Beralih pengguna"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu pulldown"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Semua aplikasi dan data dalam sesi ini akan dihapus."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Muncul teratas di notifikasi percakapan dan sebagai foto profil di layar kunci, ditampilkan sebagai balon, menimpa mode Jangan Ganggu"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritas"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak mendukung fitur percakapan"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Masukan"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Tutup"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Jangan tampilkan lagi"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Notifikasi ini tidak dapat diubah."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Gunakan sidik jari untuk membuka"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Perlu autentikasi. Sentuh sensor sidik jari untuk melakukan autentikasi."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Panggilan sedang berlangsung"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Sedang berlangsung"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Data seluler"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Terhubung"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Terhubung sementara"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Perangkat foldable sedang dibentangkan"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Perangkat foldable sedang dibalik"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Layar depan diaktifkan"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"ditutup"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"dibuka"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index 68e395b3498d..4e486d01caa4 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Birtist efst í samtalstilkynningum og sem prófílmynd á lásskjánum. Birtist sem blaðra sem truflar „Ónáðið ekki“"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Forgangur"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> styður ekki samtalseiginleika"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Ábendingar"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Loka"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Ekki sýna aftur"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ekki er hægt að breyta þessum tilkynningum."</string>
@@ -1395,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Samanbrjótanlegt tæki opnað"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Samanbrjótanlegu tæki snúið við"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Kveikt á fremri skjá"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"samanbrotið"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"opið"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index c839a7b89106..786254be73c0 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -408,8 +408,8 @@
<string name="custom_trace_settings_dialog_title" msgid="2608570500144830554">"Impostazioni di traccia personalizzate"</string>
<string name="restore_default" msgid="5259420807486239755">"Ripristina predefinite"</string>
<string name="quick_settings_onehanded_label" msgid="2416537930246274991">"Modalità a una mano"</string>
- <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Apparecchi acustici"</string>
- <string name="quick_settings_hearing_devices_connected" msgid="6519069502397037781">"Attivi"</string>
+ <string name="quick_settings_hearing_devices_label" msgid="7277170419679404129">"Protesi uditive"</string>
+ <string name="quick_settings_hearing_devices_connected" msgid="6519069502397037781">"Attive"</string>
<string name="quick_settings_hearing_devices_disconnected" msgid="8907061223998176187">"Disconnessi"</string>
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Protesi uditive"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Accoppia nuovo dispositivo"</string>
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Appare in cima alle notifiche delle conversazioni, come immagine del profilo nella schermata di blocco e sotto forma di bolla, inoltre interrompe la modalità Non disturbare"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Priorità"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> non supporta le funzionalità delle conversazioni"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Ignora"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Non mostrare più"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Impossibile modificare queste notifiche."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Dispositivo pieghevole che viene aperto"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Dispositivo pieghevole che viene capovolto"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Schermo frontale attivato"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Scorri per usare lo schermo interno"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"Piegato"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"Non piegato"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index fe5d6f3ebfed..50008854f1df 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -114,7 +114,7 @@
<string name="screenrecord_permission_dialog_option_text_entire_screen" msgid="4882406311415082016">"הקלטת המסך שמוצג עכשיו"</string>
<string name="screenrecord_permission_dialog_option_text_entire_screen_for_display" msgid="4169494703993148253">"‏הקלטה של %s"</string>
<string name="screenrecord_permission_dialog_warning_entire_screen" msgid="1321758636709366068">"כשמקליטים את כל המסך, כל מה שמופיע במסך מוקלט. מומלץ להיזהר עם סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
- <string name="screenrecord_permission_dialog_warning_single_app" msgid="3738199712880063924">"כשמקליטים אפליקציה, כל מה שרואים או מפעילים בה מוקלט. מומלץ להיזהר עם סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
+ <string name="screenrecord_permission_dialog_warning_single_app" msgid="3738199712880063924">"כשמקליטים אפליקציה, כל מה שרואים או מפעילים בה מוקלט. מומלץ להיזהר ולא לחשוף פרטים אישיים כמו סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
<string name="screenrecord_permission_dialog_continue_entire_screen" msgid="5557974446773486600">"הקלטת המסך"</string>
<string name="screenrecord_app_selector_title" msgid="3854492366333954736">"בחירת אפליקציה להקלטה"</string>
<string name="screenrecord_audio_label" msgid="6183558856175159629">"הקלטת אודיו"</string>
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"אחוז טעינת הסוללה לא ידוע."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"התבצע חיבור אל <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"מחובר אל <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"הרחבת הקבוצה."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"פתיחת האפליקציה."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"אין חיבור."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"נדידה"</string>
<string name="cell_data_off" msgid="4886198950247099526">"כבוי"</string>
@@ -460,7 +458,7 @@
<string name="zen_modes_dialog_title" msgid="8854640808100096934">"מצבים"</string>
<string name="zen_modes_dialog_done" msgid="6654130880256438950">"סיום"</string>
<string name="zen_modes_dialog_settings" msgid="2310248023728936697">"הגדרות"</string>
- <string name="zen_mode_on" msgid="9085304934016242591">"מצב מופעל"</string>
+ <string name="zen_mode_on" msgid="9085304934016242591">"מצב פעיל"</string>
<string name="zen_mode_on_with_details" msgid="7416143430557895497">"פועל • <xliff:g id="TRIGGER_DESCRIPTION">%1$s</xliff:g>"</string>
<string name="zen_mode_off" msgid="1736604456618147306">"מצב מושבת"</string>
<string name="zen_mode_set_up" msgid="8231201163894922821">"לא הוגדר"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"‏האפשרויות במצב Hub"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"אפשר לגשת לווידג\'טים ולשומרי המסך בזמן הטעינה."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"שנתחיל?"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"בחירת שומרי המסך שיוצגו בזמן הטעינה"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"החלפת משתמש"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"תפריט במשיכה למטה"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"כל האפליקציות והנתונים בסשן הזה יימחקו."</string>
@@ -573,10 +570,10 @@
<!-- no translation found for media_projection_entry_app_permission_dialog_option_text_entire_screen (5100078808078139706) -->
<skip />
<string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="5504288438067851086">"כשמשתפים את כל המסך, כל מה שמופיע בו יהיה גלוי ל-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. מומלץ להיזהר עם סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
- <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"כשמשתפים אפליקציה, כל מה שרואים או מפעילים בה יהיה גלוי ל-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. מומלץ להיזהר עם סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
+ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"כשמשתפים אפליקציה, כל מה שרואים או מפעילים בה מופיע גם ב-<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. מומלץ להיזהר ולא לחשוף פרטים אישיים כמו סיסמאות, פרטי תשלום, הודעות, תמונות, אודיו וסרטונים."</string>
<string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"שיתוף המסך"</string>
<string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> השביתה את האפשרות הזו"</string>
- <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"בחירת האפליקציה לשיתוף"</string>
+ <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"בחירת אפליקציה לשיתוף"</string>
<string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"‏להפעיל Cast של המסך?"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"‏הפעלת Cast של אפליקציה אחת"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_entire_screen" msgid="8389508187954155307">"‏הפעלת Cast של כל המסך"</string>
@@ -593,7 +590,7 @@
<string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"שיתוף של האפליקציה הזו במקום"</string>
<string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"חזרה למשימה הקודמת"</string>
<string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"החלפת אפליקציה"</string>
- <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"‏האפשרות נחסמה על ידי אדמין ב-IT"</string>
+ <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"‏האפשרות נחסמה על ידי אדמין ממחלקת IT"</string>
<string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"צילום המסך מושבת בגלל מדיניות המכשיר"</string>
<string name="clear_all_notifications_text" msgid="348312370303046130">"ניקוי הכול"</string>
<string name="manage_notifications_text" msgid="6885645344647733116">"ניהול"</string>
@@ -936,7 +933,7 @@
<string name="accessibility_long_click_tile" msgid="210472753156768705">"פתיחת ההגדרות"</string>
<string name="accessibility_status_bar_headphones" msgid="1304082414912647414">"אוזניות מחוברות"</string>
<string name="accessibility_status_bar_headset" msgid="2699275863720926104">"אוזניות מחוברות"</string>
- <string name="data_saver" msgid="3484013368530820763">"‏חוסך הנתונים (Data Saver)"</string>
+ <string name="data_saver" msgid="3484013368530820763">"חוסך הנתונים"</string>
<string name="accessibility_data_saver_on" msgid="5394743820189757731">"‏חוסך הנתונים (Data Saver) פועל"</string>
<string name="switch_bar_on" msgid="1770868129120096114">"פועל"</string>
<string name="switch_bar_off" msgid="5669805115416379556">"כבוי"</string>
@@ -1087,7 +1084,7 @@
<string name="privacy_type_media_projection" msgid="8136723828804251547">"הקלטת המסך"</string>
<string name="music_controls_no_title" msgid="4166497066552290938">"ללא שם"</string>
<string name="inattentive_sleep_warning_title" msgid="3891371591713990373">"המתנה"</string>
- <string name="font_scaling_dialog_title" msgid="6273107303850248375">"גודל גופן"</string>
+ <string name="font_scaling_dialog_title" msgid="6273107303850248375">"גודל הגופן"</string>
<string name="font_scaling_smaller" msgid="1012032217622008232">"הקטנה"</string>
<string name="font_scaling_larger" msgid="5476242157436806760">"הגדלה"</string>
<string name="magnification_window_title" msgid="4863914360847258333">"חלון הגדלה"</string>
@@ -1308,8 +1305,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"שימוש בטביעת אצבע כדי לפתוח"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"נדרש אימות. יש לגעת בחיישן טביעות האצבע כדי לבצע אימות."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"שיחה פעילה"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"בתהליך"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"חבילת גלישה"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"מחובר"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"מחובר באופן זמני"</string>
@@ -1399,6 +1395,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"מכשיר מתקפל עובר למצב לא מקופל"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"מכשיר מתקפל עובר למצב מהופך"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"המסך הקדמי מופעל"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"מצב מקופל"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"מצב לא מקופל"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"‏%1$s‏ / %2$s"</string>
@@ -1422,7 +1420,7 @@
<string name="assistant_attention_content_description" msgid="4166330881435263596">"נוכחות המשתמש זוהתה"</string>
<string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"צריך להגדיר את אפליקציית ברירת המחדל לפתקים ב\'הגדרות\'"</string>
<string name="install_app" msgid="5066668100199613936">"התקנת האפליקציה"</string>
- <string name="dismissible_keyguard_swipe" msgid="8377597870094949432">"מחליקים למעלה כדי להמשיך"</string>
+ <string name="dismissible_keyguard_swipe" msgid="8377597870094949432">"צריך להחליק למעלה כדי להמשיך"</string>
<string name="connected_display_dialog_start_mirroring" msgid="6237895789920854982">"לשקף למסך חיצוני?"</string>
<string name="connected_display_dialog_dual_display_stop_warning" msgid="4174707498892447947">"המסך הפנימי שלך ישוכפל. המסך החיצוני שלך יכובה."</string>
<string name="mirror_display" msgid="2515262008898122928">"תצוגת מראה"</string>
@@ -1460,7 +1458,7 @@
<string name="shortcut_helper_customize_mode_title" msgid="8327297960035006036">"התאמה אישית של מקשי הקיצור"</string>
<string name="shortcut_customize_mode_remove_shortcut_dialog_title" msgid="7106420484940737208">"להסיר את קיצור הדרך?"</string>
<string name="shortcut_customize_mode_reset_shortcut_dialog_title" msgid="8131184731313717780">"לאפס לברירת המחדל?"</string>
- <string name="shortcut_customize_mode_add_shortcut_description" msgid="7636040209946696120">"כדי ליצור את קיצור הדרך הזה, מקישים על מקש הפעולה ועל עוד מקש אחד או יותר ביחד"</string>
+ <string name="shortcut_customize_mode_add_shortcut_description" msgid="7636040209946696120">"כדי לבחור את צירוף המקשים הרצוי, מקישים בו-זמנית על מקש הפעולה ועל עוד מקש אחד או יותר"</string>
<string name="shortcut_customize_mode_remove_shortcut_description" msgid="6851287900585057128">"קיצור הדרך יימחק לתמיד."</string>
<string name="shortcut_customize_mode_reset_shortcut_description" msgid="2081849715634358684">"הפעולה הזו תמחק לתמיד את כל קיצורי הדרך שמותאמים אישית."</string>
<string name="shortcut_helper_search_placeholder" msgid="5488547526269871819">"חיפוש מקשי קיצור"</string>
@@ -1477,7 +1475,7 @@
<string name="shortcut_helper_key_combinations_forward_slash" msgid="1238652537199346970">"קו נטוי"</string>
<string name="shortcut_helper_content_description_drag_handle" msgid="5092426406009848110">"נקודת האחיזה לגרירה"</string>
<string name="shortcut_helper_keyboard_settings_buttons_label" msgid="6720967595915985259">"הגדרות המקלדת"</string>
- <string name="shortcut_helper_customize_dialog_set_shortcut_button_label" msgid="4754492225010429382">"הגדרת מקש קיצור"</string>
+ <string name="shortcut_helper_customize_dialog_set_shortcut_button_label" msgid="4754492225010429382">"הגדרת מקשי הקיצור"</string>
<string name="shortcut_helper_customize_dialog_remove_button_label" msgid="6546386970440176552">"הסרה"</string>
<string name="shortcut_helper_customize_dialog_reset_button_label" msgid="7645535254306312685">"כן, לאפס"</string>
<string name="shortcut_helper_customize_dialog_cancel_button_label" msgid="5595546460431741178">"ביטול"</string>
diff --git a/packages/SystemUI/res/values-iw/tiles_states_strings.xml b/packages/SystemUI/res/values-iw/tiles_states_strings.xml
index d6b9bc8950af..1a5b8fbcd20d 100644
--- a/packages/SystemUI/res/values-iw/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-iw/tiles_states_strings.xml
@@ -194,6 +194,6 @@
<string-array name="tile_states_notes">
<item msgid="5894333929299989301">"לא זמין"</item>
<item msgid="6419996398343291862">"מושבת"</item>
- <item msgid="5908720590832378783">"מופעל"</item>
+ <item msgid="5908720590832378783">"מצב פעיל"</item>
</string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 810fef9c3942..fd98fe822b6f 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -113,8 +113,8 @@
<string name="screenrecord_permission_dialog_option_text_single_app" msgid="1996450687814647583">"1 つのアプリを録画"</string>
<string name="screenrecord_permission_dialog_option_text_entire_screen" msgid="4882406311415082016">"この画面の録画"</string>
<string name="screenrecord_permission_dialog_option_text_entire_screen_for_display" msgid="4169494703993148253">"%s の録画"</string>
- <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="1321758636709366068">"画面全体を録画すると、画面に表示されるものがすべて録画されます。パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
- <string name="screenrecord_permission_dialog_warning_single_app" msgid="3738199712880063924">"アプリを録画すると、そのアプリで表示または再生される内容がすべて録画されます。パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+ <string name="screenrecord_permission_dialog_warning_entire_screen" msgid="1321758636709366068">"画面全体を録画すると、画面に表示されるものがすべて録画されます。パスワード、お支払い情報、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+ <string name="screenrecord_permission_dialog_warning_single_app" msgid="3738199712880063924">"アプリを録画すると、そのアプリで表示または実行される内容がすべて録画されます。パスワード、お支払い情報、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
<string name="screenrecord_permission_dialog_continue_entire_screen" msgid="5557974446773486600">"画面を録画"</string>
<string name="screenrecord_app_selector_title" msgid="3854492366333954736">"録画するアプリを選択"</string>
<string name="screenrecord_audio_label" msgid="6183558856175159629">"録音"</string>
@@ -558,9 +558,9 @@
<string name="user_remove_user_message" msgid="6702834122128031833">"このユーザーのアプリとデータがすべて削除されます。"</string>
<string name="user_remove_user_remove" msgid="8387386066949061256">"削除"</string>
<string name="media_projection_dialog_title" msgid="3316063622495360646">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> で録画やキャストを開始しますか?"</string>
- <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> は、録画中またはキャスト中に画面上に表示または再生される情報のすべてにアクセスできるようになります。これには、パスワード、お支払いの詳細、写真、メッセージ、音声などが含まれます。"</string>
+ <string name="media_projection_dialog_warning" msgid="1303664408388363598">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> は、録画中またはキャスト中に画面上に表示または再生される情報のすべてにアクセスできるようになります。これには、パスワード、お支払い情報、写真、メッセージ、音声などが含まれます。"</string>
<string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"録画やキャストを開始しますか?"</string>
- <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"この機能を提供するサービスは、録画中またはキャスト中に画面上に表示または再生される情報のすべてにアクセスできるようになります。これには、パスワード、お支払いの詳細、写真、メッセージ、音声などが含まれます。"</string>
+ <string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"この機能を提供するサービスは、録画中またはキャスト中に画面上に表示または再生される情報のすべてにアクセスできるようになります。これには、パスワード、お支払い情報、写真、メッセージ、音声などが含まれます。"</string>
<string name="screen_share_generic_app_selector_title" msgid="8331515850599218288">"アプリの共有または録画"</string>
<string name="media_projection_entry_app_permission_dialog_title" msgid="4613857256721708062">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> と画面を共有しますか?"</string>
<string name="screen_share_permission_dialog_option_single_app" msgid="2974054871681567314">"1 個のアプリを共有"</string>
@@ -569,21 +569,21 @@
<string name="screen_share_permission_dialog_option_entire_screen" msgid="4493174362775038997">"画面全体を共有"</string>
<!-- no translation found for media_projection_entry_app_permission_dialog_option_text_entire_screen (5100078808078139706) -->
<skip />
- <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="5504288438067851086">"画面全体を共有すると、画面に表示される内容が <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> にすべて公開されます。パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
- <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"アプリを共有すると、そのアプリで表示または再生される内容が <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> にすべて公開されます。パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+ <string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="5504288438067851086">"画面全体を共有すると、画面に表示される内容が <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> にすべて公開されます。パスワード、お支払い情報、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"アプリを共有すると、そのアプリで表示または再生される内容が <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> にすべて公開されます。パスワード、お支払い情報、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
<string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"画面を共有"</string>
<string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> がこのオプションを無効にしています"</string>
<string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"共有するアプリを選択"</string>
<string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"画面をキャストしますか?"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"1 つのアプリをキャスト"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_entire_screen" msgid="8389508187954155307">"画面全体をキャスト"</string>
- <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="4040447861037324017">"画面全体をキャストすると、画面に表示される内容がすべて公開されます。パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
- <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="7487834861348460736">"アプリをキャストすると、そのアプリで表示または再生される内容がすべて公開されます。パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+ <string name="media_projection_entry_cast_permission_dialog_warning_entire_screen" msgid="4040447861037324017">"画面全体をキャストすると、画面に表示される内容がすべて公開されます。パスワード、お支払い情報、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+ <string name="media_projection_entry_cast_permission_dialog_warning_single_app" msgid="7487834861348460736">"アプリをキャストすると、そのアプリで表示または再生される内容がすべて公開されます。パスワード、お支払い情報、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
<string name="media_projection_entry_cast_permission_dialog_continue_entire_screen" msgid="3261124185304676483">"画面のキャスト"</string>
<string name="media_projection_entry_cast_app_selector_title" msgid="6323062146661922387">"キャストするアプリを選択"</string>
<string name="media_projection_entry_generic_permission_dialog_title" msgid="4519802931547483628">"共有を開始しますか?"</string>
- <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"共有、録画、キャスト中は、画面に表示される内容やデバイスで再生される内容に Android がアクセスできるため、パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
- <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"アプリの共有、録画、キャスト中は、そのアプリで表示または再生される内容に Android がアクセスできるため、パスワード、お支払いの詳細、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+ <string name="media_projection_entry_generic_permission_dialog_warning_entire_screen" msgid="5407906851409410209">"共有、録画、キャスト中は、画面に表示される内容やデバイスで再生される内容に Android がアクセスできるため、パスワード、お支払い情報、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
+ <string name="media_projection_entry_generic_permission_dialog_warning_single_app" msgid="3454859977888159495">"アプリの共有、録画、キャスト中は、そのアプリで表示または再生される内容に Android がアクセスできるため、パスワード、お支払い情報、メッセージ、写真、音声、動画などの情報にご注意ください。"</string>
<string name="media_projection_entry_generic_permission_dialog_continue" msgid="8640381403048097116">"開始"</string>
<string name="media_projection_entry_generic_permission_dialog_continue_single_app" msgid="5920814988611877051">"次へ"</string>
<string name="media_projection_task_switcher_text" msgid="590885489897412359">"アプリを切り替えるときに共有を一時停止します"</string>
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"会話通知の一番上に表示されると同時に、ロック画面にプロフィール写真として表示されるほか、バブルとして表示され、サイレント モードが中断されます"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"優先"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g>は会話機能に対応していません"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"フィードバック"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"閉じる"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"次回から表示しない"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"これらの通知は変更できません。"</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"折りたたみ式デバイスが広げられている"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"折りたたみ式デバイスがひっくり返されている"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"フロント画面が ON になりました"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"インナー ディスプレイを使用するにはスライドしてください"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"折りたたんだ状態"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"広げた状態"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index a8fd410b6dff..18522da3dfb4 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"ბატარეის პროცენტული მაჩვენებელი უცნობია."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"დაკავშირებულია <xliff:g id="BLUETOOTH">%s</xliff:g>-თან."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"დაკავშირებულია მოწყობილობასთან: <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"ჯგუფის გაფართოება."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"აპლიკაციის გახსნა."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"არ არის დაკავშირებული."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"როუმინგი"</string>
<string name="cell_data_off" msgid="4886198950247099526">"გამორთული"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"ჰაბის რეჟიმის დათვალიერება"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"დატენის დროს შეგიძლიათ თქვენს რჩეულ ვიჯეტებზე და ეკრანმზოგებზე წვდომა."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"დავიწყოთ"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"დატენვისას თქვენი საყვარელი ეკრანმზოგის ჩვენება"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"მომხმარებლის გადართვა"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ჩამოშლადი მენიუ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ამ სესიის ყველა აპი და მონაცემი წაიშლება."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"გამოჩნდება საუბრის შეტყობინებების თავში და პროფილის სურათის სახით ჩაკეტილ ეკრანზე, ჩნდება ბუშტის სახით, წყვეტს ფუნქციას „არ შემაწუხოთ“"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"პრიორიტეტი"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ს არ აქვს მიმოწერის ფუნქციების მხარდაჭერა"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"გამოხმაურება"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"დახურვა"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"აღარ მაჩვენო"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ამ შეტყობინებების შეცვლა შეუძლებელია."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"გასახსნელად გამოიყენეთ თითის ანაბეჭდი"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"საჭიროა ავტორიზაცია. ავტორიზაციისთვის შეეხეთ თითის ანაბეჭდის სენსორს."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"მიმდინარე ზარი"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"მიმდინარე"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"მობილური ინტერნეტი"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"დაკავშირებული"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"დროებით დაკავშირებული"</string>
@@ -1399,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"დასაკეცი მოწყობილობა იხსნება"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"დასაკეცი მოწყობილობა ტრიალებს"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"წინა ეკრანი ჩართულია"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"გაასრიალეთ შიდა ეკრანის გამოსაყენებლად"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"დაკეცილი"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"გაშლილი"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 16569fe52a00..83af7c8b8607 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Батарея зарядының мөлшері белгісіз."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> қосылған."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> трансляциясына қосылды."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Топты жайыңыз."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Қолданбаны ашыңыз."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Жалғанбаған."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роуминг"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Өшірулі"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Хаб режимін шолу"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Зарядтау кезінде өзіңіз ұнататын виджеттер мен скринсейверлерді пайдаланыңыз."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Бастайық"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Құрылғыны зарядтау кезінде таңдаулы скринсейверлерді көрсетуге болады."</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Пайдаланушыны ауыстыру"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ашылмалы мәзір"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Осы сеанстағы барлық қолданба мен дерек жойылады."</string>
@@ -593,7 +590,7 @@
<string name="media_projection_task_switcher_action_switch" msgid="8682258717291921123">"Орнына осы қолданбаны бөлісу"</string>
<string name="media_projection_task_switcher_action_back" msgid="5324164224147845282">"Қайта ауысу"</string>
<string name="media_projection_task_switcher_notification_channel" msgid="7613206306777814253">"Қолданба ауыстыру"</string>
- <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Әкімшіңіз бөгеген"</string>
+ <string name="screen_capturing_disabled_by_policy_dialog_title" msgid="2113331792064527203">"Әкімшіңіз блоктаған"</string>
<string name="screen_capturing_disabled_by_policy_dialog_description" msgid="6015975736747696431">"Құрылғы саясатына байланысты экранды түсіру өшірілді."</string>
<string name="clear_all_notifications_text" msgid="348312370303046130">"Барлығын тазарту"</string>
<string name="manage_notifications_text" msgid="6885645344647733116">"Басқару"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Әңгіме туралы хабарландырулардың жоғарғы жағында тұрады және құлыптаулы экранда профиль суреті болып көрсетіледі, қалқыма хабар түрінде шығады, Мазаламау режимін тоқтатады."</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Маңызды"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> әңгіме функцияларын қолдамайды."</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Пікір"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Жабу"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Қайта көрсетілмесін"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Бұл хабарландыруларды өзгерту мүмкін емес."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Ашу үшін саусақ ізін пайдаланыңыз."</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Аутентификациядан өту қажет. Ол үшін саусақ ізін оқу сканерін түртіңіз."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Ағымдағы қоңырау"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Ағымдағы"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобильдік интернет"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Жалғанды"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Уақытша байланыс орнатылды."</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Бүктемелі құрылғы ашылып жатыр."</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Бүктемелі құрылғы аударылып жатыр."</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Алдыңғы экран қосылды."</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"жабық"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"ашық"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index 1cf437c9e949..569ecd3d1677 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"បង្ហាញនៅខាងលើ​ការជូនដំណឹងអំពីការសន្ទនា និងជារូបភាព​កម្រង​ព័ត៌មាននៅលើអេក្រង់ចាក់សោ បង្ហាញជាពពុះ បង្អាក់មុខងារកុំ​រំខាន"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"អាទិភាព"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> មិនអាចប្រើ​មុខងារ​សន្ទនា​បានទេ"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"មតិកែលម្អ"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ច្រានចោល"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"កុំបង្ហាញម្ដងទៀត"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"មិនអាច​កែប្រែ​ការជូនដំណឹង​ទាំងនេះ​បានទេ។"</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"ឧបករណ៍អាច​បត់បានកំពុងត្រូវបានលា"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"ឧបករណ៍អាច​បត់បានកំពុងត្រូវបានលា"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"បានបើកអេក្រង់ខាងមុខ"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"រំកិលដើម្បីប្រើអេក្រង់ខាងក្នុង"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"បត់"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"លា"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index 5cfb42cf5091..5bcd986b2bad 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"ಸಂಭಾಷಣೆ ಅಧಿಸೂಚನೆಗಳ ಮೇಲ್ಭಾಗದಲ್ಲಿ ಹಾಗೂ ಲಾಕ್ ಸ್ಕ್ರೀನ್‌ನ ಮೇಲೆ ಪ್ರೊಫೈಲ್ ಚಿತ್ರವಾಗಿ ತೋರಿಸುತ್ತದೆ, ಬಬಲ್‌ನಂತೆ ಗೋಚರಿಸುತ್ತದೆ, ಅಡಚಣೆ ಮಾಡಬೇಡ ಮೋಡ್‌ಗೆ ಅಡ್ಡಿಯುಂಟುಮಾಡುತ್ತದೆ"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ಆದ್ಯತೆ"</string>
<string name="no_shortcut" msgid="8257177117568230126">"ಸಂವಾದ ಫೀಚರ್‌ಗಳನ್ನು <xliff:g id="APP_NAME">%1$s</xliff:g> ಬೆಂಬಲಿಸುವುದಿಲ್ಲ"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ಫೀಡ್‌ಬ್ಯಾಕ್"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ವಜಾಗೊಳಿಸಿ"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"ಮತ್ತೊಮ್ಮೆ ತೋರಿಸಬೇಡಿ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"ಫೋಲ್ಡ್ ಮಾಡಬಹುದಾದ ಸಾಧನವನ್ನು ಅನ್‌ಫೋಲ್ಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"ಫೋಲ್ಡ್ ಮಾಡಬಹುದಾದ ಸಾಧನವನ್ನು ಸುತ್ತಲೂ ತಿರುಗಿಸಲಾಗುತ್ತಿದೆ"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"ಫ್ರಂಟ್ ಸ್ಕ್ರೀನ್ ಆನ್ ಆಗಿದೆ"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"ಒಳಗಿನ ಸ್ಕ್ರೀನ್ ಬಳಸಲು ಸ್ಲೈಡ್ ಮಾಡಿ"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"ಫೋಲ್ಡ್ ಮಾಡಿರುವುದು"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"ಅನ್‌ಫೋಲ್ಡ್ ಮಾಡಿರುವುದು"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 78f87a2cdfa3..fd2c62e16a17 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"배터리 잔량을 알 수 없습니다."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>에 연결되었습니다."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g>에 연결됨"</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"그룹을 펼칩니다."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"애플리케이션을 엽니다."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"연결되지 않았습니다."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"로밍"</string>
<string name="cell_data_off" msgid="4886198950247099526">"사용 안함"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"허브 모드 살펴보기"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"충전하는 동안 즐겨 찾는 위젯과 화면 보호기에 액세스하세요."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"시작"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"충전 중에 즐겨찾는 화면 보호기 표시"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"사용자 전환"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"풀다운 메뉴"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"이 세션에 있는 모든 앱과 데이터가 삭제됩니다."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"대화 알림 상단에 표시, 잠금 화면에 프로필 사진으로 표시, 대화창으로 표시, 방해 금지 모드를 무시함"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"우선순위"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱은 대화 기능을 지원하지 않습니다."</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"의견"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"닫기"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"다시 표시하지 않음"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"이 알림은 수정할 수 없습니다."</string>
@@ -1143,7 +1139,7 @@
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"삭제"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"전환"</string>
<string name="accessibility_floating_button_action_edit" msgid="1688227814600463987">"수정"</string>
- <string name="quick_controls_title" msgid="6839108006171302273">"기기 컨트롤"</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"기기 제어"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"컨트롤을 추가할 앱을 선택하세요"</string>
<string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{설정이 #개 추가되었습니다.}other{설정이 #개 추가되었습니다.}}"</string>
<string name="controls_removed" msgid="3731789252222856959">"삭제됨"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"지문으로 열기"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"인증이 필요합니다. 지문 센서를 터치하여 인증하세요."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"진행 중인 통화"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"진행 중"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"모바일 데이터"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"연결됨"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"일시적으로 연결됨"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"폴더블 기기를 펼치는 모습"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"폴더블 기기를 뒤집는 모습"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"전면 화면 켜짐"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"접은 상태"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"펼친 상태"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index bdbbf049376a..1916cbc21270 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Батареянын деңгээли белгисиз."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> менен туташкан."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> менен туташты."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Топту жайып көрсөтүү."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Колдонмону ачуу."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Интернет жок."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роуминг"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Өчүк"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Түйүн режимин колдонуп көрүңүз"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Кубатталып жатканда жактырган виджеттериңизди жана көшөгөлөрдү колдонуңуз."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Кеттик!"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Кубаттап жатканда жактырган көшөгөлөрдү көрсөтүңүз"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Колдонуучуну которуу"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ылдый түшүүчү меню"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Бул сеанстагы бардык колдонмолор жана аларга байланыштуу нерселер өчүрүлөт."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Cүйлөшүүлөр тууралуу билдирмелердин жогору жагында жана кулпуланган экранда профилдин сүрөтү, ошондой эле калкып чыкма билдирме түрүндө көрүнүп, \"Тынчымды алба\" режимин токтотот"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Маанилүүлүгү"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунда оозеки сүйлөшкөнгө болбойт"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Пикир билдирүү"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Жабуу"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Экинчи көрсөтүлбөсүн"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Бул билдирмелерди өзгөртүүгө болбойт."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Манжаңыздын изи менен ачыңыз"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Аныктыкты текшерүү талап кылынат. Аныктыгын текшерүү үчүн манжа изинин сенсоруна тийип коюңуз."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Учурдагы чалуу"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Учурдагы"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобилдик трафик"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Туташты"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Убактылуу туташып турат"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Ачылып турган бүктөлмө түзмөк"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Оодарылып жаткан бүктөлмө түзмөк"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Маңдайкы экран күйгүзүлдү"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"бүктөлгөн"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"ачылган"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index 1acb34a9cccb..f61186d19e0b 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"ບໍ່ຮູ້ເປີເຊັນແບັດເຕີຣີ."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"ເຊື່ອມ​ຕໍ່​ຫາ <xliff:g id="BLUETOOTH">%s</xliff:g> ແລ້ວ."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"ເຊື່ອມຕໍ່ຫາ <xliff:g id="CAST">%s</xliff:g> ແລ້ວ."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"ຂະຫຍາຍກຸ່ມ."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"ເປີດແອັບພລິເຄຊັນ."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"ບໍ່ໄດ້ເຊື່ອມຕໍ່."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"ໂຣມມິງ"</string>
<string name="cell_data_off" msgid="4886198950247099526">"ປິດ"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"ສຳຫຼວດໂໝດ Hub"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"ເຂົ້າເຖິງວິດເຈັດ ແລະ ພາບພັກໜ້າຈໍທີ່ທ່ານມັກໃນລະຫວ່າງທີ່ສາກ."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"ມາເລີ່ມກັນເລີຍ"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"ສະແດງພາບພັກໜ້າຈໍທີ່ທ່ານມັກໃນລະຫວ່າງທີ່ສາກ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ສະຫຼັບຜູ້ໃຊ້"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ເມນູແບບດຶງລົງ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ແອັບຯ​ແລະ​ຂໍ້​ມູນ​ທັງ​ໝົດ​ໃນ​ເຊດ​ຊັນ​ນີ້​ຈະ​ຖືກ​ລຶບ​ອອກ."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"ສະແດງຢູ່ເທິງສຸດຂອງການແຈ້ງເຕືອນການສົນທະນາ ແລະ ເປັນຮູບໂປຣໄຟລ໌ຢູ່ໜ້າຈໍລັອກ, ປາກົດເປັນຟອງ, ສະແດງໃນໂໝດຫ້າມລົບກວນໄດ້"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ສຳຄັນ"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ່ຮອງຮັບຄຸນສົມບັດການສົນທະນາ"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ຄຳຕິຊົມ"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ປິດໄວ້"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"ບໍ່ຕ້ອງສະແດງອີກ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ບໍ່ສາມາດແກ້ໄຂການແຈ້ງເຕືອນເຫຼົ່ານີ້ໄດ້."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ໃຊ້ລາຍນິ້ວມືເພື່ອເປີດ"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"ຕ້ອງພິສູດຢືນຢັນ. ແຕະໃສ່ເຊັນເຊີລາຍນິ້ວມືເພື່ອພິສູດຢືນຢັນ."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"ສາຍທີ່ສົນທະນາຢູ່"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"ດຳເນີນຢູ່"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"ອິນເຕີເນັດມືຖື"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"ເຊື່ອມຕໍ່ແລ້ວ"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"ເຊື່ອມຕໍ່ແລ້ວຊົ່ວຄາວ"</string>
@@ -1399,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"ອຸປະກອນທີ່ພັບໄດ້ກຳລັງກາງອອກ"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"ອຸປະກອນທີ່ພັກໄດ້ກຳລັງປີ້ນໄປມາ"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"ເປີດໜ້າຈໍດ້ານໜ້າແລ້ວ"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"ເລື່ອນເພື່ອໃຊ້ໜ້າຈໍດ້ານໃນ"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"ພັບແລ້ວ"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"ກາງອອກແລ້ວ"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index dc182c7dea53..88f9399c3a56 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -142,7 +142,7 @@
<string name="share_to_app_stop_dialog_title_generic" msgid="9079161538135843648">"Nebebendrinti?"</string>
<string name="share_to_app_stop_dialog_message_entire_screen_with_host_app" msgid="522823522115375414">"Šiuo metu bendrinate visą ekraną su šia programa: <xliff:g id="HOST_APP_NAME">%1$s</xliff:g>"</string>
<string name="share_to_app_stop_dialog_message_entire_screen" msgid="5090115386271179270">"Šiuo metu bendrinate visą ekraną su programa"</string>
- <string name="share_to_app_stop_dialog_message_single_app_specific" msgid="5923772039347985172">"Šiuo metu bendrinate šią programą: <xliff:g id="APP_BEING_SHARED_NAME">%1$s</xliff:g>"</string>
+ <string name="share_to_app_stop_dialog_message_single_app_specific" msgid="5923772039347985172">"Šiuo metu bendrinate programą „<xliff:g id="APP_BEING_SHARED_NAME">%1$s</xliff:g>“"</string>
<string name="share_to_app_stop_dialog_message_single_app_generic" msgid="6681016774654578261">"Šiuo metu bendrinate programą"</string>
<string name="share_to_app_stop_dialog_message_generic" msgid="7622174291691249392">"Šiuo metu bendrinate su programa"</string>
<string name="share_to_app_stop_dialog_button" msgid="6334056916284230217">"Nebebendrinti"</string>
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Rodoma pokalbių pranešimų viršuje ir kaip profilio nuotrauka užrakinimo ekrane, burbule, pertraukia netrukdymo režimą"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritetiniai"</string>
<string name="no_shortcut" msgid="8257177117568230126">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ nepalaiko pokalbių funkcijų"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Atsiliepimai"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Uždaryti"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Neberodyti"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Šių pranešimų keisti negalima."</string>
@@ -1323,7 +1322,7 @@
<string name="see_all_networks" msgid="3773666844913168122">"Žiūrėti viską"</string>
<string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"Norėdami perjungti tinklus, atjunkite eternetą"</string>
<string name="wifi_scan_notify_message" msgid="3753839537448621794">"Kad pagerintų įrenginio funkcijas, programos ir paslaugos vis tiek gali bet kada nuskaityti ieškodamos „Wi‑Fi“ tinklų, net jei „Wi‑Fi“ išjungtas. Tai galite pakeisti „Wi-Fi“ nuskaitymo nustatymuose. "<annotation id="link">"Pakeisti"</annotation></string>
- <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Išjungti lėktuvo režimą"</string>
+ <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Išj. lėk. rež."</string>
<string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"„<xliff:g id="APPNAME">%1$s</xliff:g>“ nori prie sparčiųjų nustatymų pridėti toliau pateiktą išklotinės elementą"</string>
<string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Pridėti išklotinės elementą"</string>
<string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Nepridėti išklotinės elemento"</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Lankstomasis įrenginys išlankstomas"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Lankstomasis įrenginys apverčiamas"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Priekinis ekranas įjungtas"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Slinkite, kad naudotumėte vidinį ekraną"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"sulenkta"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"nesulenkta"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
@@ -1486,7 +1486,7 @@
<string name="launch_keyboard_tutorial_notification_title" msgid="8849933155160522519">"Naršykite naudodamiesi klaviatūra"</string>
<string name="launch_keyboard_tutorial_notification_content" msgid="2880339951512757918">"Sužinokite apie sparčiuosius klavišus"</string>
<string name="launch_touchpad_tutorial_notification_title" msgid="2243780062772196901">"Naršykite naudodamiesi jutikline dalimi"</string>
- <string name="launch_touchpad_tutorial_notification_content" msgid="7931085031240753226">"Sužinokite jutiklinės dalies gestus"</string>
+ <string name="launch_touchpad_tutorial_notification_content" msgid="7931085031240753226">"Peržvelkite jutiklinės dalies gestus"</string>
<string name="launch_keyboard_touchpad_tutorial_notification_title" msgid="1940023776496198762">"Naršykite naudodamiesi klaviatūra ir jutikline dalimi"</string>
<string name="launch_keyboard_touchpad_tutorial_notification_content" msgid="1780725168171929365">"Sužinokite jutiklinės dalies gestus, sparčiuosius klavišus ir kt."</string>
<string name="touchpad_tutorial_back_gesture_button" msgid="3104716365403620315">"Grįžti"</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 5d7d87a0ac70..e0e38a140bee 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Akumulatora uzlādes līmenis procentos nav zināms."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Ir izveidots savienojum ar <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Savienots ar ierīci <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Izvērst grupu."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Atvērt lietojumprogrammu."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Savienojums nav izveidots."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Viesabonēšana"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Izslēgti"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Izpētiet centra režīmu"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Piekļūstiet iecienītajiem logrīkiem un ekrānsaudzētājiem uzlādes laikā."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Aiziet!"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Uzlādes laikā rādīt izlases ekrānsaudzētājus"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Mainīt lietotāju"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"novelkamā izvēlne"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Tiks dzēstas visas šīs sesijas lietotnes un dati."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Parādās sarunu paziņojumu augšdaļā un kā profila attēls bloķēšanas ekrānā, arī kā burbulis, pārtrauc režīmu “Netraucēt”."</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritārs"</string>
<string name="no_shortcut" msgid="8257177117568230126">"Lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g> netiek atbalstītas sarunu funkcijas."</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Atsauksmes"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Nerādīt"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Vairs nerādīt"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Šos paziņojumus nevar modificēt."</string>
@@ -966,7 +962,7 @@
<string name="right_keycode" msgid="2480715509844798438">"Taustiņu kods labajā pusē"</string>
<string name="left_icon" msgid="5036278531966897006">"Ikona kreisajā pusē"</string>
<string name="right_icon" msgid="1103955040645237425">"Ikona labajā pusē"</string>
- <string name="drag_to_add_tiles" msgid="8933270127508303672">"Lai pievienotu elementus, pieturiet tos un velciet"</string>
+ <string name="drag_to_add_tiles" msgid="8933270127508303672">"Lai pievienotu elementus, turiet un velciet tos"</string>
<string name="drag_to_rearrange_tiles" msgid="2143204300089638620">"Lai pārkārtotu elementus, turiet un velciet tos"</string>
<string name="drag_to_remove_tiles" msgid="4682194717573850385">"Lai noņemtu vienumus, velciet tos šeit."</string>
<string name="drag_to_remove_disabled" msgid="933046987838658850">"Nepieciešami vismaz <xliff:g id="MIN_NUM_TILES">%1$d</xliff:g> elementi"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Atvēršanai izmantojiet pirksta nospiedumu"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Nepieciešama autentifikācija. Pieskarieties pirksta nospieduma sensoram, lai veiktu autentificēšanu."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Notiekošs zvans"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Aktīva darbība"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilie dati"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Ir izveidots savienojums"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Īslaicīgi izveidots savienojums"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Salokāma ierīce tiek atlocīta"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Salokāma ierīce tiek apgriezta"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Priekšējais ekrāns ir ieslēgts"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"aizvērta"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"atvērta"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index 22b5ff4823bf..0a9ca89fd4d3 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Процентот на батеријата е непознат."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Поврзано со <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Поврзано со <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Проширете ја групата."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Отворете ја апликацијата."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Не е поврзана"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роаминг"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Исклучено"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Истражете го режимот Hub"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Пристапувајте до омилените виџети и штедачи на екран при полнење."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Ајде"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Прикажувајте ги омилените штедачи на екран при полнење"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Промени го корисникот"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"паѓачко мени"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Сите апликации и податоци во сесијава ќе се избришат."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Се прикажува најгоре во известувањата за разговор и како профилна слика на заклучен екран, се појавува како балонче, го прекинува „Не вознемирувај“"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Приоритетно"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> не поддржува функции за разговор"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Повратни информации"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Отфрли"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Не прикажувај повторно"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Овие известувања не може да се изменат"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Користете отпечаток за да се отвори"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Потребна е проверка. Допрете го сензорот за отпечаток за да автентицирате."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Тековен повик"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Во тек"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобилен интернет"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Поврзано"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Привремено поврзано"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Преклопувачки уред се отклопува"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Преклопувачки уред се врти"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Предниот екран е вклучен"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"затворен"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"отворен"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index 753b325df6b0..8ef9b7904765 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"സംഭാഷണ അറിയിപ്പുകളുടെ മുകളിലും സ്ക്രീൻ ലോക്കായിരിക്കുമ്പോൾ ഒരു പ്രൊഫൈൽ ചിത്രമായും ബബിൾ രൂപത്തിൽ ദൃശ്യമാകുന്നു, ശല്യപ്പെടുത്തരുത് മോഡ് തടസ്സപ്പെടുത്തുന്നു"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"മുൻഗണന"</string>
<string name="no_shortcut" msgid="8257177117568230126">"സംഭാഷണ ഫീച്ചറുകളെ <xliff:g id="APP_NAME">%1$s</xliff:g> പിന്തുണയ്‌ക്കുന്നില്ല"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ഫീഡ്ബാക്ക്"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ഡിസ്‌മിസ് ചെയ്യുക"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"വീണ്ടും കാണിക്കരുത്"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ഈ അറിയിപ്പുകൾ പരിഷ്ക്കരിക്കാനാവില്ല."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"ഫോൾഡ് ചെയ്യാവുന്ന ഉപകരണം അൺഫോൾഡ് ആകുന്നു"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"ഫോൾഡ് ചെയ്യാവുന്ന ഉപകരണം, കറങ്ങുന്ന വിധത്തിൽ ഫ്ലിപ്പ് ആകുന്നു"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"ഫ്രണ്ട് സ്ക്രീൻ ഓണാക്കി"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"ഉള്ളിലുള്ള സ്‌ക്രീൻ ഉപയോഗിക്കുന്നതിന് സ്ലൈഡുചെയ്യുക"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"ഫോൾഡ് ചെയ്തത്"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"അൺഫോൾഡ് ചെയ്തത്"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 9ef7ebd66cb3..feca24111f3d 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Батарейн хувь тодорхойгүй байна."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>-тай холбогдсон."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g>-д холбогдсон."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Бүлгийг дэлгэнэ үү."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Аппликейшныг нээнэ үү."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Холбогдоогүй."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роуминг"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Идэвхгүй"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Hub горимыг судлах"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Цэнэглэж байхад дуртай виджет, дэлгэц амраагчдаа хандана уу."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"За эхэлцгээе"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Цэнэглэж байхдаа дуртай дэлгэц амраагчаа харуулна уу"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Хэрэглэгчийг сэлгэх"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"эвхмэл цэс"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Энэ харилцан үйлдлийн бүх апп болон дата устах болно."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Харилцан ярианы мэдэгдлийн дээд талд болон түгжигдсэн дэлгэц дээр профайл зураг байдлаар харуулах бөгөөд бөмбөлөг хэлбэрээр харагдана. Бүү саад бол горимыг тасалдуулна"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Чухал"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> нь харилцан ярианы онцлогуудыг дэмждэггүй"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Санал хүсэлт"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Хаах"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Дахиж бүү харуул"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Эдгээр мэдэгдлийг өөрчлөх боломжгүй."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Нээхийн тулд хурууны хээг ашиглана уу"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Баталгаажуулалт шаардлагатай. Баталгаажуулахын тулд хурууны хээ мэдрэгчид хүрнэ үү."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Үргэлжилж буй дуудлага"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Үргэлжилж байгаа"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобайл дата"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Холбогдсон"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Түр зуур холбогдсон"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Эвхэгддэг төхөөрөмжийг дэлгэж байна"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Эвхэгддэг төхөөрөмжийг хөнтөрч байна"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Нүүрэн талын дэлгэцийг асаасан"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"эвхсэн"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"дэлгэсэн"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 1327a48a1533..a3c45f3f0870 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"बॅटरीच्या चार्जिंगची टक्केवारी माहित नाही."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> शी कनेक्‍ट केले."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> शी कनेक्ट केले."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"गटाचा विस्तार करा."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"अ‍ॅप उघडा."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"कनेक्ट केले नाही."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"रोमिंग"</string>
<string name="cell_data_off" msgid="4886198950247099526">"बंद"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"हब मोड एक्सप्लोर करा"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"चार्ज करत असताना तुमचे आवडते विजेट आणि स्क्रीन सेव्हर अ‍ॅक्सेस करा."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"चला सुरू करू या"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"चार्ज करत असताना तुमचे आवडते स्क्रीनसेव्हर दाखवा"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"वापरकर्ता स्विच करा"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"पुलडाउन मेनू"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"या सत्रातील सर्व अ‍ॅप्स आणि डेटा हटवला जाईल."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"संभाषण सूचनांच्या वरती आणि लॉक स्क्रीनवरील प्रोफाइल फोटो म्हणून दिसते, बबल म्हणून दिसते, व्यत्यय आणू नका यामध्ये अडथळा आणते"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"प्राधान्य"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> हे संभाषण वैशिष्ट्यांना सपोर्ट करत नाही"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"फीडबॅक"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"डिसमिस करा"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"पुन्हा दाखवू नका"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"या सूचनांमध्ये सुधारणा केली जाऊ शकत नाही."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"उघडण्यासाठी फिंगरप्रिंट वापरा"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"ऑथेंटिकेशन आवश्यक आहे. ऑथेंटिकेट करण्यासाठी फिंगरप्रिंट सेन्सरला स्पर्श करा."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"सुरू असलेला कॉल"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"सुरू असलेले"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"मोबाइल डेटा"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"कनेक्ट केले आहे"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"तात्पुरते कनेक्ट केलेले"</string>
@@ -1399,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"फोल्ड करता येण्यासारखे डिव्हाइस अनफोल्ड केले जात आहे"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"फोल्ड करता येण्यासारखे डिव्हाइस आजूबाजूला फ्लिप केले जात आहे"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"पुढील स्क्रीन सुरू केलेली आहे"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"आतील स्क्रीन वापरण्यासाठी स्लाइड करा"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"फोल्ड केलेले"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"फोल्ड न केलेले"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 91901145c731..bb7dcb86428f 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -570,7 +570,7 @@
<!-- no translation found for media_projection_entry_app_permission_dialog_option_text_entire_screen (5100078808078139706) -->
<skip />
<string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="5504288438067851086">"Apabila anda berkongsi seluruh skrin anda, apa-apa sahaja kandungan pada skrin anda boleh dilihat oleh <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Oleh hal yang demikian, berhati-hati dengan perkara seperti kata laluan, butiran pembayaran, mesej, foto dan audio serta video."</string>
- <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Apabila anda berkongsi apl, apa-apa sahaja kandungan yang dipaparkan atau dimainkan pada apl boleh dilihat oleh <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Oleh hal yang demikian, berhati-hati dengan perkara seperti kata laluan, butiran pembayaran, mesej, foto dan audio serta video."</string>
+ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Apabila anda berkongsi apl, apa-apa sahaja kandungan yang dipaparkan atau dimainkan dalam apl tersebut boleh dilihat oleh <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Oleh hal yang demikian, berhati-hati dengan perkara seperti kata laluan, butiran pembayaran, mesej, foto dan audio serta video."</string>
<string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Kongsi skrin"</string>
<string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> telah melumpuhkan pilihan ini"</string>
<string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Pilih apl untuk dikongsi"</string>
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Ditunjukkan di bahagian atas pemberitahuan perbualan dan sebagai gambar profil pada skrin kunci, muncul sebagai gelembung, mengganggu Jangan Ganggu"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Keutamaan"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak menyokong ciri perbualan"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Maklum balas"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Ketepikan"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Jangan tunjukkan lagi"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Pemberitahuan ini tidak boleh diubah suai."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Peranti boleh lipat dibuka"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Peranti boleh lipat diterbalikkan"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Skrin hadapan dihidupkan"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Luncurkan bar untuk menggunakan skrin dalaman"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"terlipat"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"tidak terlipat"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index 43f545dc4fbe..0219f695c6f0 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"ဘက်ထရီရာခိုင်နှုန်းကို မသိပါ။"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>သို့ ချိတ်ဆက်ထား"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> သို့ချိတ်ဆက်ထားပါသည်။"</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"အုပ်စုကို ပိုပြသည်။"</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"အပလီကေးရှင်းကို ဖွင့်သည်။"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"ချိတ်ဆက်မထားပါ"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"ပြင်ပကွန်ရက်သုံးခြင်း"</string>
<string name="cell_data_off" msgid="4886198950247099526">"ပိတ်"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"ထိန်းချုပ်စင်တာမုဒ် လေ့လာခြင်း"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"အားသွင်းနေစဉ် အကြိုက်ဆုံးဝိဂျက်များ၊ စခရင်နားချိန်ပုံများ ကြည့်နိုင်သည်။"</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"စကြစို့"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"အားသွင်းနေစဉ် သင့်အကြိုက်ဆုံး စခရင်နားချိန်ပုံများကို ပြသည်"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"အသုံးပြုသူကို ပြောင်းလဲရန်"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ဆွဲချမီနူး"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ဒီချိတ်ဆက်မှု ထဲက အက်ပ်များ အားလုံး နှင့် ဒေတာကို ဖျက်ပစ်မည်။"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"စကားဝိုင်း အကြောင်းကြားချက်များ၏ ထိပ်ပိုင်းနှင့် ပရိုဖိုင်ပုံအဖြစ် လော့ခ်မျက်နှာပြင်တွင် ပြသည်။ ပူဖောင်းကွက်အဖြစ် မြင်ရပြီး ‘မနှောင့်ယှက်ရ’ ကို ကြားဖြတ်သည်"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ဦးစားပေး"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> က စကားဝိုင်းဝန်ဆောင်မှုများကို မပံ့ပိုးပါ"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"အကြံပြုချက်"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ပယ်ရန်"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"ထပ်မပြပါနှင့်"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ဤအကြောင်းကြားချက်များကို ပြုပြင်၍ မရပါ။"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ဖွင့်ရန် လက်ဗွေကို သုံးပါ"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"အထောက်အထားစိစစ်ခြင်း လိုအပ်သည်။ အထောက်အထားစိစစ်ရန် လက်ဗွေ အာရုံခံကိရိယာကို ထိပါ။"</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"လက်ရှိခေါ်ဆိုမှု"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"လုပ်ဆောင်နေဆဲ"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"မိုဘိုင်းဒေတာ"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"ချိတ်ဆက်ထားသည်"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"ယာယီချိတ်ဆက်ထားသည်"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"ခေါက်နိုင်သောစက်ကို ဖြန့်လိုက်သည်"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"ခေါက်နိုင်သောစက်ကို တစ်ဘက်သို့ လှန်လိုက်သည်"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"ရှေ့စခရင် ဖွင့်ထားသည်"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"ခေါက်ထားသည်"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"ဖြန့်ထားသည်"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index cc0574cc78ff..15e568b1c687 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -133,7 +133,7 @@
<string name="screenrecord_save_error" msgid="5862648532560118815">"Feil ved lagring av skjermopptaket"</string>
<string name="screenrecord_start_error" msgid="2200660692479682368">"Feil ved start av skjermopptaket"</string>
<string name="screenrecord_stop_dialog_title" msgid="8716193661764511095">"Vil du stoppe opptaket?"</string>
- <string name="screenrecord_stop_dialog_message" msgid="6262768207331626817">"Du tar nå opp hele skjermen"</string>
+ <string name="screenrecord_stop_dialog_message" msgid="6262768207331626817">"Nå tar du opptak av hele skjermen"</string>
<string name="screenrecord_stop_dialog_message_specific_app" msgid="5995770227684523244">"Du tar nå opp <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="screenrecord_stop_dialog_button" msgid="2883812564938194350">"Stopp opptaket"</string>
<string name="share_to_app_chip_accessibility_label" msgid="4210256229976947065">"Deler skjermen"</string>
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Batteriprosenten er ukjent."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Koblet til <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Koblet til <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Utvid gruppen."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Åpne appen."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Ikke tilkoblet."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Av"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Utforsk Hub-modus"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Bruk moduler og skjermsparere mens du lader."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Sett i gang"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Vis skjermsparere du liker, under lading"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Bytt bruker"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rullegardinmeny"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alle apper og data i denne økten blir slettet."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Vises øverst på samtalevarsler og som et profilbilde på låseskjermen, vises som en boble, avbryter «Ikke forstyrr»"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> støtter ikke samtalefunksjoner"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Tilbakemelding"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Lukk"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Ikke vis igjen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Disse varslene kan ikke endres."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Bruk fingeravtrykk for å åpne"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autentisering kreves. Trykk på fingeravtrykkssensoren for å autentisere."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Aktiv samtale"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Kontinuerlig"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobildata"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Tilkoblet"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Koblet til midlertidig"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"En foldbar enhet blir brettet ut"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"En foldbar enhet blir snudd"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Frontskjermen er slått på"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"lagt sammen"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"åpen"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index cb0db8db416e..02285f209b88 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -169,7 +169,7 @@
<string name="immersive_cling_description" msgid="2717426731830851921">"यहाँबाट बाहिरिन स्क्रिनको सिरानबाट तलतिर स्वाइप गर्नुहोस्"</string>
<string name="immersive_cling_positive" msgid="3076681691468978568">"बुझेँ"</string>
<string name="accessibility_back" msgid="6530104400086152611">"पछाडि"</string>
- <string name="accessibility_home" msgid="5430449841237966217">"गृह"</string>
+ <string name="accessibility_home" msgid="5430449841237966217">"होम"</string>
<string name="accessibility_menu" msgid="2701163794470513040">"मेनु"</string>
<string name="accessibility_accessibility_button" msgid="4089042473497107709">"पहुँच"</string>
<string name="accessibility_rotate_button" msgid="1238584767612362586">"स्क्रिन घुमाउनुहोस्"</string>
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"ब्याट्रीमा कति प्रतिशत चार्ज छ भन्ने कुराको जानाकरी छैन।"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> मा जडित।"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> मा कनेक्ट गरियो।"</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"समूह एक्स्पान्ड गर्नुहोस्।"</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"एप खोल्नुहोस्।"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"जडान नगरिएको।"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"रोमिङ"</string>
<string name="cell_data_off" msgid="4886198950247099526">"निष्क्रिय पार्नु"</string>
@@ -352,7 +350,7 @@
<string name="quick_settings_cast_device_default_name" msgid="6988469571141331700">"बेनाम उपकरण"</string>
<string name="quick_settings_cast_detail_empty_text" msgid="2846282280014617785">"कुनै उपकरणहरू उपलब्ध छैन"</string>
<string name="quick_settings_cast_no_network" msgid="3863016850468559522">"Wi-Fi वा इन्टरनेट कनेक्सन छैन"</string>
- <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"उज्यालपन"</string>
+ <string name="quick_settings_brightness_dialog_title" msgid="4980669966716685588">"ब्राइटनेस"</string>
<string name="quick_settings_inversion_label" msgid="3501527749494755688">"कलर इन्भर्सन"</string>
<string name="quick_settings_color_correction_label" msgid="5636617913560474664">"कलर करेक्सन"</string>
<string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"फन्टको आकार"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"हब मोडको अन्वेषण गर्नुहोस्"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"चार्ज गर्दै गर्दा आफूलाई मन पर्ने विजेट तथा स्क्रिन सेभर एक्सेस गर्नुहोस्।"</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"सुरु गरौँ"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"चार्ज भइरहेका बेला आफूलाई मन पर्ने स्क्रिनसेभरहरू देखाउनुहोस्"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"प्रयोगकर्ता फेर्नुहोस्"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"पुलडाउन मेनु"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"यो सत्रमा भएका सबै एपहरू र डेटा मेटाइने छ।"</string>
@@ -565,7 +562,7 @@
<string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"रेकर्ड वा कास्ट गर्न थाल्ने हो?"</string>
<string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"यो फङ्सन प्रदान गर्ने सेवाले रेकर्ड वा कास्ट गर्दै गर्दा तपाईंको स्क्रिनमा देखिने सबै जानकारी अथवा तपाईंको डिभाइसबाट प्ले गरिने सबै सामग्री हेर्न तथा प्रयोग गर्न सक्छ। यसअन्तर्गत पासवर्ड, भुक्तानीसम्बन्धी विवरण, फोटो, म्यासेज र तपाईंले प्ले गर्ने अडियो जस्ता कुराहरू समावेश हुन्छन्।"</string>
<string name="screen_share_generic_app_selector_title" msgid="8331515850599218288">"कुनै एप सेयर वा रेकर्ड गर्नुहोस्"</string>
- <string name="media_projection_entry_app_permission_dialog_title" msgid="4613857256721708062">"स्क्रिन <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> सँग सेयर गर्ने हो?"</string>
+ <string name="media_projection_entry_app_permission_dialog_title" msgid="4613857256721708062">"आफ्नो स्क्रिन <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> मा सेयर गर्ने हो?"</string>
<string name="screen_share_permission_dialog_option_single_app" msgid="2974054871681567314">"एउटा एप सेयर गर्नुहोस्"</string>
<!-- no translation found for media_projection_entry_app_permission_dialog_option_text_single_app (2308901434964846084) -->
<skip />
@@ -695,7 +692,7 @@
<string name="stream_ring" msgid="7550670036738697526">"घन्टी"</string>
<string name="stream_music" msgid="2188224742361847580">"मिडिया"</string>
<string name="stream_alarm" msgid="16058075093011694">"अलार्म"</string>
- <string name="stream_notification" msgid="7930294049046243939">"सूचना"</string>
+ <string name="stream_notification" msgid="7930294049046243939">"नोटिफिकेसन"</string>
<string name="stream_bluetooth_sco" msgid="6234562365528664331">"ब्लुटुथ"</string>
<string name="stream_dtmf" msgid="7322536356554673067">"दोहोरो बहु टोनको फ्रिक्वेन्सी"</string>
<string name="stream_accessibility" msgid="3873610336741987152">"पहुँच"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"यो वार्तालापका सूचनाहरूको सिरानमा, बबलका रूपमा र लक स्क्रिनमा प्रोफाइल फोटोका रूपमा देखिन्छ। साथै, यसले गर्दा \'बाधा नपुऱ्याउनुहोस्\' नामक सुविधामा अवरोध आउँछ"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"प्राथमिकता"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा वार्तालापसम्बन्धी सुविधा प्रयोग गर्न मिल्दैन"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"प्रतिक्रिया"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"हटाउनुहोस्"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"फेरि नदेखाउनुहोस्"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"यी सूचनाहरू परिमार्जन गर्न मिल्दैन।"</string>
@@ -862,7 +858,7 @@
<string name="keyboard_key_numpad_template" msgid="7316338238459991821">"नमप्याड <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="notif_inline_reply_remove_attachment_description" msgid="7954075334095405429">"एट्याचमेन्ट हटाउनुहोस्"</string>
<string name="keyboard_shortcut_group_system" msgid="1583416273777875970">"प्रणाली"</string>
- <string name="keyboard_shortcut_group_system_home" msgid="7465138628692109907">"गृह"</string>
+ <string name="keyboard_shortcut_group_system_home" msgid="7465138628692109907">"होम"</string>
<string name="keyboard_shortcut_group_system_recents" msgid="8628108256824616927">"हालैका"</string>
<string name="keyboard_shortcut_group_system_back" msgid="1055709713218453863">"पछाडि"</string>
<string name="keyboard_shortcut_group_system_notifications" msgid="3615971650562485878">"नोटिफिकेसनहरू"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"फिंगरप्रिन्ट प्रयोग गरी खोल्नुहोस्"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"पुष्टि गर्नु पर्ने हुन्छ। पुष्टि गर्न फिंगरप्रिन्ट सेन्सर छुनुहोस्।"</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"कल भइरहेको"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"जारी"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"मोबाइल डेटा"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"इन्टरनेटमा कनेक्ट गरिएको छ"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"यसमा केही समयका लागि कनेक्ट गरिएको हो"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"फोल्डेबल डिभाइस अनफोल्ड गरेको देखाइएको एनिमेसन"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"फोल्डेबल डिभाइस यताउता पल्टाएर देखाइएको एनिमेसन"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"अगाडिको स्क्रिन अन गरिएको छ"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"फोल्ड गरिएको"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"अनफोल्ड गरिएको"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-night/colors.xml b/packages/SystemUI/res/values-night/colors.xml
index 326be99b8a65..85182a02faaf 100644
--- a/packages/SystemUI/res/values-night/colors.xml
+++ b/packages/SystemUI/res/values-night/colors.xml
@@ -110,12 +110,12 @@
<!-- Dark theme base colors for notification shade/scrim, the alpha component is adjusted
programmatically to match the spec -->
- <color name="shade_panel">@android:color/system_accent1_800</color>
- <color name="surface_effect_0">@android:color/system_accent1_800</color>
+ <color name="shade_panel_base">@android:color/system_accent1_800</color>
+ <color name="notification_scrim_base">@android:color/system_accent1_800</color>
- <!-- todo(b/388891904) Remove updated color references once they are available. -->
- <color name="shade_panel_base">@color/shade_panel</color>
- <color name="notification_scrim_base">@color/surface_effect_0</color>
+ <!-- Dark theme fallback colors for notification shade/scrim -->
+ <color name="shade_panel_fallback">@android:color/system_accent2_800</color>
+ <color name="notification_scrim_fallback">@android:color/system_surface_dim_dark</color>
<!-- Keyboard shortcut helper dialog -->
<color name="ksh_key_item_color">@*android:color/system_on_surface_variant_dark</color>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 26b88a951632..99c8838db1cc 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Wordt getoond bovenaan gespreksmeldingen en als profielfoto op het vergrendelscherm, verschijnt als bubbel, onderbreekt Niet storen"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioriteit"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ondersteunt geen gespreksfuncties"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Sluiten"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Niet meer tonen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Deze meldingen kunnen niet worden aangepast."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Opvouwbaar apparaat wordt uitgevouwen"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Opvouwbaar apparaat wordt gedraaid"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Scherm aan voorzijde aangezet"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Schuiven om het binnenste scherm te gebruiken"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"dichtgevouwen"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"opengevouwen"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index 768ab7acc026..5847a9a968ba 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"ବ୍ୟାଟେରୀ ଶତକଡ଼ା ଅଜଣା ଅଟେ।"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> ସହ ସଂଯୁକ୍ତ"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> ସହିତ ସଂଯୁକ୍ତ।"</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"ଗ୍ରୁପକୁ ବିସ୍ତାର କରନ୍ତୁ।"</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"ଆପ୍ଲିକେସନ ଖୋଲନ୍ତୁ।"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"କନେକ୍ଟ ହୋଇନାହିଁ।"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"ରୋମିଙ୍ଗ"</string>
<string name="cell_data_off" msgid="4886198950247099526">"ବନ୍ଦ ଅଛି"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"ହବ ମୋଡକୁ ଏକ୍ସପ୍ଲୋର କରନ୍ତୁ"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"ଚାର୍ଜ କରିବା ସମୟରେ ଆପଣଙ୍କ ପସନ୍ଦର ୱିଜେଟ ଏବଂ ସ୍କ୍ରିନ ସେଭରଗୁଡ଼ିକୁ ଆକ୍ସେସ କରନ୍ତୁ।"</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"ଚାଲନ୍ତୁ ଆରମ୍ଭ କରିବା"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"ଚାର୍ଜ କରିବା ସମୟରେ ଆପଣଙ୍କ ପସନ୍ଦର ସ୍କ୍ରିନସେଭରଗୁଡ଼ିକ ଦେଖାନ୍ତୁ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ୟୁଜର୍‍ ବଦଳାନ୍ତୁ"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ପୁଲଡାଉନ ମେନୁ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ଏହି ସେସନର ସମସ୍ତ ଆପ୍‌ ଓ ଡାଟା ଡିଲିଟ୍‌ ହୋଇଯିବ।"</string>
@@ -565,7 +562,7 @@
<string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"ରେକର୍ଡିଂ ବା କାଷ୍ଟିଂ ଆରମ୍ଭ କରିବେ?"</string>
<string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"ରେକର୍ଡ ବା କାଷ୍ଟ କରିବା ସମୟରେ ଆପଣଙ୍କ ଡିଭାଇସରୁ ପ୍ଲେ ହେଉଥିବା କିମ୍ବା ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଦେଖାଯାଉଥିବା ସମସ୍ତ ସୂଚନାକୁ ଏହି ଫଙ୍କସନ ପ୍ରଦାନ କରୁଥିବା ସେବାର ଆକ୍ସେସ ରହିବ। ଏଥିରେ ପାସୱାର୍ଡ, ପେମେଣ୍ଟ ବିବରଣୀ, ଫଟୋ, ମେସେଜ ଏବଂ ଆପଣ ପ୍ଲେ କରୁଥିବା ଅଡିଓ ପରି ସୂଚନା ଅନ୍ତର୍ଭୁକ୍ତ ଅଛି।"</string>
<string name="screen_share_generic_app_selector_title" msgid="8331515850599218288">"ଏକ ଆପକୁ ସେୟାର କିମ୍ବା ରେକର୍ଡ କରନ୍ତୁ"</string>
- <string name="media_projection_entry_app_permission_dialog_title" msgid="4613857256721708062">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ସହ ଆପଣଙ୍କ ସ୍କ୍ରିନକୁ ସେୟାର କରନ୍ତୁ?"</string>
+ <string name="media_projection_entry_app_permission_dialog_title" msgid="4613857256721708062">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ସହ ଆପଣଙ୍କ ସ୍କ୍ରିନକୁ ସେୟାର କରିବେ?"</string>
<string name="screen_share_permission_dialog_option_single_app" msgid="2974054871681567314">"ଗୋଟିଏ ଆପ ସେୟାର କରନ୍ତୁ"</string>
<!-- no translation found for media_projection_entry_app_permission_dialog_option_text_single_app (2308901434964846084) -->
<skip />
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"ବାର୍ତ୍ତାଳାପ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକର ଶୀର୍ଷରେ ଏବଂ ଲକ୍ ସ୍କ୍ରିନରେ ଏକ ପ୍ରୋଫାଇଲ୍ ଛବି ଭାବେ ଦେଖାଏ, ଏକ ବବଲ୍ ଭାବେ ଦେଖାଯାଏ, \'ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\'କୁ ବାଧା ଦିଏ"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ପ୍ରାଥମିକତା"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ବାର୍ତ୍ତାଳାପ ଫିଚରଗୁଡ଼ିକୁ ସମର୍ଥନ କରେ ନାହିଁ"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ମତାମତ"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ଖାରଜ କରନ୍ତୁ"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"ପୁଣି ଶୋ କରନ୍ତୁ ନାହିଁ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ପରିବର୍ତ୍ତନ କରିହେବ ନାହିଁ।"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"ଖୋଲିବାକୁ ଟିପଚିହ୍ନ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"ପ୍ରମାଣୀକରଣ ଆବଶ୍ୟକ। ପ୍ରମାଣୀକରଣ କରିବାକୁ ଟିପଚିହ୍ନ ସେନ୍ସରକୁ ସ୍ପର୍ଶ କରନ୍ତୁ।"</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"ଚାଲିଥିବା କଲ"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"ଚାଲୁଥିବା"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"ମୋବାଇଲ ଡାଟା"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"ସଂଯୋଗ କରାଯାଇଛି"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"ଅସ୍ଥାୟୀ ରୂପେ କନେକ୍ଟ କରାଯାଇଛି"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"ଫୋଲ୍ଡ କରାଯାଇପାରୁଥିବା ଡିଭାଇସକୁ ଅନଫୋଲ୍ଡ କରାଯାଉଛି"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"ଫୋଲ୍ଡ କରାଯାଇପାରୁଥିବା ଡିଭାଇସକୁ ଫ୍ଲିପ କରାଯାଉଛି"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"ସାମ୍ନା ସ୍କ୍ରିନ ଚାଲୁ ଅଛି"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"ଫୋଲ୍ଡେଡ"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"ଅନଫୋଲ୍ଡେଡ"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index a61ea1a37a7f..17757b896f5b 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"ਗੱਲਬਾਤ ਸੂਚਨਾਵਾਂ ਦੇ ਸਿਖਰ \'ਤੇ ਅਤੇ ਲਾਕ ਸਕ੍ਰੀਨ \'ਤੇ ਪ੍ਰੋਫਾਈਲ ਤਸਵੀਰ ਵਜੋਂ ਦਿਖਾਈਆਂ ਜਾਂਦੀਆਂ ਹਨ, ਜੋ ਕਿ ਬਬਲ ਵਜੋਂ ਦਿਸਦੀਆਂ ਹਨ ਅਤੇ \'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਸੁਵਿਧਾ ਵਿੱਚ ਵਿਘਨ ਵੀ ਪਾ ਸਕਦੀਆਂ ਹਨ"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ਤਰਜੀਹ"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਐਪ ਗੱਲਬਾਤ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੀ"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ਵਿਚਾਰ"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ਖਾਰਜ ਕਰੋ"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"ਦੁਬਾਰਾ ਨਾ ਦਿਖਾਓ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਸੋਧਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।"</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"ਮੋੜਨਯੋਗ ਡੀਵਾਈਸ ਨੂੰ ਖੋਲ੍ਹਿਆ ਜਾ ਰਿਹਾ ਹੈ"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"ਮੋੜਨਯੋਗ ਡੀਵਾਈਸ ਨੂੰ ਆਲੇ-ਦੁਆਲੇ ਫਲਿੱਪ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"ਅਗਲੀ ਸਕ੍ਰੀਨ ਚਾਲੂ ਕੀਤੀ ਗਈ"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"ਅੰਦਰਲੀ ਸਕ੍ਰੀਨ ਵਰਤਣ ਲਈ ਸਲਾਈਡ ਕਰੋ"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"ਫੋਲਡਯੋਗ ਡੀਵਾਈਸ"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"ਅਣਫੋਲਡਯੋਗ ਡੀਵਾਈਸ"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 2e2a3b4623c0..c0a283113568 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Poziom naładowania baterii jest nieznany."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Połączono z <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Połączono z urządzeniem <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Rozwiń grupę."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Otwórz aplikację."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nie połączono."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Wył."</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Odkryj tryb centrali"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Podczas ładowania możesz korzystać z ulubionych widżetów i wygaszaczy ekranu."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Do dzieła"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Podczas ładowania wyświetlaj ulubione wygaszacze ekranu"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Przełącz użytkownika"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Wszystkie aplikacje i dane w tej sesji zostaną usunięte."</string>
@@ -576,7 +573,7 @@
<string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Kiedy udostępniasz obraz z aplikacji <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>, widoczne jest wszystko to, co jest w niej wyświetlane lub odtwarzane. Dlatego zachowaj ostrożność w zakresie haseł, danych do płatności, wiadomości, zdjęć, audio i filmów."</string>
<string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Udostępnij ekran"</string>
<string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ma wyłączoną tę opcję"</string>
- <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Wybieranie aplikacji do udostępniania"</string>
+ <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Wybierz aplikację do udostępniania"</string>
<string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Włączyć przesyłanie treści wyświetlanych na ekranie?"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Przesyłanie obrazu z 1 aplikacji"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_entire_screen" msgid="8389508187954155307">"Przesyłanie całego ekranu"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Wyświetla się u góry powiadomień w rozmowach oraz jako zdjęcie profilowe na ekranie blokady, jako dymek, przerywa działanie trybu Nie przeszkadzać"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Priorytetowe"</string>
<string name="no_shortcut" msgid="8257177117568230126">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> nie obsługuje funkcji rozmów"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Opinia"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Zamknij"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Nie pokazuj ponownie"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Tych powiadomień nie można zmodyfikować."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"By otworzyć, użyj odcisku palca"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Wymagane uwierzytelnienie. Dotknij czytnika liniii papilarnych, by uwierzytelnić."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Trwa rozmowa"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"W toku"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobilna transmisja danych"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Połączono"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Tymczasowe połączenie"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Składane urządzenie jest rozkładane"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Składane urządzenie jest obracane"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Ekran przedni jest włączony"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"po zamknięciu"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"po otwarciu"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index abba6885838b..c1a8ec4f5b0e 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -123,7 +123,7 @@
<string name="screenrecord_mic_label" msgid="2111264835791332350">"Microfone"</string>
<string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Áudio e microfone do dispositivo"</string>
<string name="screenrecord_continue" msgid="4055347133700593164">"Iniciar"</string>
- <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Gravando tela"</string>
+ <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Gravando a tela"</string>
<string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Gravando tela e áudio"</string>
<string name="screenrecord_taps_label" msgid="1595690528298857649">"Mostrar toques na tela"</string>
<string name="screenrecord_stop_label" msgid="72699670052087989">"Parar"</string>
@@ -731,7 +731,7 @@
<string name="volume_panel_hint_muted" msgid="1124844870181285320">"som desativado"</string>
<string name="volume_panel_hint_vibrate" msgid="4136223145435914132">"vibrar"</string>
<string name="media_output_label_title" msgid="872824698593182505">"Tocando <xliff:g id="LABEL">%s</xliff:g> em"</string>
- <string name="media_output_title_without_playing" msgid="3825663683169305013">"Áudio definido para"</string>
+ <string name="media_output_title_without_playing" msgid="3825663683169305013">"Onde vai tocar:"</string>
<string name="media_output_title_ongoing_call" msgid="208426888064112006">"Ligando"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"Sintonizador System UI"</string>
<string name="status_bar" msgid="4357390266055077437">"Barra de status"</string>
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Aparecem na parte superior das notificações de conversa, como uma foto do perfil na tela de bloqueio e como um balão. Interrompem o Não perturbe."</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritárias"</string>
<string name="no_shortcut" msgid="8257177117568230126">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> não é compatível com recursos de conversa"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Enviar feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Dispensar"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Não mostrar novamente"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Não é possível modificar essas notificações."</string>
@@ -1140,7 +1139,7 @@
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Remover"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"alternar"</string>
<string name="accessibility_floating_button_action_edit" msgid="1688227814600463987">"Editar"</string>
- <string name="quick_controls_title" msgid="6839108006171302273">"Controles do disp."</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Controles do dispositivo"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Escolha um app para adicionar controles"</string>
<string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# controle adicionado.}one{# controle adicionado.}many{# de controles adicionados.}other{# controles adicionados.}}"</string>
<string name="controls_removed" msgid="3731789252222856959">"Removido"</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Dispositivo dobrável sendo aberto"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Dispositivo dobrável sendo virado"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Tela frontal ativada"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Deslize para usar a tela interna"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"fechado"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"aberto"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 833714c95e41..36384bce6ba2 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Aparece na parte superior das notificações de conversas e como uma imagem do perfil no ecrã de bloqueio, surge como um balão, interrompe o modo Não incomodar"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioridade"</string>
<string name="no_shortcut" msgid="8257177117568230126">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> não suporta funcionalidades de conversa."</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Ignorar"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Não mostrar novamente"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Não é possível modificar estas notificações."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Dispositivo dobrável a ser desdobrado"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Dispositivo dobrável a ser virado ao contrário"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Ecrã frontal ativado"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Deslize lentamente para usar o ecrã interior"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"fechado"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"aberto"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index abba6885838b..c1a8ec4f5b0e 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -123,7 +123,7 @@
<string name="screenrecord_mic_label" msgid="2111264835791332350">"Microfone"</string>
<string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"Áudio e microfone do dispositivo"</string>
<string name="screenrecord_continue" msgid="4055347133700593164">"Iniciar"</string>
- <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Gravando tela"</string>
+ <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"Gravando a tela"</string>
<string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"Gravando tela e áudio"</string>
<string name="screenrecord_taps_label" msgid="1595690528298857649">"Mostrar toques na tela"</string>
<string name="screenrecord_stop_label" msgid="72699670052087989">"Parar"</string>
@@ -731,7 +731,7 @@
<string name="volume_panel_hint_muted" msgid="1124844870181285320">"som desativado"</string>
<string name="volume_panel_hint_vibrate" msgid="4136223145435914132">"vibrar"</string>
<string name="media_output_label_title" msgid="872824698593182505">"Tocando <xliff:g id="LABEL">%s</xliff:g> em"</string>
- <string name="media_output_title_without_playing" msgid="3825663683169305013">"Áudio definido para"</string>
+ <string name="media_output_title_without_playing" msgid="3825663683169305013">"Onde vai tocar:"</string>
<string name="media_output_title_ongoing_call" msgid="208426888064112006">"Ligando"</string>
<string name="system_ui_tuner" msgid="1471348823289954729">"Sintonizador System UI"</string>
<string name="status_bar" msgid="4357390266055077437">"Barra de status"</string>
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Aparecem na parte superior das notificações de conversa, como uma foto do perfil na tela de bloqueio e como um balão. Interrompem o Não perturbe."</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritárias"</string>
<string name="no_shortcut" msgid="8257177117568230126">"O app <xliff:g id="APP_NAME">%1$s</xliff:g> não é compatível com recursos de conversa"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Enviar feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Dispensar"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Não mostrar novamente"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Não é possível modificar essas notificações."</string>
@@ -1140,7 +1139,7 @@
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Remover"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"alternar"</string>
<string name="accessibility_floating_button_action_edit" msgid="1688227814600463987">"Editar"</string>
- <string name="quick_controls_title" msgid="6839108006171302273">"Controles do disp."</string>
+ <string name="quick_controls_title" msgid="6839108006171302273">"Controles do dispositivo"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Escolha um app para adicionar controles"</string>
<string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# controle adicionado.}one{# controle adicionado.}many{# de controles adicionados.}other{# controles adicionados.}}"</string>
<string name="controls_removed" msgid="3731789252222856959">"Removido"</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Dispositivo dobrável sendo aberto"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Dispositivo dobrável sendo virado"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Tela frontal ativada"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Deslize para usar a tela interna"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"fechado"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"aberto"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 3cfe7b83fff9..beb3c1166684 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Procentajul bateriei este necunoscut."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Conectat la <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"S-a stabilit conexiunea la <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Extinde grupul."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Deschide aplicația."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Neconectat."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Dezactivate"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Explorează modul hub"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Accesează widgeturile și screensaverele preferate în timpul încărcării."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Să începem"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Afișează screensaverele preferate în timpul încărcării"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Schimbă utilizatorul"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"meniu vertical"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Toate aplicațiile și datele din această sesiune vor fi șterse."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Se afișează în partea de sus a notificărilor pentru conversații și ca fotografie de profil pe ecranul de blocare, apare ca un balon, întrerupe funcția Nu deranja"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritate"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu acceptă funcții pentru conversații"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Închide"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Nu mai afișa"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Aceste notificări nu pot fi modificate."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Folosește amprenta ca să deschizi"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autentificare obligatorie. Atinge senzorul de amprentă pentru a te autentifica."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Apel în desfășurare"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"În desfășurare"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Date mobile"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Conectat"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Conectat temporar"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Dispozitiv pliabil care este desfăcut"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Dispozitiv pliabil care este întors"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Ecranul frontal este activat"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"închis"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"deschis"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 7ec0513df942..e3f852c5bcc3 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Появляется в верхней части уведомлений о сообщениях, в виде всплывающего чата, а также в качестве фото профиля на заблокированном экране, прерывает режим \"Не беспокоить\"."</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Приоритет"</string>
<string name="no_shortcut" msgid="8257177117568230126">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" не поддерживает функции разговоров."</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Оставить отзыв"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Закрыть"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Больше не показывать"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Эти уведомления нельзя изменить."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Складное устройство в разложенном виде"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Перевернутое складное устройство"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Передний экран включен"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Проведите пальцем, чтобы переключиться на внутренний экран."</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"устройство сложено"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"устройство разложено"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
@@ -1418,7 +1418,7 @@
<string name="assistant_attention_content_description" msgid="4166330881435263596">"Обнаружен пользователь"</string>
<string name="set_default_notes_app_toast_content" msgid="2812374329662610753">"Задайте стандартное приложение для заметок в настройках."</string>
<string name="install_app" msgid="5066668100199613936">"Установить приложение"</string>
- <string name="dismissible_keyguard_swipe" msgid="8377597870094949432">"Чтобы продолжить, проведите вверх."</string>
+ <string name="dismissible_keyguard_swipe" msgid="8377597870094949432">"Чтобы продолжить, проведите вверх"</string>
<string name="connected_display_dialog_start_mirroring" msgid="6237895789920854982">"Дублировать на внешний дисплей?"</string>
<string name="connected_display_dialog_dual_display_stop_warning" msgid="4174707498892447947">"Для внутреннего экрана включится дублирование. Передний экран будет отключен."</string>
<string name="mirror_display" msgid="2515262008898122928">"Дублировать"</string>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index 0a173cf0068f..9ff67479aed2 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"සංවාද දැනුම්දීම්වල ඉහළින්ම සහ අගුලු තිරයේ ඇති පැතිකඩ පින්තූරයක් ලෙස පෙන්වයි, බුබුළක් ලෙස දිස් වේ, බාධා නොකරන්න සඳහා බාධා කරයි"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ප්‍රමුඛතාව"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> සංවාද විශේෂාංගවලට සහාය නොදක්වයි"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ප්‍රතිපෝෂණය"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"අස් කරන්න"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"නැවත නොපෙන්වන්න"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"මෙම දැනුම්දීම් වෙනස් කළ නොහැක."</string>
@@ -1395,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"දිග හැරෙමින් පවතින නැමිය හැකි උපාංගය"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"වටා පෙරළෙමින් තිබෙන නැමිය හැකි උපාංගය"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"ඉදිරිපස තිරය ක්‍රියාත්මකයි"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"නැවූ"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"නොනැවූ"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index fbbc48c877f8..a42eb1e6c35e 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Zobrazuje sa ako bublina v hornej časti upozornení konverzácie a profilová fotka na uzamknutej obrazovke, preruší režim bez vyrušení"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritné"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> nepodporuje funkcie konverzácie"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Spätná väzba"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Zavrieť"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Nabudúce nezobrazovať"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Tieto upozornenia sa nedajú upraviť."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Rozloženie skladacieho zariadenia"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Prevrátenie skladacieho zariadenia"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Predná obrazovka je zapnutá"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Ak chcete použiť vnútornú obrazovku, prejdite prstom"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"zložené"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"rozložené"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 4174934bfedd..c0e751b82c9f 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Prikaz v obliki oblačka na vrhu razdelka z obvestili za pogovor in kot profilna slika na zaklenjenem zaslonu, preglasitev načina Ne moti."</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prednostno"</string>
<string name="no_shortcut" msgid="8257177117568230126">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> ne podpira pogovornih funkcij."</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Povratne informacije"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Opusti"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Tega ne prikaži več"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Za ta obvestila ni mogoče spremeniti nastavitev."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Razpiranje zložljive naprave"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Obračanje zložljive naprave"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Sprednji zaslon je vklopljen"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Povlecite za uporabo notranjega zaslona"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"zaprto"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"razprto"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index f2c6301e1a0c..06cefd9c7734 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Përqindja e baterisë e panjohur."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Lidhur me <xliff:g id="BLUETOOTH">%s</xliff:g>"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Është lidhur me <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Zgjero grupin."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Hap aplikacionin."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Nuk është i lidhur."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Joaktiv"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Eksploro në modalitetin Hub"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Qasu në mbrojtësit e ekranit dhe miniaplikacionet e tua të preferuara gjatë karikimit."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Fillojmë"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Shfaq mbrojtësit e preferuar të ekranit gjatë karikimit"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Ndërro përdorues"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menyja me tërheqje poshtë"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Të gjitha aplikacionet dhe të dhënat në këtë sesion do të fshihen."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Shfaqet në krye të njoftimeve të bisedës dhe si fotografia e profilit në ekranin e kyçjes, shfaqet si flluskë dhe ndërpret modalitetin \"Mos shqetëso\""</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Me përparësi"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk mbështet veçoritë e bisedës"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Koment"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Hiq"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Mos e shfaq më"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Këto njoftime nuk mund të modifikohen."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Përdor gjurmën e gishtit për ta hapur"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Kërkohet vërtetimi. Prek sensorin e gjurmës së gishtit për t\'u vërtetuar."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Telefonatë në vazhdim"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Në vazhdim"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Të dhënat celulare"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Lidhur"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Lidhur përkohësisht"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Pajisja e palosshme duke u hapur"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Pajisja e palosshme duke u rrotulluar"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Ekrani i përparmë është aktivizuar"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"palosur"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"shpalosur"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 223242eb3cf9..3977058725a2 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -109,14 +109,14 @@
<string name="screenrecord_title" msgid="4257171601439507792">"Снимач екрана"</string>
<string name="screenrecord_background_processing_label" msgid="7244617554884238898">"Обрађујемо видео снимка екрана"</string>
<string name="screenrecord_channel_description" msgid="4147077128486138351">"Обавештење о сесији снимања екрана је активно"</string>
- <string name="screenrecord_permission_dialog_title" msgid="7415261783188749730">"Желите да снимите екран?"</string>
- <string name="screenrecord_permission_dialog_option_text_single_app" msgid="1996450687814647583">"Сними једну апликацију"</string>
+ <string name="screenrecord_permission_dialog_title" msgid="7415261783188749730">"Желите да снимате екран?"</string>
+ <string name="screenrecord_permission_dialog_option_text_single_app" msgid="1996450687814647583">"Снимaj једну апликацију"</string>
<string name="screenrecord_permission_dialog_option_text_entire_screen" msgid="4882406311415082016">"Сними овај екран"</string>
<string name="screenrecord_permission_dialog_option_text_entire_screen_for_display" msgid="4169494703993148253">"Сними %s"</string>
<string name="screenrecord_permission_dialog_warning_entire_screen" msgid="1321758636709366068">"Када снимате цео екран, снима се све што је на њему. Зато пазите на лозинке, информације о плаћању, поруке, слике, аудио и видео садржај."</string>
<string name="screenrecord_permission_dialog_warning_single_app" msgid="3738199712880063924">"Када снимате апликацију, снима се сав садржај који се приказује или пушта у њој. Зато пазите на лозинке, информације о плаћању, поруке, слике, аудио и видео садржај."</string>
<string name="screenrecord_permission_dialog_continue_entire_screen" msgid="5557974446773486600">"Сними екран"</string>
- <string name="screenrecord_app_selector_title" msgid="3854492366333954736">"Одаберите апликацију коју желите да снимите"</string>
+ <string name="screenrecord_app_selector_title" msgid="3854492366333954736">"Одаберите апликацију за снимање"</string>
<string name="screenrecord_audio_label" msgid="6183558856175159629">"Снимај звук"</string>
<string name="screenrecord_device_audio_label" msgid="9016927171280567791">"Звук уређаја"</string>
<string name="screenrecord_device_audio_description" msgid="4922694220572186193">"Звук са уређаја, на пример, музика, позиви и мелодије звона"</string>
@@ -573,7 +573,7 @@
<string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Када делите апликацију, <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> види сав садржај који се приказује или пушта у њој. Зато пазите на лозинке, информације о плаћању, поруке, слике, аудио и видео садржај."</string>
<string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Дели екран"</string>
<string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Апликација <xliff:g id="APP_NAME">%1$s</xliff:g> је онемогућила ову опцију"</string>
- <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Одаберите апликацију коју желите да делите"</string>
+ <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Одаберите апликацију за дељење"</string>
<string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Желите да пребаците екран?"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Пребаци једну апликацију"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_entire_screen" msgid="8389508187954155307">"Пребаци цео екран"</string>
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Приказује се у врху обавештења о конверзацијама и као слика профила на закључаном екрану, појављује се као облачић, прекида режим Не узнемиравај"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Приоритетно"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> не подржава функције конверзације"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Повратне информације"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Одбаци"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Не приказуј поново"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ова обавештења не могу да се мењају."</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Уређај на преклоп се отвара"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Уређај на преклоп се обрће"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Предњи екран је укључен"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"Превуците да бисте користили унутрашњи екран"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"затворено"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"отворено"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index b61353517e5c..7051a2a92aa7 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Okänd batterinivå."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Ansluten till <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Ansluten till <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Utöka gruppen."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Öppna appen."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Inte ansluten."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Roaming"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Av"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Utforska hubbläget"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Få åtkomst till dina favoritwidgetar och skärmsläckare under laddning."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Då kör vi"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Visa dina favoritskärmsläckare vid laddning"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Byt användare"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rullgardinsmeny"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alla appar och data i denna session kommer att raderas."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Visas högst upp i konversationsaviseringarna och som profilbild på låsskärmen, visas som bubbla, åsidosätter Stör ej"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Prioritet"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> har inte stöd för konversationsfunktioner"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Stäng"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Visa inte igen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Det går inte att ändra de här aviseringarna."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Öppna med fingeravtryck"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Autentisering krävs. Identifiera dig genom att trycka på fingeravtryckssensorn."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Pågående samtal"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Pågående"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobildata"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Ansluten"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Tillfälligt ansluten"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"En vikbar enhet viks upp"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"En vikbar enhet vänds"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Den främre skärmen har aktiverats"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"hopvikt"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"uppvikt"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index cae856503bed..2ead01a37907 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Asilimia ya betri haijulikani."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Imeunganishwa kwenye <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Imeunganishwa kwenye <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Panua kikundi."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Fungua programu."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Haijaunganishwa."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Mitandao ya ng\'ambo"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Zima"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Gundua hali ya kutumia ikiwa imepachikwa"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Fikia wijeti unazopenda na taswira za skrini wakati unachaji."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Anza"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Onyesha taswira za skrini uzipendazo wakati wa kuchaji"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Badili mtumiaji"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menyu ya kuvuta chini"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Data na programu zote katika kipindi hiki zitafutwa."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Huonyeshwa kwenye sehemu ya juu ya arifa za mazungumzo na kama picha ya wasifu kwenye skrini iliyofungwa. Huonekana kama kiputo na hukatiza kipengele cha Usinisumbue"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Kipaumbele"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> haitumii vipengele vya mazungumzo"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Maoni"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Ondoa"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Usionyeshe tena"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Arifa hizi haziwezi kubadilishwa."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Tumia alama ya kidole kufungua"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Uthibitishaji unahitajika. Gusa kitambua alama ya kidole ili uthibitishe."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Simu inayoendelea"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Inaendelea"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Data ya mtandao wa simu"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Imeunganishwa"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Imeunganishwa kwa muda"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Kifaa kinachokunjwa kikikunjuliwa"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Kifaa kinachokunjwa kikigeuzwa"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Umewasha skrini ya mbele"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"kimekunjwa"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"kimefunguliwa"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index d9781b6accc9..b37350cc3b82 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -116,14 +116,14 @@
<string name="screenrecord_permission_dialog_warning_entire_screen" msgid="1321758636709366068">"முழுத் திரையை நீங்கள் ரெக்கார்டு செய்யும்போது அதில் காட்டப்படும் அனைத்தும் ரெக்கார்டு செய்யப்படும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், படங்கள், ஆடியோ, வீடியோ போன்றவை குறித்துக் கவனத்துடன் இருங்கள்."</string>
<string name="screenrecord_permission_dialog_warning_single_app" msgid="3738199712880063924">"ஓர் ஆப்ஸை ரெக்கார்டு செய்யும்போது அதில் காட்டப்படும் அல்லது பிளே செய்யப்படும் அனைத்தும் ரெக்கார்டு செய்யப்படும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், படங்கள், ஆடியோ, வீடியோ போன்றவை குறித்துக் கவனத்துடன் இருங்கள்."</string>
<string name="screenrecord_permission_dialog_continue_entire_screen" msgid="5557974446773486600">"திரையை ரெக்கார்டு செய்"</string>
- <string name="screenrecord_app_selector_title" msgid="3854492366333954736">"ரெக்கார்டு செய்ய ஆப்ஸைத் தேர்வுசெய்தல்"</string>
+ <string name="screenrecord_app_selector_title" msgid="3854492366333954736">"ரெக்கார்டு செய்ய ஆப்ஸைத் தேர்வுசெய்க"</string>
<string name="screenrecord_audio_label" msgid="6183558856175159629">"ஆடியோவை ரெக்கார்டு செய்தல்"</string>
<string name="screenrecord_device_audio_label" msgid="9016927171280567791">"சாதன ஆடியோ"</string>
<string name="screenrecord_device_audio_description" msgid="4922694220572186193">"இசை, அழைப்புகள், ரிங்டோன்கள் போன்ற உங்கள் சாதனத்திலிருந்து வரும் ஒலி"</string>
<string name="screenrecord_mic_label" msgid="2111264835791332350">"மைக்ரோஃபோன்"</string>
<string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"சாதன ஆடியோ மற்றும் மைக்ரோஃபோன்"</string>
<string name="screenrecord_continue" msgid="4055347133700593164">"தொடங்கு"</string>
- <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"ஸ்கிரீன் ரெக்கார்ட் செய்யப்படுகிறது"</string>
+ <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"ஸ்கிரீன் ரெக்கார்டு செய்யப்படுகிறது"</string>
<string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"ஸ்கிரீன் மற்றும் ஆடியோ ரெக்கார்ட் செய்யப்படுகிறது"</string>
<string name="screenrecord_taps_label" msgid="1595690528298857649">"திரையில் உள்ள தொடுதல்களைக் காட்டு"</string>
<string name="screenrecord_stop_label" msgid="72699670052087989">"நிறுத்து"</string>
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"பேட்டரி சதவீதம் தெரியவில்லை."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g>க்கு இணைக்கப்பட்டது."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> உடன் இணைக்கப்பட்டுள்ளது."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"குழுவை விரிவாக்கும்."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"ஆப்ஸைத் திறக்கும்."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"இணைக்கப்படவில்லை."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"ரோமிங்"</string>
<string name="cell_data_off" msgid="4886198950247099526">"ஆஃப்"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"ஹப் பயன்முறையைக் கண்டறியுங்கள்"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"சார்ஜிங்கின்போது உங்களுக்குப் பிடித்த விட்ஜெட்களையும் ஸ்கிரீன் சேவர்களையும் அணுகலாம்."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"தொடங்குக"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"சார்ஜாகும்போது உங்களுக்கு விருப்பமான ஸ்கிரீன் சேவர்களைக் காட்டும்"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"பயனரை மாற்று"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"கீழ் இழுக்கும் மெனு"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"இந்த அமர்வின் எல்லா ஆப்ஸும் தரவும் நீக்கப்படும்."</string>
@@ -576,7 +573,7 @@
<string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"ஓர் ஆப்ஸைப் பகிரும்போது, அதில் காட்டப்படும்/பிளே செய்யப்படும் அனைத்தும் <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> இல் தெரியும். எனவே கடவுச்சொற்கள், பேமெண்ட் விவரங்கள், மெசேஜ்கள், படங்கள், ஆடியோ, வீடியோ போன்றவை குறித்துக் கவனத்துடன் இருங்கள்."</string>
<string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"திரையைப் பகிர்"</string>
<string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"<xliff:g id="APP_NAME">%1$s</xliff:g> ஆப்ஸ் இந்த விருப்பத்தை முடக்கியுள்ளது"</string>
- <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"பகிர ஆப்ஸைத் தேர்வுசெய்தல்"</string>
+ <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"பகிர ஆப்ஸைத் தேர்வுசெய்க"</string>
<string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"உங்கள் திரையை அலைபரப்ப வேண்டுமா?"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"ஓர் ஆப்ஸை அலைபரப்பு"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_entire_screen" msgid="8389508187954155307">"முழுத்திரையையும் அலைபரப்பு"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"உரையாடல் அறிவிப்புகளின் மேற்பகுதியில் காட்டப்படும், திரை பூட்டப்பட்டிருக்கும்போது சுயவிவரப் படமாகக் காட்டப்படும், குமிழாகத் தோன்றும், தொந்தரவு செய்ய வேண்டாம் அம்சம் இயக்கப்பட்டிருக்கும்போதும் காட்டப்படும்"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"முன்னுரிமை"</string>
<string name="no_shortcut" msgid="8257177117568230126">"உரையாடல் அம்சங்களை <xliff:g id="APP_NAME">%1$s</xliff:g> ஆதரிக்காது"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"கருத்து"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"மூடுக"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"மீண்டும் காட்டாதே"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"இந்த அறிவிப்புகளை மாற்ற இயலாது."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"கைரேகையைப் பயன்படுத்தி திறந்திடுங்கள்"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"அங்கீகாரம் தேவை. கைரேகை சென்சாரைத் தொட்டு அங்கீகரியுங்கள்."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"செயலில் உள்ள அழைப்பு"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"செயலிலுள்ளது"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"மொபைல் டேட்டா"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"இணைக்கப்பட்டது"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"தற்காலிகமாக இணைக்கப்பட்டுள்ளது"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"மடக்கத்தக்க சாதனம் திறக்கப்படுகிறது"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"மடக்கத்தக்க சாதனம் ஃபிளிப் செய்யப்பட்டு திருப்பப்படுகிறது"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"முன்பக்கத் திரை இயக்கப்பட்டுள்ளது"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"மடக்கப்பட்டது"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"விரிக்கப்பட்டது"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index e31f8662b38e..f64c737d8236 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -123,7 +123,7 @@
<string name="screenrecord_mic_label" msgid="2111264835791332350">"మైక్రోఫోన్"</string>
<string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"పరికరం ఆడియో, మైక్రోఫోన్"</string>
<string name="screenrecord_continue" msgid="4055347133700593164">"ప్రారంభించండి"</string>
- <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"స్క్రీన్ రికార్డింగ్ చేయబడుతోంది"</string>
+ <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"స్క్రీన్ రికార్డింగ్ అవుతోంది"</string>
<string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"స్క్రీన్, ఆడియో రికార్డింగ్ చేయబడుతున్నాయి"</string>
<string name="screenrecord_taps_label" msgid="1595690528298857649">"స్క్రీన్‌పై తాకే స్థానాలను చూపండి"</string>
<string name="screenrecord_stop_label" msgid="72699670052087989">"ఆపివేయండి"</string>
@@ -562,7 +562,7 @@
<string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"రికార్డ్ చేయడం లేదా ప్రసారం చేయడం ప్రారంభించాలా?"</string>
<string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"రికార్డ్ చేస్తున్నప్పుడు లేదా ప్రసారం చేస్తున్నప్పుడు మీ స్క్రీన్‌పై చూపబడిన లేదా మీ పరికరం నుండి ప్లే చేయబడిన సమాచారం మొత్తాన్ని, ఈ ఫంక్షన్‌ను అందిస్తున్న సర్వీస్ యాక్సెస్ చేయగలదు. ఈ సమాచారంలో, పాస్‌వర్డ్‌లు, పేమెంట్ వివరాలు, ఫోటోలు, మెసేజ్‌లు, మీరు ప్లే చేసే ఆడియో వంటివి ఉంటాయి."</string>
<string name="screen_share_generic_app_selector_title" msgid="8331515850599218288">"యాప్‌ను షేర్ చేయండి లేదా రికార్డ్ చేయండి"</string>
- <string name="media_projection_entry_app_permission_dialog_title" msgid="4613857256721708062">"మీ స్క్రీన్‌ను <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‌తో షేర్ చేయండి?"</string>
+ <string name="media_projection_entry_app_permission_dialog_title" msgid="4613857256721708062">"మీ స్క్రీన్‌ను <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>‌కు షేర్ చేయాలా?"</string>
<string name="screen_share_permission_dialog_option_single_app" msgid="2974054871681567314">"ఒక యాప్‌ను షేర్ చేయండి"</string>
<!-- no translation found for media_projection_entry_app_permission_dialog_option_text_single_app (2308901434964846084) -->
<skip />
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"సంభాషణ నోటిఫికేషన్‌ల ఎగువున, లాక్ స్క్రీన్‌లో ప్రొఫైల్ ఫోటో‌గా చూపిస్తుంది, బబుల్‌గా కనిపిస్తుంది, \'అంతరాయం కలిగించవద్దు\'ను అంతరాయం కలిగిస్తుంది"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ప్రాధాన్యత"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> సంభాషణ ఫీచర్‌లను సపోర్ట్ చేయదు"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ఫీడ్‌బ్యాక్"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"విస్మరించండి"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"మళ్లీ చూపవద్దు"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ఈ నోటిఫికేషన్‌లను ఎడిట్ చేయడం వీలుపడదు."</string>
@@ -1395,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"మడవగల పరికరం విప్పబడుతోంది"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"మడవగల పరికరం చుట్టూ తిప్పబడుతోంది"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"ముందు వైపు స్క్రీన్ ఆన్ అయింది"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"మడిచే సదుపాయం గల పరికరం"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"మడిచే సదుపాయం లేని పరికరం"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 8f34f8a2122e..316aab0270ff 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"แสดงที่ด้านบนของการแจ้งเตือนการสนทนาและเป็นรูปโปรไฟล์บนหน้าจอล็อก ปรากฏเป็นบับเบิล แสดงในโหมดห้ามรบกวน"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"สำคัญ"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ไม่รองรับฟีเจอร์การสนทนา"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ความคิดเห็น"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ปิด"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"ไม่ต้องแสดงอีก"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"แก้ไขการแจ้งเตือนเหล่านี้ไม่ได้"</string>
@@ -1395,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"อุปกรณ์ที่พับได้กำลังกางออก"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"อุปกรณ์ที่พับได้กำลังพลิกไปมา"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"เปิดหน้าจอด้านหน้าแล้ว"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"เลื่อนเพื่อใช้หน้าจอด้านใน"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"พับ"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"กางออก"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 2c72bd80c031..04dc6c7c7680 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -138,7 +138,7 @@
<string name="screenrecord_stop_dialog_button" msgid="2883812564938194350">"Huminto sa pag-record"</string>
<string name="share_to_app_chip_accessibility_label" msgid="4210256229976947065">"Ibinabahagi ang screen"</string>
<string name="share_to_app_chip_accessibility_label_generic" msgid="5517431657924536133">"Pagbabahagi ng content"</string>
- <string name="share_to_app_stop_dialog_title" msgid="9212915050910250438">"Ihinto ang pagbabahagi ng screen?"</string>
+ <string name="share_to_app_stop_dialog_title" msgid="9212915050910250438">"Ihinto ang pagshe-share ng screen?"</string>
<string name="share_to_app_stop_dialog_title_generic" msgid="9079161538135843648">"Itigil ang pagbabahagi?"</string>
<string name="share_to_app_stop_dialog_message_entire_screen_with_host_app" msgid="522823522115375414">"Kasalukuyan mong ibinabahagi ang iyong buong screen sa <xliff:g id="HOST_APP_NAME">%1$s</xliff:g>"</string>
<string name="share_to_app_stop_dialog_message_entire_screen" msgid="5090115386271179270">"Kasalukuyan mong ibinabahagi ang iyong buong screen sa isang app"</string>
@@ -562,7 +562,7 @@
<string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Magsimulang mag-record o mag-cast?"</string>
<string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Ang serbisyong nagbibigay ng function na ito ay magkakaroon ng access sa lahat ng impormasyong nakikita sa iyong screen o pine-play mula sa device mo habang nagre-record o nagka-cast. Kasama rito ang impormasyong tulad ng mga password, detalye ng pagbabayad, larawan, mensahe, at audio na pine-play mo."</string>
<string name="screen_share_generic_app_selector_title" msgid="8331515850599218288">"Magbahagi o mag-record ng app"</string>
- <string name="media_projection_entry_app_permission_dialog_title" msgid="4613857256721708062">"Ibahagi ang iyong screen sa <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+ <string name="media_projection_entry_app_permission_dialog_title" msgid="4613857256721708062">"I-share ang screen mo sa <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
<string name="screen_share_permission_dialog_option_single_app" msgid="2974054871681567314">"Mag-share ng isang app"</string>
<!-- no translation found for media_projection_entry_app_permission_dialog_option_text_single_app (2308901434964846084) -->
<skip />
@@ -570,10 +570,10 @@
<!-- no translation found for media_projection_entry_app_permission_dialog_option_text_entire_screen (5100078808078139706) -->
<skip />
<string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="5504288438067851086">"Kapag ibinahagi mo ang iyong buong screen, makikita ng <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ang kahit anong nasa screen mo. Kaya mag-ingat sa mga bagay-bagay tulad ng mga password, detalye ng pagbabayad, mensahe, larawan, at audio at video."</string>
- <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Kapag nagbabahagi ka ng app, makikita ng <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ang kahit anong ipinapakita o pine-play sa app na iyon. Kaya mag-ingat sa mga bagay-bagay tulad ng mga password, detalye ng pagbabayad, mensahe, larawan, at audio at video."</string>
+ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Kapag nagshe-share ka ng app, makikita ng <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ang kahit anong ipinapakita o pine-play sa app na iyon. Kaya mag-ingat sa mga bagay-bagay tulad ng mga password, detalye ng pagbabayad, mensahe, larawan, at audio at video."</string>
<string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Ibahagi ang screen"</string>
<string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Na-disable ng <xliff:g id="APP_NAME">%1$s</xliff:g> ang opsyong ito"</string>
- <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Pumili ng app na ibabahagi"</string>
+ <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Pumili ng app na ishe-share"</string>
<string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"I-cast ang iyong screen?"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Mag-cast ng isang app"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_entire_screen" msgid="8389508187954155307">"I-cast ang buong screen"</string>
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Makikita sa itaas ng mga notification ng pag-uusap at bilang larawan sa profile sa lock screen, lumalabas bilang bubble, naaabala ang Huwag Istorbohin"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Priyoridad"</string>
<string name="no_shortcut" msgid="8257177117568230126">"Hindi sinusuportahan ng <xliff:g id="APP_NAME">%1$s</xliff:g> ang mga feature ng pag-uusap"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"I-dismiss"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Huwag nang ipakita ulit"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Hindi puwedeng baguhin ang mga notification na ito."</string>
@@ -1395,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Ina-unfold na foldable na device"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Fini-flip na foldable na device"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Na-on ang screen sa harap"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"naka-fold"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"hindi naka-fold"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 4ca73158c240..f4a2c9260398 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -231,7 +231,7 @@
<string name="fingerprint_reenroll_failure_dialog_content" msgid="4733768492747300666">"Parmak izi kilidi kurulamadı. Tekrar denemek için Ayarlar\'a gidin."</string>
<string name="face_re_enroll_notification_title" msgid="1850838867718410520">"Yüz Tanıma Kilidi\'ni tekrar kurun"</string>
<string name="face_re_enroll_notification_name" msgid="7384545252206120659">"Yüz Tanıma Kilidi"</string>
- <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Yüz Tanıma Kilidi\'ni kurun"</string>
+ <string name="face_re_enroll_dialog_title" msgid="6392173708176069994">"Yüz Tanıma Kilidi\'ni ayarla"</string>
<string name="face_re_enroll_dialog_content" msgid="7353502359464038511">"Yüz Tanıma Kilidi\'ni tekrar kurmak için mevcut yüz modeliniz silinir.\n\nYüzünüzü kullanarak telefonunuzun kilidini açmak için bu özelliği yeniden kurmanız gerekir."</string>
<string name="face_reenroll_failure_dialog_content" msgid="7073947334397236935">"Yüz tanıma kilidi kurulamadı. Tekrar denemek için Ayarlar\'a gidin."</string>
<string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Parmak izi sensörüne dokunun"</string>
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Pil yüzdesi bilinmiyor."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> ile bağlı."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> bağlantısı kuruldu."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Grubu genişlet."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Uygulama aç."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Bağlanmadı."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Dolaşım"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Kapalı"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Hub Modu\'nu keşfedin"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Cihazınız şarj olurken en sevdiğiniz widget\'lara ve ekran koruyuculara erişin."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Başlayalım"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Cihazınız şarj olurken en sevdiğiniz ekran koruyucuları gösterin"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Kullanıcı değiştirme"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"açılır menü"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Bu oturumdaki tüm uygulamalar ve veriler silinecek."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Görüşme bildirimlerinin üstünde ve kilit ekranında profil resmi olarak gösterilir, baloncuk olarak görünür, Rahatsız Etmeyin\'i kesintiye uğratır"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Öncelikli"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g>, sohbet özelliklerini desteklemiyor"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Geri bildirim"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Kapat"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Tekrar gösterme"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirimler değiştirilemez."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Açmak için parmak izi kullanın"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Kimlik doğrulaması gerekiyor. Kimlik doğrulaması için parmak izi sensörüne dokunun."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Devam eden arama"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Devam ediyor"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Mobil veri"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Bağlı"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Geçici olarak bağlandı"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Katlanabilir cihaz açılıyor"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Katlanabilir cihaz döndürülüyor"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Ön ekran açıldı"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"katlanmış"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"katlanmamış"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index bf4444ee8898..7dab3db1d310 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Відсоток заряду акумулятора невідомий."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Підключено до <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Під’єднано до пристрою <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Розгорнути групу"</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Відкрити додаток"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Не з’єднано."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Роумінг"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Вимкнено"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Представляємо режим центру керування"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Використовуйте улюблені віджети й заставки, поки пристрій заряджається."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Почати"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Показувати улюблені заставки під час заряджання"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Змінити користувача"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"спадне меню"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Усі додатки й дані з цього сеансу буде видалено."</string>
@@ -565,7 +562,7 @@
<string name="media_projection_sys_service_dialog_title" msgid="3751133258891897878">"Почати запис або трансляцію?"</string>
<string name="media_projection_sys_service_dialog_warning" msgid="2443872865267330320">"Сервіс, що надає цю функцію, матиме доступ до всієї інформації, яка з’являється на екрані або відтворюється на пристрої під час запису чи трансляції, зокрема до паролів, платіжної інформації, фотографій, повідомлень і аудіофайлів."</string>
<string name="screen_share_generic_app_selector_title" msgid="8331515850599218288">"Показувати або записувати додаток"</string>
- <string name="media_projection_entry_app_permission_dialog_title" msgid="4613857256721708062">"Показати екран для додатка <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
+ <string name="media_projection_entry_app_permission_dialog_title" msgid="4613857256721708062">"Показати екран у додатку <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>?"</string>
<string name="screen_share_permission_dialog_option_single_app" msgid="2974054871681567314">"Показати один додаток"</string>
<!-- no translation found for media_projection_entry_app_permission_dialog_option_text_single_app (2308901434964846084) -->
<skip />
@@ -573,10 +570,10 @@
<!-- no translation found for media_projection_entry_app_permission_dialog_option_text_entire_screen (5100078808078139706) -->
<skip />
<string name="media_projection_entry_app_permission_dialog_warning_entire_screen" msgid="5504288438067851086">"Коли ви показуєте весь екран, для додатка <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> стає видимим увесь контент на ньому. Тому будьте обережні з паролями, повідомленнями, фотографіями, аудіо, відео, платіжною інформацією тощо."</string>
- <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Коли ви показуєте додаток, для додатка <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> стає видимим увесь контент, що відображається або відтворюється в ньому. Тому будьте обережні з паролями, повідомленнями, фотографіями, аудіо, відео, платіжною інформацією тощо."</string>
+ <string name="media_projection_entry_app_permission_dialog_warning_single_app" msgid="7094417930857938876">"Коли ви показуєте вікно додатка, увесь контент, що відображається або відтворюється в ньому, стає видимим у додатку <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g>. Тому будьте обережні з паролями, повідомленнями, фотографіями, аудіо, відео, платіжною інформацією тощо."</string>
<string name="media_projection_entry_app_permission_dialog_continue_entire_screen" msgid="1850848182344377579">"Показати екран"</string>
<string name="media_projection_entry_app_permission_dialog_single_app_disabled" msgid="8999903044874669995">"Додаток <xliff:g id="APP_NAME">%1$s</xliff:g> вимкнув цю опцію"</string>
- <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Виберіть додаток, яким хочете поділитися"</string>
+ <string name="media_projection_entry_share_app_selector_title" msgid="1419515119767501822">"Виберіть додаток для показу"</string>
<string name="media_projection_entry_cast_permission_dialog_title" msgid="752756942658159416">"Транслювати екран?"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_single_app" msgid="6073353940838561981">"Транслювати один додаток"</string>
<string name="media_projection_entry_cast_permission_dialog_option_text_entire_screen" msgid="8389508187954155307">"Транслювати весь екран"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"З’являється вгорі сповіщень про розмови і як зображення профілю на заблокованому екрані, відображається як спливаючий чат, перериває режим \"Не турбувати\""</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Пріоритет"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> не підтримує функції розмов"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Надіслати відгук"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Закрити"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Більше не показувати"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ці сповіщення не можна змінити."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Щоб відкрити, використайте відбиток пальця"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Пройдіть автентифікацію. Для цього торкніться сканера відбитків пальців."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Поточний дзвінок"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Поточна активність"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Мобільний трафік"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Підключено"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Тимчасово з’єднано"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Розкладний пристрій у розкладеному стані"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Розкладний пристрій обертається"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Передній екран увімкнено"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"складений"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"розкладений"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index 584375f8ac5f..646072122204 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -123,7 +123,7 @@
<string name="screenrecord_mic_label" msgid="2111264835791332350">"مائیکروفون"</string>
<string name="screenrecord_device_audio_and_mic_label" msgid="1831323771978646841">"آلہ کا آڈیو اور مائیکروفون"</string>
<string name="screenrecord_continue" msgid="4055347133700593164">"شروع کریں"</string>
- <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"ریکارڈنگ اسکرین"</string>
+ <string name="screenrecord_ongoing_screen_only" msgid="4459670242451527727">"اسکرین ریکارڈ ہو رہی ہے"</string>
<string name="screenrecord_ongoing_screen_and_audio" msgid="5351133763125180920">"اسکرین اور آڈیو کی ریکارڈنگ ہو رہی ہے"</string>
<string name="screenrecord_taps_label" msgid="1595690528298857649">"اسکرین پر کئے گئے ٹچز دکھائیں"</string>
<string name="screenrecord_stop_label" msgid="72699670052087989">"روکیں"</string>
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"بیٹری کی فیصد نامعلوم ہے۔"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"<xliff:g id="BLUETOOTH">%s</xliff:g> سے منسلک ہیں۔"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"<xliff:g id="CAST">%s</xliff:g> سے منسلک ہے۔"</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"گروپ کو پھیلائیں۔"</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"ایپلیکیشن کھولیں۔"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"مربوط نہیں ہے۔"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"رومنگ"</string>
<string name="cell_data_off" msgid="4886198950247099526">"آف ہے"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"ہب موڈ دریافت کریں"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"چارج کرتے وقت اپنے پسندیدہ ویجیٹس اور اسکرین سیورز تک رسائی حاصل کریں۔"</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"آئیے شروع کریں"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"چارج کرتے وقت اپنے پسندیدہ اسکرین سیورز دکھائیں"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"صارف سوئچ کریں"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"پل ڈاؤن مینیو"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"اس سیشن میں موجود سبھی ایپس اور ڈیٹا کو حذف کر دیا جائے گا۔"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"یہ گفتگو کی اطلاعات کے اوپری حصّے پر اور مقفل اسکرین پر پروفائل کی تصویر کے بطور دکھائی دیتا ہے، بلبلے کے بطور ظاہر ہوتا ہے، \'ڈسٹرب نہ کریں\' میں مداخلت کرتا ہے"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"ترجیح"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ایپ گفتگو کی خصوصیات کو سپورٹ نہیں کرتی ہے"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"تاثرات"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"برخاست کریں"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"دوبارہ نہ دکھائیں"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ان اطلاعات کی ترمیم نہیں کی جا سکتی۔"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"کھولنے کے لیے فنگر پرنٹ کا استعمال کریں"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"توثیق مطلوب ہے۔ توثیق کرنے کے لیے فنگر پرنٹ سینسر کو ٹچ کریں۔"</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"جاری کال"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"جاری ہے"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"موبائل ڈیٹا"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"منسلک ہے"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"عارضی طور پر منسلک ہے"</string>
@@ -1399,6 +1394,7 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"فولڈ ہونے والے آلے کو کھولا جا رہا ہے"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"فولڈ ہونے والے آلے کو گھمایا جا رہا ہے"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"فرنٹ اسکرین آن ہے"</string>
+ <string name="rear_display_unfolded_front_screen_on_slide_to_cancel" msgid="1455192420423012859">"اندرونی اسکرین کا استعمال کرنے کے لیے سلائیڈ کریں"</string>
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"فولڈ کردہ"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"اَن فولڈ کردہ"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index c69346f95c5c..6bcd9d6c4c1c 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -804,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Suhbat bildirishnomalari tepasida va ekran qulfida profil rasmi sifatida chiqariladi, bulutcha sifatida chiqadi, Bezovta qilinmasin rejimini bekor qiladi"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Muhim"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasida suhbat funksiyalari ishlamaydi"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Fikr-mulohaza"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Yopish"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Boshqa chiqmasin"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirishnomalarni tahrirlash imkonsiz."</string>
@@ -1395,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Buklanadigan qurilma ochilmoqda"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Buklanadigan qurilma aylantirilmoqda"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Old ekran yoqildi"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"buklangan"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"buklanmagan"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index eee95832f1ab..a9f24ed1da78 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Tỷ lệ phần trăm pin không xác định."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Đã kết nối với <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Đã kết nối với <xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Mở rộng nhóm."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Mở ứng dụng."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Chưa được kết nối."</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Chuyển vùng"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Tắt"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Khám phá chế độ thiết bị trung tâm"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Truy cập vào các tiện ích và trình bảo vệ màn hình mà bạn yêu thích trong khi sạc."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Bắt đầu"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Hiện trình bảo vệ màn hình bạn yêu thích trong khi sạc"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Chuyển đổi người dùng"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"trình đơn kéo xuống"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Tất cả ứng dụng và dữ liệu trong phiên này sẽ bị xóa."</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Hiện ở đầu phần thông báo cuộc trò chuyện và ở dạng ảnh hồ sơ trên màn hình khóa, xuất hiện ở dạng bong bóng, làm gián đoạn chế độ Không làm phiền"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Mức độ ưu tiên"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> không hỗ trợ các tính năng trò chuyện"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Phản hồi"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Đóng"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Không hiện lại"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Không thể sửa đổi các thông báo này."</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Dùng vân tay để mở"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Bạn cần phải xác thực. Hãy chạm vào cảm biến vân tay để xác thực."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Cuộc gọi đang diễn ra"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Đang diễn ra"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Dữ liệu di động"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Đã kết nối"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Tạm thời có kết nối"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Thiết bị có thể gập lại đang được mở ra"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Thiết bị có thể gập lại đang được lật ngược"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Đã bật màn hình trước"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"gập"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"mở"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 81f1bffdf4ab..0f28d9299d68 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"电池电量百分比未知。"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"已连接到<xliff:g id="BLUETOOTH">%s</xliff:g>。"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"已连接到 <xliff:g id="CAST">%s</xliff:g>。"</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"展开群组。"</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"打开应用。"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"未连接。"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"漫游"</string>
<string name="cell_data_off" msgid="4886198950247099526">"已关闭"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"探索基座接入模式"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"充电时访问您喜爱的微件和屏保。"</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"现在就试试吧"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"在充电时显示您喜爱的屏保"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"切换用户"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"下拉菜单"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"此会话中的所有应用和数据都将被删除。"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"以气泡形式显示在对话通知顶部(屏幕锁定时显示为个人资料照片),并且会中断勿扰模式"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"优先"</string>
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g>不支持对话功能"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"反馈"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"关闭"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"不再显示"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"无法修改这些通知。"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"使用指纹即可打开"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"需要进行身份验证。请轻触指纹传感器以验证身份。"</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"正在通话"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"正在进行"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"移动数据网络"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"已连接"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"已暂时连接"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"正在展开可折叠设备"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"正在翻转可折叠设备"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"前屏已开启"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"折叠状态"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"展开状态"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s/%2$s"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index b21f13f8102c..6a29d86bb49f 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"電量百分比不明。"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"已連線至<xliff:g id="BLUETOOTH">%s</xliff:g>。"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"已連接至 <xliff:g id="CAST">%s</xliff:g>。"</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"展開群組。"</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"開啟應用程式。"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"未連線。"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"漫遊"</string>
<string name="cell_data_off" msgid="4886198950247099526">"關閉"</string>
@@ -377,7 +375,7 @@
<string name="quick_settings_cellular_detail_data_warning" msgid="7957253810481086455">"<xliff:g id="DATA_LIMIT">%s</xliff:g> 警告"</string>
<string name="quick_settings_work_mode_label" msgid="6440531507319809121">"工作應用程式"</string>
<string name="quick_settings_work_mode_paused_state" msgid="6681788236383735976">"已暫停"</string>
- <string name="quick_settings_night_display_label" msgid="8180030659141778180">"夜間模式"</string>
+ <string name="quick_settings_night_display_label" msgid="8180030659141778180">"夜燈模式"</string>
<string name="quick_settings_night_secondary_label_on_at_sunset" msgid="3358706312129866626">"在日落時開啟"</string>
<string name="quick_settings_night_secondary_label_until_sunrise" msgid="4063448287758262485">"在日出時關閉"</string>
<string name="quick_settings_night_secondary_label_on_at" msgid="3584738542293528235">"<xliff:g id="TIME">%s</xliff:g> 開啟"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"探索插座模式"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"在充電時存取你喜愛的小工具和螢幕保護程式。"</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"立即開始"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"充電時顯示常用螢幕保護程式"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"切換使用者"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"下拉式選單"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"這個工作階段中的所有應用程式和資料都會被刪除。"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"以對話氣泡形式顯示在對話通知頂部 (在上鎖畫面會顯示為個人檔案相片),並會中斷「請勿打擾」模式"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"優先"</string>
<string name="no_shortcut" msgid="8257177117568230126">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」不支援對話功能"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"意見反映"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"關閉"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"不要再顯示"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"無法修改這些通知。"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"使用指紋即可開啟"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"需要驗證。掂一下指紋感應器就可以驗證。"</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"通話中"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"進行中"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"流動數據"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"已連線"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"已暫時連線"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"正在展開折疊式裝置"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"正在翻轉折疊式裝置"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"正面螢幕已開啟"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"已摺疊"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"已打開"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index f2b0b86411e7..a931304cdfbe 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -250,10 +250,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"電池電量不明。"</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"已連線至<xliff:g id="BLUETOOTH">%s</xliff:g>。"</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"已連線至 <xliff:g id="CAST">%s</xliff:g>。"</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"展開群組。"</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"開啟應用程式。"</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"尚未連線。"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"漫遊"</string>
<string name="cell_data_off" msgid="4886198950247099526">"關閉"</string>
@@ -543,8 +541,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"瞭解 Hub 模式"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"在充電時使用喜愛的小工具和螢幕保護程式。"</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"開始使用"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"在充電時顯示你最愛的螢幕保護程式"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"切換使用者"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"下拉式選單"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"這個工作階段中的所有應用程式和資料都會刪除。"</string>
@@ -807,8 +804,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"以對話框的形式顯示在對話通知頂端 (螢幕鎖定時會顯示為個人資料相片),並會中斷「零打擾」模式"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"優先"</string>
<string name="no_shortcut" msgid="8257177117568230126">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」不支援對話功能"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"意見回饋"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"關閉"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"不要再顯示"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"無法修改這些通知。"</string>
@@ -1308,8 +1304,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"使用指紋即可開啟"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"需要驗證。輕觸指紋感應器即可進行驗證。"</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"通話中"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"進行中"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"行動數據"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"已連線"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"已暫時建立連線"</string>
@@ -1399,6 +1394,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"正在展開的折疊式裝置"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"正在翻轉折疊式裝置"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"正面螢幕已開啟"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"已摺疊"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"已展開"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 445bdc013dfb..08e685273bb3 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -252,10 +252,8 @@
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Iphesenti lebhethri alaziwa."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Xhuma ku-<xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Ixhumeke ku-<xliff:g id="CAST">%s</xliff:g>."</string>
- <!-- no translation found for accessibility_expand_group (521237935987978624) -->
- <skip />
- <!-- no translation found for accessibility_open_application (1749126077501259712) -->
- <skip />
+ <string name="accessibility_expand_group" msgid="521237935987978624">"Nweba iqembu."</string>
+ <string name="accessibility_open_application" msgid="1749126077501259712">"Vula i-application."</string>
<string name="accessibility_not_connected" msgid="4061305616351042142">"Akuxhunyiwe"</string>
<string name="data_connection_roaming" msgid="375650836665414797">"Iyazulazula"</string>
<string name="cell_data_off" msgid="4886198950247099526">"Valiwe"</string>
@@ -545,8 +543,7 @@
<string name="hub_onboarding_bottom_sheet_title" msgid="162092881395529947">"Hlola imodi yehabhu"</string>
<string name="hub_onboarding_bottom_sheet_text" msgid="8589816797970240544">"Finyelela amawijethi akho ayintandokazi nezigcinisikrini ngenkathi ushaja."</string>
<string name="hub_onboarding_bottom_sheet_action_button" msgid="6161983690157872829">"Asihambe"</string>
- <!-- no translation found for glanceable_hub_to_dream_button_tooltip (9018287673822335829) -->
- <skip />
+ <string name="glanceable_hub_to_dream_button_tooltip" msgid="9018287673822335829">"Bonisa izigcini zesikrini zakho eziyintandokazi ngenkathi ishaja"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Shintsha umsebenzisi"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"imenyu yokudonsela phansi"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Wonke ama-app nedatha kulesi sikhathi azosuswa."</string>
@@ -809,8 +806,7 @@
<string name="notification_channel_summary_priority_all" msgid="7151752959650048285">"Ivela phezu kwezaziso zengxoxo futhi njengesithombe sephrofayela esikrinini sokukhiya, ivela njengebhamuza, ukuphazamisa okuthi Ungaphazamisi"</string>
<string name="notification_priority_title" msgid="2079708866333537093">"Okubalulekile"</string>
<string name="no_shortcut" msgid="8257177117568230126">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ayisekeli izici zengxoxo"</string>
- <!-- no translation found for notification_guts_bundle_feedback (7581587973879656500) -->
- <skip />
+ <string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Impendulo"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Chitha"</string>
<string name="notification_inline_disable_promotion" msgid="6880961831026048166">"Ungabonisi futhi"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Lezi zaziso azikwazi ukushintshwa."</string>
@@ -1310,8 +1306,7 @@
<string name="keyguard_try_fingerprint" msgid="2825130772993061165">"Sebenzisa izigxivizo zeminwe ukuvula"</string>
<string name="accessibility_fingerprint_bouncer" msgid="7189102492498735519">"Ukufakazela ubuqiniso budingekile. Thinta inzwa yezigxivizo zeminwe ukuze uqinisekise."</string>
<string name="ongoing_call_content_description" msgid="6394763878322348560">"Ikholi eqhubekayo"</string>
- <!-- no translation found for ongoing_notification_extra_content_description (2098752668861351265) -->
- <skip />
+ <string name="ongoing_notification_extra_content_description" msgid="2098752668861351265">"Okuqhubekayo"</string>
<string name="mobile_data_settings_title" msgid="3955246641380064901">"Idatha yeselula"</string>
<string name="mobile_data_connection_active" msgid="944490013299018227">"Ixhunyiwe"</string>
<string name="mobile_data_temp_connection_active" msgid="4590222725908806824">"Ixhume okwesikhashana"</string>
@@ -1401,6 +1396,8 @@
<string name="rear_display_accessibility_folded_animation" msgid="1538121649587978179">"Idivayisi egoqekayo iyembulwa"</string>
<string name="rear_display_accessibility_unfolded_animation" msgid="1946153682258289040">"Idivayisi egoqekayo iphendulwa nxazonke"</string>
<string name="rear_display_unfolded_front_screen_on" msgid="5946436677205643170">"Isikrini sangaphambili sivuliwe"</string>
+ <!-- no translation found for rear_display_unfolded_front_screen_on_slide_to_cancel (1455192420423012859) -->
+ <skip />
<string name="quick_settings_rotation_posture_folded" msgid="2430280856312528289">"kugoqiwe"</string>
<string name="quick_settings_rotation_posture_unfolded" msgid="6372316273574167114">"kuvuliwe"</string>
<string name="rotation_tile_with_posture_secondary_label_template" msgid="7648496484163318886">"%1$s / %2$s"</string>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 5f8f77993245..8665fd6dcaf5 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -34,12 +34,12 @@
<!-- Base colors for notification shade/scrim, the alpha component is adjusted programmatically
to match the spec -->
- <color name="shade_panel">@android:color/system_accent1_900</color>
- <color name="surface_effect_0">@android:color/system_accent1_100</color>
+ <color name="shade_panel_base">@android:color/system_accent1_900</color>
+ <color name="notification_scrim_base">@android:color/system_accent1_100</color>
- <!-- todo(b/388891904) Remove updated color references once they are available. -->
- <color name="shade_panel_base">@color/shade_panel</color>
- <color name="notification_scrim_base">@color/surface_effect_0</color>
+ <!-- Fallback colors for notification shade/scrim -->
+ <color name="shade_panel_fallback">@android:color/system_accent2_200</color>
+ <color name="notification_scrim_fallback">@android:color/system_surface_dim_light</color>
<!-- The color of the background in the separated list of the Global Actions menu -->
<color name="global_actions_separated_background">#F5F5F5</color>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 648e4c2e3ac7..3b1e609d86e2 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1242,8 +1242,11 @@
<dimen name="min_window_blur_radius">1px</dimen>
<dimen name="max_window_blur_radius">23px</dimen>
+ <!-- Blur radius of the Notification Shade content (notifications, footer, shelf) -->
+ <dimen name="max_shade_content_blur_radius">@dimen/max_window_blur_radius</dimen>
+
<!-- Blur radius behind Notification Shade -->
- <dimen name="max_shade_window_blur_radius">60dp</dimen>
+ <dimen name="max_shade_window_blur_radius">34dp</dimen>
<!-- How much into a DisplayCutout's bounds we can go, on each side -->
<dimen name="display_cutout_margin_consumption">0px</dimen>
@@ -1254,6 +1257,8 @@
<dimen name="ongoing_appops_chip_side_padding">8dp</dimen>
<!-- Margin between icons of Ongoing App Ops chip -->
<dimen name="ongoing_appops_chip_icon_margin">4dp</dimen>
+ <!-- Side margins for the content of an appops chip -->
+ <dimen name="ongoing_appops_chip_content_horizontal_margin">10dp</dimen>
<!-- Icon size of Ongoing App Ops chip -->
<dimen name="ongoing_appops_chip_icon_size">16sp</dimen>
<!-- Radius of Ongoing App Ops chip corners -->
@@ -2136,18 +2141,25 @@
<dimen name="volume_dialog_width">60dp</dimen>
<dimen name="volume_dialog_background_corner_radius">30dp</dimen>
- <dimen name="volume_dialog_background_vertical_margin">-10dp</dimen>
+ <dimen name="volume_dialog_background_vertical_margin">
+ @dimen/volume_dialog_buttons_margin_negative
+ </dimen>
<!-- top margin covers half the ringer button + components spacing -->
<dimen name="volume_dialog_background_top_margin">-28dp</dimen>
+ <dimen name="volume_dialog_window_margin">14dp</dimen>
<dimen name="volume_dialog_components_spacing">8dp</dimen>
<dimen name="volume_dialog_floating_sliders_spacing">8dp</dimen>
<dimen name="volume_dialog_floating_sliders_vertical_padding">10dp</dimen>
- <dimen name="volume_dialog_floating_sliders_vertical_padding_negative">-10dp</dimen>
+ <dimen name="volume_dialog_floating_sliders_vertical_padding_negative">
+ @dimen/volume_dialog_buttons_margin_negative
+ </dimen>
<dimen name="volume_dialog_floating_sliders_horizontal_padding">4dp</dimen>
<dimen name="volume_dialog_button_size">40dp</dimen>
<dimen name="volume_dialog_slider_width">52dp</dimen>
<dimen name="volume_dialog_slider_height">254dp</dimen>
+ <dimen name="volume_dialog_buttons_margin">10dp</dimen>
+ <dimen name="volume_dialog_buttons_margin_negative">-10dp</dimen>
<!--
A primary goal of this margin is to vertically constraint slider height in the landscape
orientation when the vertical space is limited
@@ -2160,7 +2172,11 @@
<dimen name="volume_dialog_background_square_corner_radius">12dp</dimen>
- <dimen name="volume_dialog_ringer_drawer_margin">10dp</dimen>
+ <dimen name="volume_dialog_ringer_drawer_margin">@dimen/volume_dialog_buttons_margin</dimen>
+ <!--
+ (volume_dialog_slider_width - volume_dialog_button_size) / 2
+ This centers ringer drawer against the volume slider
+ -->
<dimen name="volume_dialog_ringer_drawer_diff_end_margin">6dp</dimen>
<dimen name="volume_dialog_ringer_drawer_button_size">@dimen/volume_dialog_button_size</dimen>
<dimen name="volume_dialog_ringer_drawer_button_icon_radius">10dp</dimen>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 86292039d93d..e077b41a6f59 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -2098,7 +2098,13 @@
<string name="notification_inline_dismiss">Dismiss</string>
<!-- [CHAR LIMIT=30] Text shown in button used to prevent app from showing Live Updates, for this notification and all future ones -->
- <string name="notification_inline_disable_promotion">Don\'t show again</string>
+ <string name="notification_inline_disable_promotion">Don\'t show as pinned</string>
+
+ <!-- Text accompanying the "Show live updates" switch explaining the purpose of the setting -->
+ <string name="live_notifications_title">Showing Live Updates</string>
+
+ <!-- Text accompanying the "Show live updates" switch explaining the purpose of the setting -->
+ <string name="live_notifications_desc">Pinned notifications display live info from apps, and always appear on the status bar and lock screen</string>
<!-- Notification: Control panel: Label that displays when the app's notifications cannot be blocked. -->
<string name="notification_unblockable_desc">These notifications can\'t be modified.</string>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 4961a7ece69a..8f808d389203 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -93,6 +93,19 @@
<item name="android:textColor">?android:attr/colorPrimary</item>
</style>
+ <style name="StatusBar.EventChip">
+ <item name="android:orientation">horizontal</item>
+ <item name="android:layout_width">wrap_content</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:layout_gravity">center</item>
+ <item name="android:gravity">center</item>
+ <item name="android:clipToOutline">true</item>
+ <item name="android:background">@drawable/statusbar_chip_bg</item>
+ <item name="android:minHeight">@dimen/ongoing_appops_chip_height</item>
+ <item name="android:maxWidth">@dimen/ongoing_appops_chip_max_width</item>
+ <item name="android:minWidth">@dimen/ongoing_appops_chip_min_width</item>
+ </style>
+
<style name="Chipbar" />
<style name="Chipbar.Text" parent="@*android:style/TextAppearance.DeviceDefault.Notification.Title">
diff --git a/packages/SystemUI/res/xml/volume_dialog_constraint_set.xml b/packages/SystemUI/res/xml/volume_dialog_constraint_set.xml
index a8f616c2427d..dcc5d4f6635f 100644
--- a/packages/SystemUI/res/xml/volume_dialog_constraint_set.xml
+++ b/packages/SystemUI/res/xml/volume_dialog_constraint_set.xml
@@ -8,7 +8,7 @@
android:layout_width="@dimen/volume_dialog_slider_width"
android:layout_height="0dp"
android:layout_marginTop="@dimen/volume_dialog_slider_vertical_margin"
- android:layout_marginEnd="@dimen/volume_dialog_components_spacing"
+ android:layout_marginEnd="@dimen/volume_dialog_window_margin"
android:layout_marginBottom="@dimen/volume_dialog_slider_vertical_margin"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/packages/SystemUI/res/xml/volume_dialog_half_folded_constraint_set.xml b/packages/SystemUI/res/xml/volume_dialog_half_folded_constraint_set.xml
index b4d8ae791f36..3a5e41d5781a 100644
--- a/packages/SystemUI/res/xml/volume_dialog_half_folded_constraint_set.xml
+++ b/packages/SystemUI/res/xml/volume_dialog_half_folded_constraint_set.xml
@@ -8,7 +8,7 @@
android:layout_width="@dimen/volume_dialog_slider_width"
android:layout_height="0dp"
android:layout_marginTop="@dimen/volume_dialog_slider_vertical_margin"
- android:layout_marginEnd="@dimen/volume_dialog_components_spacing"
+ android:layout_marginEnd="@dimen/volume_dialog_window_margin"
android:layout_marginBottom="@dimen/volume_dialog_slider_vertical_margin"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/packages/SystemUI/res/xml/volume_dialog_ringer_drawer_motion_scene.xml b/packages/SystemUI/res/xml/volume_dialog_ringer_drawer_motion_scene.xml
index 1607121f230f..4c3dbd78cc3e 100644
--- a/packages/SystemUI/res/xml/volume_dialog_ringer_drawer_motion_scene.xml
+++ b/packages/SystemUI/res/xml/volume_dialog_ringer_drawer_motion_scene.xml
@@ -20,30 +20,9 @@
android:id="@+id/close_to_open_transition"
app:constraintSetEnd="@+id/volume_dialog_ringer_drawer_open"
app:constraintSetStart="@+id/volume_dialog_ringer_drawer_close"
- app:transitionEasing="cubic(0.05, 0.7, 0.1, 1.0)"
- app:duration="400">
- </Transition>
-
- <ConstraintSet android:id="@+id/volume_dialog_ringer_drawer_close">
- <Constraint
- android:id="@+id/volume_ringer_drawer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"/>
- </ConstraintSet>
-
- <ConstraintSet android:id="@+id/volume_dialog_ringer_drawer_open">
- <Constraint
- android:id="@+id/volume_ringer_drawer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"/>
- </ConstraintSet>
+ app:duration="400"
+ app:transitionEasing="cubic(0.05, 0.7, 0.1, 1.0)" />
+ <ConstraintSet android:id="@+id/volume_dialog_ringer_drawer_close" />
+ <ConstraintSet android:id="@+id/volume_dialog_ringer_drawer_open" />
</MotionScene> \ No newline at end of file
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java
index 82ac78c6db15..0372a6c6d2c5 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/QuickStepContract.java
@@ -20,7 +20,6 @@ import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
-import static com.android.systemui.Flags.glanceableHubBackAction;
import static com.android.systemui.shared.Flags.shadeAllowBackGesture;
import android.annotation.LongDef;
@@ -361,10 +360,6 @@ public class QuickStepContract {
}
// Disable back gesture on the hub, but not when the shade is showing.
if ((sysuiStateFlags & SYSUI_STATE_COMMUNAL_HUB_SHOWING) != 0) {
- // Allow back gesture on Glanceable Hub with back action support.
- if (glanceableHubBackAction()) {
- return false;
- }
// Use QS expanded signal as the notification panel is always considered visible
// expanded when on the lock screen and when opening hub over lock screen. This does
// mean that back gesture is disabled when opening shade over hub while in portrait
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationListener.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationListener.java
index ff6bcdb150f8..fcde508b07a8 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationListener.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RecentsAnimationListener.java
@@ -16,6 +16,7 @@
package com.android.systemui.shared.system;
+import android.annotation.Nullable;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.RemoteAnimationTarget;
@@ -42,5 +43,5 @@ public interface RecentsAnimationListener {
* Called when the task of an activity that has been started while the recents animation
* was running becomes ready for control.
*/
- void onTasksAppeared(RemoteAnimationTarget[] app);
+ void onTasksAppeared(RemoteAnimationTarget[] app, @Nullable TransitionInfo transitionInfo);
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
index 5a9cbce73e4b..892851cd7056 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardViewController.java
@@ -173,6 +173,11 @@ public interface KeyguardViewController {
boolean isBouncerShowing();
/**
+ * Report when the UI is ready for dismissing the whole Keyguard.
+ */
+ void readyForKeyguardDone();
+
+ /**
* Stop showing the alternate bouncer, if showing.
*
* <p>Should be like calling {@link #hideAlternateBouncer(boolean, boolean)} with a {@code true}
diff --git a/packages/SystemUI/src/com/android/systemui/CameraAvailabilityListener.kt b/packages/SystemUI/src/com/android/systemui/CameraAvailabilityListener.kt
index ca83724aaf07..7af37bd720e3 100644
--- a/packages/SystemUI/src/com/android/systemui/CameraAvailabilityListener.kt
+++ b/packages/SystemUI/src/com/android/systemui/CameraAvailabilityListener.kt
@@ -129,6 +129,11 @@ class CameraAvailabilityListener(
listeners.remove(callback)
}
+ fun debugFaceAuth(id: Int) {
+ val info = cameraProtectionInfoList?.getOrNull(id)
+ if (info != null) notifyCameraActive(info)
+ }
+
private fun isExcluded(packageId: String): Boolean {
return excludedPackageIds.contains(packageId)
}
diff --git a/packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt b/packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt
index dbdf93d81eee..8bb236b91860 100644
--- a/packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt
+++ b/packages/SystemUI/src/com/android/systemui/FaceScanningOverlay.kt
@@ -87,7 +87,7 @@ class FaceScanningOverlay(
override fun enableShowProtection(isCameraActive: Boolean) {
val scanningAnimationRequiredWhenCameraActive =
- keyguardUpdateMonitor.isFaceDetectionRunning || authController.isShowing
+ keyguardUpdateMonitor.isFaceDetectionRunning || authController.isShowing || mDebug
val faceAuthSucceeded = keyguardUpdateMonitor.isFaceAuthenticated
val showScanningAnimationNow = scanningAnimationRequiredWhenCameraActive && isCameraActive
if (showScanningAnimationNow == showScanningAnim) {
diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
index da206facd1fb..e7253533aa42 100644
--- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
+++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java
@@ -189,7 +189,7 @@ public class ScreenDecorations implements
@VisibleForTesting
protected void showCameraProtection(@NonNull Path protectionPath, @NonNull Rect bounds) {
- if (mFaceScanningFactory.shouldShowFaceScanningAnim()) {
+ if (mDebug || mFaceScanningFactory.shouldShowFaceScanningAnim()) {
DisplayCutoutView overlay = (DisplayCutoutView) getOverlayView(
mFaceScanningViewId);
if (overlay != null) {
@@ -395,6 +395,12 @@ public class ScreenDecorations implements
setupDecorations();
});
}
+
+ if (cmd.getFaceAuthScreen() != null) {
+ mExecutor.execute(() -> {
+ debugTriggerFaceAuth(cmd.getFaceAuthScreen());
+ });
+ }
};
@Override
@@ -630,6 +636,15 @@ public class ScreenDecorations implements
}
}
+ private void debugTriggerFaceAuth(int screen) {
+ DisplayCutoutView overlay = (DisplayCutoutView) getOverlayView(
+ mFaceScanningViewId);
+ if (overlay != null) {
+ overlay.setDebug(true);
+ mCameraListener.debugFaceAuth(screen);
+ }
+ }
+
private void setupDecorations() {
Trace.beginSection("ScreenDecorations#setupDecorations");
setupDecorationsInner();
@@ -1360,6 +1375,7 @@ public class ScreenDecorations implements
final List<Rect> mBounds = new ArrayList();
final Rect mBoundingRect = new Rect();
Rect mTotalBounds = new Rect();
+ boolean mDebug = false;
private int mColor = Color.BLACK;
private int mRotation;
@@ -1378,6 +1394,10 @@ public class ScreenDecorations implements
}
}
+ public void setDebug(boolean debug) {
+ mDebug = debug;
+ }
+
public void setColor(int color) {
if (color == mColor) {
return;
diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
index e2065f175c79..85f18800f20b 100644
--- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
@@ -126,7 +126,7 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
}
};
- private final int mFalsingThreshold;
+ private int mFalsingThreshold;
private boolean mTouchAboveFalsingThreshold;
private boolean mDisableHwLayers;
private final boolean mFadeDependingOnAmountSwiped;
@@ -149,8 +149,7 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
// Extra long-press!
mLongPressTimeout = (long) (ViewConfiguration.getLongPressTimeout() * 1.5f);
- mDensityScale = resources.getDisplayMetrics().density;
- mFalsingThreshold = resources.getDimensionPixelSize(R.dimen.swipe_helper_falsing_threshold);
+ updateResourceProperties(resources);
mFadeDependingOnAmountSwiped = resources.getBoolean(
R.bool.config_fadeDependingOnAmountSwiped);
mFalsingManager = falsingManager;
@@ -165,6 +164,14 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
getMaxEscapeAnimDuration() / 1000f);
}
+ /** Update ane properties that depend on Resources */
+ public void updateResourceProperties(Resources resources) {
+ float density = resources.getDisplayMetrics().density;
+ setDensityScale(density);
+ mCallback.onDensityScaleChange(density);
+ mFalsingThreshold = resources.getDimensionPixelSize(R.dimen.swipe_helper_falsing_threshold);
+ }
+
public void setDensityScale(float densityScale) {
mDensityScale = densityScale;
}
@@ -1001,5 +1008,8 @@ public class SwipeHelper implements Gefingerpoken, Dumpable {
* @return If true, the given view is draggable.
*/
default boolean canChildBeDragged(@NonNull View animView) { return true; }
+
+ /** The density scale has changed */
+ void onDensityScaleChange(float density);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/FullscreenMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/FullscreenMagnificationController.java
index b2f3df60c82b..d7bb667b02a9 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/FullscreenMagnificationController.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/FullscreenMagnificationController.java
@@ -352,7 +352,13 @@ public class FullscreenMagnificationController implements ComponentCallbacks {
mTransaction
.addTransactionCommittedListener(
mExecutor,
- this::showBorder)
+ () -> {
+ if (getState() == ENABLING) {
+ // Ensure that we are in the ENABLING process to avoid performing
+ // animation on a null view.
+ mShowBorderRunnable.run();
+ }
+ })
.setPosition(mBorderSurfaceControl, -mBorderOffset, -mBorderOffset)
.setLayer(mBorderSurfaceControl, Integer.MAX_VALUE)
.show(mBorderSurfaceControl)
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/extradim/ExtraDimDialogManager.kt b/packages/SystemUI/src/com/android/systemui/accessibility/extradim/ExtraDimDialogManager.kt
index 3f717e282a61..f24c3be0004c 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/extradim/ExtraDimDialogManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/extradim/ExtraDimDialogManager.kt
@@ -20,6 +20,7 @@ import com.android.systemui.animation.DialogCuj
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.animation.Expandable
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.statusbar.phone.SystemUIDialog
import javax.inject.Inject
@@ -33,7 +34,7 @@ constructor(
private val extraDimDialogDelegateProvider: Provider<ExtraDimDialogDelegate>,
private val mActivityStarter: ActivityStarter,
private val dialogTransitionAnimator: DialogTransitionAnimator,
- private val mainHandler: Handler,
+ @Main private val mainHandler: Handler,
) {
private var dialog: SystemUIDialog? = null
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java
index 67aa4ff577b8..f8e4bda15d01 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/AccessibilityFloatingMenuController.java
@@ -40,6 +40,7 @@ import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
import com.android.systemui.accessibility.AccessibilityButtonModeObserver.AccessibilityButtonMode;
import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver;
import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.navigationbar.NavigationModeController;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.util.settings.SecureSettings;
@@ -114,7 +115,7 @@ public class AccessibilityFloatingMenuController implements
SecureSettings secureSettings,
DisplayTracker displayTracker,
NavigationModeController navigationModeController,
- Handler handler) {
+ @Main Handler handler) {
mContext = context;
mWindowManager = windowManager;
mViewCaptureAwareWindowManager = viewCaptureAwareWindowManager;
diff --git a/packages/SystemUI/src/com/android/systemui/back/domain/interactor/BackActionInteractor.kt b/packages/SystemUI/src/com/android/systemui/back/domain/interactor/BackActionInteractor.kt
index 11a6cb9334ae..0b578c65e915 100644
--- a/packages/SystemUI/src/com/android/systemui/back/domain/interactor/BackActionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/back/domain/interactor/BackActionInteractor.kt
@@ -23,9 +23,7 @@ import android.window.OnBackInvokedDispatcher
import android.window.WindowOnBackInvokedDispatcher
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.systemui.CoreStartable
-import com.android.systemui.Flags.glanceableHubBackAction
import com.android.systemui.Flags.predictiveBackAnimateShade
-import com.android.systemui.communal.domain.interactor.CommunalBackActionInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.plugins.statusbar.StatusBarStateController
@@ -52,7 +50,6 @@ constructor(
private val windowRootViewVisibilityInteractor: WindowRootViewVisibilityInteractor,
private val shadeBackActionInteractor: ShadeBackActionInteractor,
private val qsController: QuickSettingsController,
- private val communalBackActionInteractor: CommunalBackActionInteractor,
) : CoreStartable {
private var isCallbackRegistered = false
@@ -114,12 +111,6 @@ constructor(
shadeBackActionInteractor.animateCollapseQs(false)
return true
}
- if (glanceableHubBackAction()) {
- if (communalBackActionInteractor.canBeDismissed()) {
- communalBackActionInteractor.onBackPressed()
- return true
- }
- }
if (shouldBackBeHandled()) {
if (shadeBackActionInteractor.canBeCollapsed()) {
// this is the Shade dismiss animation, so make sure QQS closes when it ends.
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java
index e5c22677dbcc..1ec7799a0b94 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/BiometricNotificationService.java
@@ -149,7 +149,7 @@ public class BiometricNotificationService implements CoreStartable {
public BiometricNotificationService(@NonNull @Main Context context,
@NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
@NonNull KeyguardStateController keyguardStateController,
- @NonNull Handler handler, @NonNull NotificationManager notificationManager,
+ @NonNull @Main Handler handler, @NonNull NotificationManager notificationManager,
@NonNull BiometricNotificationBroadcastReceiver biometricNotificationBroadcastReceiver,
@NonNull Optional<FingerprintReEnrollNotification> fingerprintReEnrollNotification,
@Nullable FingerprintManager fingerprintManager,
diff --git a/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContent.kt b/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContent.kt
index 710fde5c2130..c6644562a9cb 100644
--- a/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContent.kt
+++ b/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContent.kt
@@ -24,7 +24,7 @@ import androidx.compose.ui.viewinterop.AndroidView
import com.android.systemui.res.R
@Composable
-fun BluetoothDetailsContent(detailsContentViewModel: BluetoothTileDialogViewModel) {
+fun BluetoothDetailsContent(detailsContentViewModel: BluetoothDetailsContentViewModel) {
AndroidView(
modifier = Modifier.fillMaxSize(),
factory = { context ->
diff --git a/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentManager.kt b/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentManager.kt
index d873f41309cc..eebcf0b0f0c1 100644
--- a/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentManager.kt
@@ -62,7 +62,7 @@ data class DeviceItemClick(val deviceItem: DeviceItem, val clickedView: View, va
class BluetoothDetailsContentManager
@AssistedInject
constructor(
- @Assisted private val initialUiProperties: BluetoothTileDialogViewModel.UiProperties,
+ @Assisted private val initialUiProperties: BluetoothDetailsContentViewModel.UiProperties,
@Assisted private val cachedContentHeight: Int,
@Assisted private val bluetoothTileDialogCallback: BluetoothTileDialogCallback,
@Assisted private val isInDialog: Boolean,
@@ -114,7 +114,7 @@ constructor(
@AssistedFactory
interface Factory {
fun create(
- initialUiProperties: BluetoothTileDialogViewModel.UiProperties,
+ initialUiProperties: BluetoothDetailsContentViewModel.UiProperties,
cachedContentHeight: Int,
dialogCallback: BluetoothTileDialogCallback,
isInDialog: Boolean,
@@ -226,7 +226,7 @@ constructor(
internal fun onBluetoothStateUpdated(
isEnabled: Boolean,
- uiProperties: BluetoothTileDialogViewModel.UiProperties,
+ uiProperties: BluetoothDetailsContentViewModel.UiProperties,
) {
bluetoothToggle.apply {
isChecked = isEnabled
diff --git a/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogViewModel.kt b/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentViewModel.kt
index 308c9d10db93..ff2d9efa1b58 100644
--- a/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentViewModel.kt
@@ -61,12 +61,9 @@ import kotlinx.coroutines.withContext
/**
* ViewModel for Bluetooth Dialog or Bluetooth Details View after clicking on the Bluetooth QS tile.
- *
- * TODO: b/378513956 Rename this class to BluetoothDetailsContentViewModel, since it's not only used
- * by the dialog view.
*/
@SysUISingleton
-class BluetoothTileDialogViewModel
+class BluetoothDetailsContentViewModel
@Inject
constructor(
private val deviceItemInteractor: DeviceItemInteractor,
@@ -312,7 +309,7 @@ constructor(
return bluetoothDialogDelegateFactory.create(
getUiProperties(),
getCachedContentHeight(),
- this@BluetoothTileDialogViewModel,
+ this@BluetoothDetailsContentViewModel,
{ cancelJob() },
)
}
@@ -321,7 +318,7 @@ constructor(
return bluetoothDetailsContentManagerFactory.create(
getUiProperties(),
getCachedContentHeight(),
- this@BluetoothTileDialogViewModel,
+ this@BluetoothDetailsContentViewModel,
/* isInDialog= */ false,
/* doneButtonCallback= */ fun() {},
)
diff --git a/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsViewModel.kt b/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsViewModel.kt
index 44475318a61e..5863a9385234 100644
--- a/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsViewModel.kt
@@ -20,7 +20,7 @@ import com.android.systemui.plugins.qs.TileDetailsViewModel
class BluetoothDetailsViewModel(
private val onSettingsClick: () -> Unit,
- val detailsContentViewModel: BluetoothTileDialogViewModel,
+ val detailsContentViewModel: BluetoothDetailsContentViewModel,
) : TileDetailsViewModel() {
override fun clickOnSettingsButton() {
onSettingsClick()
diff --git a/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogDelegate.kt b/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogDelegate.kt
index 01be820a2fde..c55f60587527 100644
--- a/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogDelegate.kt
+++ b/packages/SystemUI/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogDelegate.kt
@@ -32,7 +32,7 @@ import dagger.assisted.AssistedInject
class BluetoothTileDialogDelegate
@AssistedInject
constructor(
- @Assisted private val initialUiProperties: BluetoothTileDialogViewModel.UiProperties,
+ @Assisted private val initialUiProperties: BluetoothDetailsContentViewModel.UiProperties,
@Assisted private val cachedContentHeight: Int,
@Assisted private val bluetoothTileDialogCallback: BluetoothTileDialogCallback,
@Assisted private val dismissListener: Runnable,
@@ -48,7 +48,7 @@ constructor(
@AssistedFactory
interface Factory {
fun create(
- initialUiProperties: BluetoothTileDialogViewModel.UiProperties,
+ initialUiProperties: BluetoothDetailsContentViewModel.UiProperties,
cachedContentHeight: Int,
dialogCallback: BluetoothTileDialogCallback,
dimissListener: Runnable,
diff --git a/packages/SystemUI/src/com/android/systemui/common/shared/colors/SurfaceEffectColors.kt b/packages/SystemUI/src/com/android/systemui/common/shared/colors/SurfaceEffectColors.kt
index d4027c029a0a..7c2fc7fe3aee 100644
--- a/packages/SystemUI/src/com/android/systemui/common/shared/colors/SurfaceEffectColors.kt
+++ b/packages/SystemUI/src/com/android/systemui/common/shared/colors/SurfaceEffectColors.kt
@@ -17,9 +17,6 @@
package com.android.systemui.common.shared.colors
import android.content.res.Resources
-import android.graphics.Color
-import com.android.internal.graphics.ColorUtils
-import com.android.systemui.res.R
object SurfaceEffectColors {
@JvmStatic
diff --git a/packages/SystemUI/src/com/android/systemui/communal/CommunalBackupRestoreStartable.kt b/packages/SystemUI/src/com/android/systemui/communal/CommunalBackupRestoreStartable.kt
index 7abad1448318..18d461add52b 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/CommunalBackupRestoreStartable.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/CommunalBackupRestoreStartable.kt
@@ -29,6 +29,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.communal.domain.interactor.CommunalInteractor
import com.android.systemui.communal.widgets.CommunalWidgetModule
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.core.Logger
import com.android.systemui.log.dagger.CommunalLog
@@ -43,7 +44,7 @@ constructor(
private val communalInteractor: CommunalInteractor,
@CommunalLog logBuffer: LogBuffer,
private val secureSettings: SecureSettings,
- handler: Handler,
+ @Main handler: Handler,
) : CoreStartable, BroadcastReceiver() {
private val logger = Logger(logBuffer, TAG)
diff --git a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalBackActionInteractor.kt b/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalBackActionInteractor.kt
deleted file mode 100644
index 2ccf96abff79..000000000000
--- a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalBackActionInteractor.kt
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES 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.communal.domain.interactor
-
-import com.android.systemui.communal.shared.model.CommunalScenes
-import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.scene.domain.interactor.SceneInteractor
-import com.android.systemui.scene.shared.flag.SceneContainerFlag
-import com.android.systemui.scene.shared.model.Scenes
-import javax.inject.Inject
-
-/**
- * {@link CommunalBackActionInteractor} is responsible for handling back gestures on the glanceable
- * hub. When invoked SystemUI should navigate back to the lockscreen.
- */
-@SysUISingleton
-class CommunalBackActionInteractor
-@Inject
-constructor(
- private val communalInteractor: CommunalInteractor,
- private val communalSceneInteractor: CommunalSceneInteractor,
- private val sceneInteractor: SceneInteractor,
-) {
- fun canBeDismissed(): Boolean {
- return communalInteractor.isCommunalShowing.value
- }
-
- fun onBackPressed() {
- if (SceneContainerFlag.isEnabled) {
- // TODO(b/384610333): Properly determine whether to go to dream or lockscreen on back.
- sceneInteractor.changeScene(
- toScene = Scenes.Lockscreen,
- loggingReason = "CommunalBackActionInteractor",
- )
- } else {
- communalSceneInteractor.changeScene(
- newScene = CommunalScenes.Blank,
- loggingReason = "CommunalBackActionInteractor",
- )
- }
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt b/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt
index 6dab32a66c94..564628d3f52f 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt
@@ -327,7 +327,7 @@ constructor(
* use [isIdleOnCommunal].
*/
// TODO(b/323215860): rename to something more appropriate after cleaning up usages
- val isCommunalShowing: StateFlow<Boolean> =
+ val isCommunalShowing: Flow<Boolean> =
flow { emit(SceneContainerFlag.isEnabled) }
.flatMapLatest { sceneContainerEnabled ->
if (sceneContainerEnabled) {
@@ -345,10 +345,10 @@ constructor(
columnName = "isCommunalShowing",
initialValue = false,
)
- .stateIn(
+ .shareIn(
scope = applicationScope,
- started = SharingStarted.Eagerly,
- initialValue = false,
+ started = SharingStarted.WhileSubscribed(),
+ replay = 1,
)
/**
diff --git a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalSceneTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalSceneTransitionInteractor.kt
index 740555f40dea..477b87119563 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalSceneTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalSceneTransitionInteractor.kt
@@ -32,6 +32,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled
import com.android.systemui.keyguard.shared.model.TransitionState
+import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.util.kotlin.pairwise
import java.util.UUID
@@ -65,6 +66,7 @@ constructor(
@Application private val applicationScope: CoroutineScope,
private val sceneInteractor: CommunalSceneInteractor,
private val repository: CommunalSceneTransitionRepository,
+ private val powerInteractor: PowerInteractor,
keyguardInteractor: KeyguardInteractor,
) : CoreStartable, CommunalSceneInteractor.OnSceneAboutToChangeListener {
@@ -88,12 +90,15 @@ constructor(
combine(
// Don't use delayed dreaming signal as otherwise we might go to occluded or lock
// screen when closing hub if dream just started under the hub.
+ powerInteractor.isAsleep,
keyguardInteractor.isDreamingWithOverlay,
keyguardInteractor.isKeyguardOccluded,
keyguardInteractor.isKeyguardGoingAway,
keyguardInteractor.isKeyguardShowing,
- ) { dreaming, occluded, keyguardGoingAway, keyguardShowing ->
- if (keyguardGoingAway) {
+ ) { asleep, dreaming, occluded, keyguardGoingAway, keyguardShowing ->
+ if (asleep) {
+ KeyguardState.DOZING
+ } else if (keyguardGoingAway) {
KeyguardState.GONE
} else if (occluded && !dreaming) {
KeyguardState.OCCLUDED
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
index 8e0beda9eff7..7354f4096801 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
@@ -212,13 +212,6 @@ public class FrameworkServicesModule {
return new UserScopedServiceImpl<>(context, CaptioningManager.class);
}
- /** */
- @Provides
- @Singleton
- public Choreographer providesChoreographer() {
- return Choreographer.getInstance();
- }
-
@Provides
@Singleton
static ColorDisplayManager provideColorDisplayManager(Context context) {
diff --git a/packages/SystemUI/src/com/android/systemui/decor/ScreenDecorCommand.kt b/packages/SystemUI/src/com/android/systemui/decor/ScreenDecorCommand.kt
index fa1d898de850..c5d5ca26b14c 100644
--- a/packages/SystemUI/src/com/android/systemui/decor/ScreenDecorCommand.kt
+++ b/packages/SystemUI/src/com/android/systemui/decor/ScreenDecorCommand.kt
@@ -53,6 +53,14 @@ class ScreenDecorCommand(
val roundedBottom: RoundedCornerSubCommand? by
subCommand(RoundedCornerSubCommand("rounded-bottom"))
+ val faceAuthScreen: Int? by
+ param(
+ longName = "faceAuthScreen",
+ description =
+ "Specify a screen to show face auth animation. 0:outer(default screen), 1:inner",
+ valueParser = Type.Int,
+ )
+
override fun execute(pw: PrintWriter) {
callback.onExecute(this, pw)
}
@@ -61,6 +69,7 @@ class ScreenDecorCommand(
return "ScreenDecorCommand(" +
"debug=$debug, " +
"color=$color, " +
+ "faceAuthScreen=$faceAuthScreen, " +
"roundedTop=$roundedTop, " +
"roundedBottom=$roundedBottom)"
}
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
index abc810afca98..6b762bacb440 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java
@@ -40,6 +40,7 @@ import android.util.IndentingPrintWriter;
import android.view.Display;
import com.android.internal.R;
+import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.doze.dagger.BrightnessSensor;
import com.android.systemui.doze.dagger.DozeScope;
import com.android.systemui.doze.dagger.WrappedService;
@@ -118,7 +119,7 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
@WrappedService DozeMachine.Service service,
AsyncSensorManager sensorManager,
@BrightnessSensor Optional<Sensor>[] lightSensorOptional,
- DozeHost host, Handler handler,
+ DozeHost host, @Main Handler handler,
AlwaysOnDisplayPolicy alwaysOnDisplayPolicy,
WakefulnessLifecycle wakefulnessLifecycle,
DozeParameters dozeParameters,
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
index a56a63c0b104..3132ec2b98e3 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
@@ -53,7 +53,6 @@ import com.android.internal.logging.UiEventLogger;
import com.android.internal.policy.PhoneWindow;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
-import com.android.systemui.Flags;
import com.android.systemui.ambient.touch.TouchHandler;
import com.android.systemui.ambient.touch.TouchMonitor;
import com.android.systemui.ambient.touch.dagger.AmbientTouchComponent;
@@ -211,7 +210,6 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
mCommunalVisible = communalVisible;
updateLifecycleStateLocked();
- updateGestureBlockingLocked();
});
}
};
@@ -594,8 +592,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
private void updateGestureBlockingLocked() {
final boolean shouldBlock = mStarted && !mShadeExpanded && !mBouncerShowing
- && !isDreamInPreviewMode()
- && !(Flags.glanceableHubBackAction() && mCommunalVisible);
+ && !isDreamInPreviewMode();
if (shouldBlock) {
mGestureInteractor.addGestureBlockedMatcher(DREAM_TYPE_MATCHER,
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/homecontrols/service/TaskFragmentComponent.kt b/packages/SystemUI/src/com/android/systemui/dreams/homecontrols/service/TaskFragmentComponent.kt
index 67de30c8fa5c..c81583864d45 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/homecontrols/service/TaskFragmentComponent.kt
+++ b/packages/SystemUI/src/com/android/systemui/dreams/homecontrols/service/TaskFragmentComponent.kt
@@ -83,7 +83,8 @@ constructor(
resultT.addTaskFragmentOperation(
fragmentToken,
TaskFragmentOperation.Builder(
- TaskFragmentOperation.OP_TYPE_REORDER_TO_TOP_OF_TASK
+ TaskFragmentOperation
+ .OP_TYPE_PRIVILEGED_REORDER_TO_TOP_OF_TASK
)
.build(),
)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index caf0fd4450fc..efa9c21f96b4 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -16,6 +16,7 @@
package com.android.systemui.keyguard;
+import static android.app.KeyguardManager.LOCK_ON_USER_SWITCH_CALLBACK;
import static android.app.StatusBarManager.SESSION_KEYGUARD;
import static android.provider.Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT;
import static android.provider.Settings.System.LOCKSCREEN_SOUNDS_ENABLED;
@@ -75,6 +76,7 @@ import android.os.Bundle;
import android.os.DeadObjectException;
import android.os.Handler;
import android.os.IBinder;
+import android.os.IRemoteCallback;
import android.os.Looper;
import android.os.Message;
import android.os.PowerManager;
@@ -192,6 +194,8 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
import java.util.Objects;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
@@ -282,6 +286,9 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
private static final int SYSTEM_READY = 18;
private static final int CANCEL_KEYGUARD_EXIT_ANIM = 19;
private static final int BOOT_INTERACTOR = 20;
+ private static final int BEFORE_USER_SWITCHING = 21;
+ private static final int USER_SWITCHING = 22;
+ private static final int USER_SWITCH_COMPLETE = 23;
/** Enum for reasons behind updating wakeAndUnlock state. */
@Retention(RetentionPolicy.SOURCE)
@@ -299,6 +306,8 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
int WAKE_AND_UNLOCK = 3;
}
+ private final List<LockNowCallback> mLockNowCallbacks = new ArrayList<>();
+
/**
* The default amount of time we stay awake (used for all key input)
*/
@@ -357,13 +366,18 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
private final Lazy<NotificationShadeDepthController> mNotificationShadeDepthController;
private final Lazy<ShadeController> mShadeController;
private final Lazy<CommunalSceneInteractor> mCommunalSceneInteractor;
+ /*
+ * Records the user id on request to go away, for validation when WM calls back to start the
+ * exit animation.
+ */
+ private int mGoingAwayRequestedForUserId = -1;
+
private boolean mSystemReady;
private boolean mBootCompleted;
private boolean mBootSendUserPresent;
private boolean mShuttingDown;
private boolean mDozing;
private boolean mAnimatingScreenOff;
- private boolean mIgnoreDismiss;
private final Context mContext;
private final FalsingCollector mFalsingCollector;
@@ -626,41 +640,92 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
}
};
- KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() {
+ @VisibleForTesting
+ protected UserTracker.Callback mUserChangedCallback = new UserTracker.Callback() {
@Override
- public void onKeyguardVisibilityChanged(boolean visible) {
- synchronized (KeyguardViewMediator.this) {
- if (!visible && mPendingPinLock) {
- Log.i(TAG, "PIN lock requested, starting keyguard");
+ public void onBeforeUserSwitching(int newUser, @NonNull Runnable resultCallback) {
+ mHandler.sendMessage(mHandler.obtainMessage(BEFORE_USER_SWITCHING,
+ newUser, 0, resultCallback));
+ }
- // Bring the keyguard back in order to show the PIN lock
- mPendingPinLock = false;
- doKeyguardLocked(null);
- }
- }
+ @Override
+ public void onUserChanging(int newUser, @NonNull Context userContext,
+ @NonNull Runnable resultCallback) {
+ mHandler.sendMessage(mHandler.obtainMessage(USER_SWITCHING,
+ newUser, 0, resultCallback));
}
@Override
- public void onUserSwitching(int userId) {
- Log.d(TAG, String.format("onUserSwitching %d", userId));
- synchronized (KeyguardViewMediator.this) {
- mIgnoreDismiss = true;
- notifyTrustedChangedLocked(mUpdateMonitor.getUserHasTrust(userId));
- resetKeyguardDonePendingLocked();
+ public void onUserChanged(int newUser, Context userContext) {
+ mHandler.sendMessage(mHandler.obtainMessage(USER_SWITCH_COMPLETE,
+ newUser, 0));
+ }
+ };
+
+ /**
+ * Handle {@link #BEFORE_USER_SWITCHING}
+ */
+ @VisibleForTesting
+ void handleBeforeUserSwitching(int userId, Runnable resultCallback) {
+ Log.d(TAG, String.format("onBeforeUserSwitching %d", userId));
+ synchronized (KeyguardViewMediator.this) {
+ mHandler.removeMessages(DISMISS);
+ notifyTrustedChangedLocked(mUpdateMonitor.getUserHasTrust(userId));
+ resetKeyguardDonePendingLocked();
+ adjustStatusBarLocked();
+ mKeyguardStateController.notifyKeyguardGoingAway(false);
+ if (mLockPatternUtils.isSecure(userId) && !mShowing) {
+ doKeyguardLocked(null);
+ } else {
resetStateLocked();
- adjustStatusBarLocked();
}
+ resultCallback.run();
}
+ }
- @Override
- public void onUserSwitchComplete(int userId) {
- mIgnoreDismiss = false;
- Log.d(TAG, String.format("onUserSwitchComplete %d", userId));
+ /**
+ * Handle {@link #USER_SWITCHING}
+ */
+ @VisibleForTesting
+ void handleUserSwitching(int userId, Runnable resultCallback) {
+ Log.d(TAG, String.format("onUserSwitching %d", userId));
+ synchronized (KeyguardViewMediator.this) {
+ if (!mLockPatternUtils.isSecure(userId)) {
+ dismiss(null, null);
+ }
+ resultCallback.run();
+ }
+ }
+
+ /**
+ * Handle {@link #USER_SWITCH_COMPLETE}
+ */
+ @VisibleForTesting
+ void handleUserSwitchComplete(int userId) {
+ Log.d(TAG, String.format("onUserSwitchComplete %d", userId));
+ // Calling dismiss on a secure user will show the bouncer
+ if (mLockPatternUtils.isSecure(userId)) {
// We are calling dismiss with a delay as there are race conditions in some scenarios
// caused by async layout listeners
mHandler.postDelayed(() -> dismiss(null /* callback */, null /* message */), 500);
}
+ }
+
+ KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() {
+
+ @Override
+ public void onKeyguardVisibilityChanged(boolean visible) {
+ synchronized (KeyguardViewMediator.this) {
+ if (!visible && mPendingPinLock) {
+ Log.i(TAG, "PIN lock requested, starting keyguard");
+
+ // Bring the keyguard back in order to show the PIN lock
+ mPendingPinLock = false;
+ doKeyguardLocked(null);
+ }
+ }
+ }
@Override
public void onDeviceProvisioned() {
@@ -1671,7 +1736,13 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
com.android.internal.R.anim.lock_screen_behind_enter);
mWorkLockController = new WorkLockActivityController(mContext, mUserTracker);
-
+ mUserTracker.addCallback(mUserChangedCallback, mContext.getMainExecutor());
+ // start() can be invoked in the middle of user switching, so check for this state and issue
+ // the call manually as that important event was missed.
+ if (mUserTracker.isUserSwitching()) {
+ handleBeforeUserSwitching(mUserTracker.getUserId(), () -> {});
+ handleUserSwitching(mUserTracker.getUserId(), () -> {});
+ }
mJavaAdapter.alwaysCollectFlow(
mWallpaperRepository.getWallpaperSupportsAmbientMode(),
this::setWallpaperSupportsAmbientMode);
@@ -1720,7 +1791,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
// System ready can be invoked in the middle of user switching, so check for this state
// and issue the call manually as that important event was missed.
if (mUserTracker.isUserSwitching()) {
- mUpdateCallback.onUserSwitching(mUserTracker.getUserId());
+ mUserChangedCallback.onUserChanging(mUserTracker.getUserId(), mContext, () -> {});
}
}
// Most services aren't available until the system reaches the ready state, so we
@@ -2361,12 +2432,23 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
mCommunalSceneInteractor.get().showHubFromPowerButton();
}
+ int currentUserId = mSelectedUserInteractor.getSelectedUserId();
+ if (options != null && options.getBinder(LOCK_ON_USER_SWITCH_CALLBACK) != null) {
+ LockNowCallback callback = new LockNowCallback(currentUserId,
+ IRemoteCallback.Stub.asInterface(
+ options.getBinder(LOCK_ON_USER_SWITCH_CALLBACK)));
+ synchronized (mLockNowCallbacks) {
+ mLockNowCallbacks.add(callback);
+ }
+ Log.d(TAG, "LockNowCallback required for user: " + callback.mUserId);
+ }
+
// if another app is disabling us, don't show
if (!mExternallyEnabled
&& !mLockPatternUtils.isUserInLockdown(
mSelectedUserInteractor.getSelectedUserId())) {
if (DEBUG) Log.d(TAG, "doKeyguard: not showing because externally disabled");
-
+ notifyLockNowCallback();
mNeedToReshowWhenReenabled = true;
return;
}
@@ -2384,6 +2466,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
// We're removing "reset" in the refactor - "resetting" the views will happen
// as a reaction to the root cause of the "reset" signal.
if (KeyguardWmStateRefactor.isEnabled()) {
+ notifyLockNowCallback();
return;
}
@@ -2396,6 +2479,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
+ "previously hiding. It should be safe to short-circuit "
+ "here.");
resetStateLocked(/* hideBouncer= */ false);
+ notifyLockNowCallback();
return;
}
} else {
@@ -2422,6 +2506,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
Log.d(TAG, "doKeyguard: not showing because device isn't provisioned and the sim is"
+ " not locked or missing");
}
+ notifyLockNowCallback();
return;
}
@@ -2429,6 +2514,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
if (mLockPatternUtils.isLockScreenDisabled(mSelectedUserInteractor.getSelectedUserId())
&& !lockedOrMissing && !forceShow) {
if (DEBUG) Log.d(TAG, "doKeyguard: not showing because lockscreen is off");
+ notifyLockNowCallback();
return;
}
@@ -2476,11 +2562,6 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
}
public void dismiss(IKeyguardDismissCallback callback, CharSequence message) {
- if (mIgnoreDismiss) {
- android.util.Log.i(TAG, "Ignoring request to dismiss (user switch in progress?)");
- return;
- }
-
if (mKeyguardStateController.isKeyguardGoingAway()) {
Log.i(TAG, "Ignoring dismiss because we're already going away.");
return;
@@ -2498,7 +2579,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
}
private void resetStateLocked(boolean hideBouncer) {
- if (DEBUG) Log.e(TAG, "resetStateLocked");
+ if (DEBUG) Log.d(TAG, "resetStateLocked");
Message msg = mHandler.obtainMessage(RESET, hideBouncer ? 1 : 0, 0);
mHandler.sendMessage(msg);
}
@@ -2746,6 +2827,18 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
message = "BOOT_INTERACTOR";
handleBootInteractor();
break;
+ case BEFORE_USER_SWITCHING:
+ message = "BEFORE_USER_SWITCHING";
+ handleBeforeUserSwitching(msg.arg1, (Runnable) msg.obj);
+ break;
+ case USER_SWITCHING:
+ message = "USER_SWITCHING";
+ handleUserSwitching(msg.arg1, (Runnable) msg.obj);
+ break;
+ case USER_SWITCH_COMPLETE:
+ message = "USER_SWITCH_COMPLETE";
+ handleUserSwitchComplete(msg.arg1);
+ break;
}
Log.d(TAG, "KeyguardViewMediator queue processing message: " + message);
}
@@ -2887,6 +2980,9 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
mUiBgExecutor.execute(() -> {
Log.d(TAG, "updateActivityLockScreenState(" + showing + ", " + aodShowing + ", "
+ reason + ")");
+ if (showing) {
+ notifyLockNowCallback();
+ }
if (KeyguardWmStateRefactor.isEnabled()) {
// Handled in WmLockscreenVisibilityManager if flag is enabled.
@@ -2931,6 +3027,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
synchronized (KeyguardViewMediator.this) {
if (!mSystemReady) {
if (DEBUG) Log.d(TAG, "ignoring handleShow because system is not ready.");
+ notifyLockNowCallback();
return;
}
if (DEBUG) Log.d(TAG, "handleShow");
@@ -2989,12 +3086,11 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
}
}
- private final Runnable mKeyguardGoingAwayRunnable = new Runnable() {
+ final Runnable mKeyguardGoingAwayRunnable = new Runnable() {
@SuppressLint("MissingPermission")
@Override
public void run() {
Trace.beginSection("KeyguardViewMediator.mKeyGuardGoingAwayRunnable");
- Log.d(TAG, "keyguardGoingAwayRunnable");
mKeyguardViewControllerLazy.get().keyguardGoingAway();
int flags = 0;
@@ -3031,6 +3127,10 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
// Handled in WmLockscreenVisibilityManager if flag is enabled.
if (!KeyguardWmStateRefactor.isEnabled()) {
+ mGoingAwayRequestedForUserId = mSelectedUserInteractor.getSelectedUserId();
+ Log.d(TAG, "keyguardGoingAway requested for userId: "
+ + mGoingAwayRequestedForUserId);
+
// Don't actually hide the Keyguard at the moment, wait for window manager
// until it tells us it's safe to do so with startKeyguardExitAnimation.
// Posting to mUiOffloadThread to ensure that calls to ActivityTaskManager
@@ -3169,6 +3269,30 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
RemoteAnimationTarget[] nonApps, IRemoteAnimationFinishedCallback finishedCallback) {
Log.d(TAG, "handleStartKeyguardExitAnimation startTime=" + startTime
+ " fadeoutDuration=" + fadeoutDuration);
+ int currentUserId = mSelectedUserInteractor.getSelectedUserId();
+ if (!KeyguardWmStateRefactor.isEnabled() && mGoingAwayRequestedForUserId != currentUserId) {
+ Log.e(TAG, "Not executing handleStartKeyguardExitAnimationInner() due to userId "
+ + "mismatch. Requested: " + mGoingAwayRequestedForUserId + ", current: "
+ + currentUserId);
+ if (finishedCallback != null) {
+ // There will not execute animation, send a finish callback to ensure the remote
+ // animation won't hang there.
+ try {
+ finishedCallback.onAnimationFinished();
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failed to call onAnimationFinished", e);
+ }
+ }
+ mHiding = false;
+ if (mLockPatternUtils.isSecure(currentUserId)) {
+ doKeyguardLocked(null);
+ } else {
+ resetStateLocked();
+ dismiss(null, null);
+ }
+ return;
+ }
+
synchronized (KeyguardViewMediator.this) {
mIsKeyguardExitAnimationCanceled = false;
// Tell ActivityManager that we canceled the keyguard animation if
@@ -3413,6 +3537,13 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
* app transition before finishing the current RemoteAnimation, or the keyguard being re-shown).
*/
private void handleCancelKeyguardExitAnimation() {
+ if (!KeyguardWmStateRefactor.isEnabled()
+ && mGoingAwayRequestedForUserId != mSelectedUserInteractor.getSelectedUserId()) {
+ Log.e(TAG, "Setting pendingLock = true due to userId mismatch. Requested: "
+ + mGoingAwayRequestedForUserId + ", current: "
+ + mSelectedUserInteractor.getSelectedUserId());
+ setPendingLock(true);
+ }
if (mPendingLock) {
Log.d(TAG, "#handleCancelKeyguardExitAnimation: keyguard exit animation cancelled. "
+ "There's a pending lock, so we were cancelled because the device was locked "
@@ -3513,6 +3644,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
mSurfaceBehindRemoteAnimationRequested = true;
if (ENABLE_NEW_KEYGUARD_SHELL_TRANSITIONS && !KeyguardWmStateRefactor.isEnabled()) {
+ mGoingAwayRequestedForUserId = mSelectedUserInteractor.getSelectedUserId();
startKeyguardTransition(false /* keyguardShowing */, false /* aodShowing */);
return;
}
@@ -3533,6 +3665,9 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
if (!KeyguardWmStateRefactor.isEnabled()) {
// Handled in WmLockscreenVisibilityManager.
+ mGoingAwayRequestedForUserId = mSelectedUserInteractor.getSelectedUserId();
+ Log.d(TAG, "keyguardGoingAway requested for userId: "
+ + mGoingAwayRequestedForUserId);
mActivityTaskManagerService.keyguardGoingAway(flags);
}
} catch (RemoteException e) {
@@ -3988,6 +4123,29 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
mUiBgExecutor.execute(mTrustManager::reportKeyguardShowingChanged);
}
+ private void notifyLockNowCallback() {
+ List<LockNowCallback> callbacks;
+ synchronized (mLockNowCallbacks) {
+ callbacks = new ArrayList<LockNowCallback>(mLockNowCallbacks);
+ mLockNowCallbacks.clear();
+ }
+ Iterator<LockNowCallback> iter = callbacks.listIterator();
+ while (iter.hasNext()) {
+ LockNowCallback callback = iter.next();
+ iter.remove();
+ if (callback.mUserId != mSelectedUserInteractor.getSelectedUserId()) {
+ Log.i(TAG, "Not notifying lockNowCallback due to user mismatch");
+ continue;
+ }
+ Log.i(TAG, "Notifying lockNowCallback");
+ try {
+ callback.mRemoteCallback.sendResult(null);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Could not issue LockNowCallback sendResult", e);
+ }
+ }
+ }
+
private void notifyTrustedChangedLocked(boolean trusted) {
int size = mKeyguardStateCallbacks.size();
for (int i = size - 1; i >= 0; i--) {
@@ -4152,4 +4310,14 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
}
};
}
+
+ private class LockNowCallback {
+ final int mUserId;
+ final IRemoteCallback mRemoteCallback;
+
+ LockNowCallback(int userId, IRemoteCallback remoteCallback) {
+ mUserId = userId;
+ mRemoteCallback = remoteCallback;
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardTransitionRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardTransitionRepository.kt
index 2a1cb12c153e..f7ed10f40842 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardTransitionRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardTransitionRepository.kt
@@ -24,6 +24,7 @@ import android.annotation.SuppressLint
import android.os.Trace
import android.util.Log
import com.android.app.animation.Interpolators
+import com.android.app.tracing.coroutines.flow.traceAs
import com.android.app.tracing.coroutines.withContextTraced as withContext
import com.android.systemui.Flags.transitionRaceCondition
import com.android.systemui.dagger.SysUISingleton
@@ -43,7 +44,6 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
-import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
@@ -143,11 +143,12 @@ constructor(
@SuppressLint("SharedFlowCreation")
private val _transitions =
MutableSharedFlow<TransitionStep>(
- replay = 2,
- extraBufferCapacity = 20,
- onBufferOverflow = BufferOverflow.DROP_OLDEST,
- )
- override val transitions = _transitions.asSharedFlow().distinctUntilChanged()
+ replay = 2,
+ extraBufferCapacity = 20,
+ onBufferOverflow = BufferOverflow.DROP_OLDEST,
+ )
+ .traceAs("KTR-transitions")
+ override val transitions = _transitions.distinctUntilChanged()
private var lastStep: TransitionStep = TransitionStep()
private var lastAnimator: ValueAnimator? = null
private var animatorListener: AnimatorListenerAdapter? = null
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt
index c755c4b02feb..bf0f25ff089e 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt
@@ -17,8 +17,12 @@
package com.android.systemui.keyguard.domain.interactor
import android.animation.ValueAnimator
+import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.communal.domain.interactor.CommunalInteractor
+import com.android.systemui.communal.domain.interactor.CommunalSceneInteractor
+import com.android.systemui.communal.domain.interactor.CommunalSettingsInteractor
+import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
@@ -46,7 +50,6 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.onStart
-import com.android.app.tracing.coroutines.launchTraced as launch
@SysUISingleton
class FromAlternateBouncerTransitionInteractor
@@ -60,6 +63,8 @@ constructor(
@Main mainDispatcher: CoroutineDispatcher,
keyguardInteractor: KeyguardInteractor,
private val communalInteractor: CommunalInteractor,
+ private val communalSettingsInteractor: CommunalSettingsInteractor,
+ private val communalSceneInteractor: CommunalSceneInteractor,
powerInteractor: PowerInteractor,
keyguardOcclusionInteractor: KeyguardOcclusionInteractor,
private val primaryBouncerInteractor: PrimaryBouncerInteractor,
@@ -86,7 +91,7 @@ constructor(
.transition(
edge = Edge.create(from = KeyguardState.ALTERNATE_BOUNCER, to = Scenes.Gone),
edgeWithoutSceneContainer =
- Edge.create(from = KeyguardState.ALTERNATE_BOUNCER, to = KeyguardState.GONE)
+ Edge.create(from = KeyguardState.ALTERNATE_BOUNCER, to = KeyguardState.GONE),
)
.map {
// The alt bouncer is pretty fast to hide, so start the surface behind animation
@@ -112,7 +117,7 @@ constructor(
keyguardInteractor.primaryBouncerShowing,
powerInteractor.isAwake,
keyguardInteractor.isAodAvailable,
- communalInteractor.isIdleOnCommunal,
+ communalSceneInteractor.isIdleOnCommunal,
communalInteractor.editModeOpen,
keyguardInteractor.isKeyguardOccluded,
)
@@ -133,6 +138,7 @@ constructor(
// to GONE prevents the lockscreen flash. Let listenForAlternateBouncerToGone
// handle it.
if (isCommunalEditMode) return@collect
+ val hubV2 = communalSettingsInteractor.isV2FlagEnabled()
val to =
if (!isAwake) {
if (isAodAvailable) {
@@ -141,16 +147,30 @@ constructor(
KeyguardState.DOZING
}
} else {
- if (isIdleOnCommunal) {
+ if (!hubV2 && isIdleOnCommunal) {
if (SceneContainerFlag.isEnabled) return@collect
KeyguardState.GLANCEABLE_HUB
} else if (isOccluded) {
KeyguardState.OCCLUDED
+ } else if (hubV2 && isIdleOnCommunal) {
+ if (SceneContainerFlag.isEnabled) return@collect
+ KeyguardState.GLANCEABLE_HUB
} else {
KeyguardState.LOCKSCREEN
}
}
- startTransitionTo(to)
+
+ if (hubV2 && to != KeyguardState.GLANCEABLE_HUB && isIdleOnCommunal) {
+ // If bouncer is showing over the hub, we need to make sure we
+ // properly dismiss the hub when transitioning away.
+ communalSceneInteractor.changeScene(
+ newScene = CommunalScenes.Blank,
+ loggingReason = "alternate bouncer no longer showing over GH",
+ keyguardState = to,
+ )
+ } else {
+ startTransitionTo(to)
+ }
}
}
}
@@ -173,7 +193,7 @@ constructor(
} else {
emptyFlow()
}
- }
+ },
)
.filterRelevantKeyguardState()
.collect { startTransitionTo(KeyguardState.GONE) }
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt
index 6f5f662d6fa3..0700ec639153 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt
@@ -159,6 +159,7 @@ constructor(
val isKeyguardOccludedLegacy = keyguardInteractor.isKeyguardOccluded.value
val primaryBouncerShowing = keyguardInteractor.primaryBouncerShowing.value
val isKeyguardGoingAway = keyguardInteractor.isKeyguardGoingAway.value
+ val canStartDreaming = dreamManager.canStartDreaming(false)
if (!deviceEntryInteractor.isLockscreenEnabled()) {
if (!SceneContainerFlag.isEnabled) {
@@ -191,6 +192,13 @@ constructor(
if (!SceneContainerFlag.isEnabled) {
transitionToGlanceableHub()
}
+ } else if (canStartDreaming) {
+ // If we're waking up to dream, transition directly to dreaming without
+ // showing the lockscreen.
+ startTransitionTo(
+ KeyguardState.DREAMING,
+ ownerReason = "moving from doze to dream",
+ )
} else {
startTransitionTo(KeyguardState.LOCKSCREEN)
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt
index 30c1aac7b2a7..75d6631008ca 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt
@@ -21,6 +21,7 @@ import android.util.Log
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.keyguard.KeyguardSecurityModel
import com.android.systemui.communal.domain.interactor.CommunalSceneInteractor
+import com.android.systemui.communal.domain.interactor.CommunalSettingsInteractor
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
@@ -35,6 +36,7 @@ import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.user.domain.interactor.SelectedUserInteractor
import com.android.systemui.util.kotlin.Utils.Companion.sample
+import com.android.systemui.util.kotlin.sample
import com.android.wm.shell.shared.animation.Interpolators
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
@@ -42,6 +44,7 @@ import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
@@ -57,6 +60,7 @@ constructor(
@Main mainDispatcher: CoroutineDispatcher,
keyguardInteractor: KeyguardInteractor,
private val communalSceneInteractor: CommunalSceneInteractor,
+ private val communalSettingsInteractor: CommunalSettingsInteractor,
private val keyguardSecurityModel: KeyguardSecurityModel,
private val selectedUserInteractor: SelectedUserInteractor,
powerInteractor: PowerInteractor,
@@ -140,14 +144,17 @@ constructor(
)
.collect { (_, isAwake, isDreaming, isIdleOnCommunal) ->
val isOccluded = keyguardInteractor.isKeyguardOccluded.value
+ val hubV2 = communalSettingsInteractor.isV2FlagEnabled()
val toState =
if (isAwake) {
if (isOccluded && !isDreaming) {
KeyguardState.OCCLUDED
- } else if (isIdleOnCommunal) {
+ } else if (!hubV2 && isIdleOnCommunal) {
KeyguardState.GLANCEABLE_HUB
} else if (isDreaming) {
KeyguardState.DREAMING
+ } else if (hubV2 && isIdleOnCommunal) {
+ KeyguardState.GLANCEABLE_HUB
} else {
KeyguardState.LOCKSCREEN
}
@@ -161,7 +168,17 @@ constructor(
)
keyguardInteractor.asleepKeyguardState.value
}
- startTransitionTo(toState)
+ if (hubV2 && toState != KeyguardState.GLANCEABLE_HUB && isIdleOnCommunal) {
+ // If bouncer is showing over the hub, we need to make sure we
+ // properly dismiss the hub when transitioning away.
+ communalSceneInteractor.changeScene(
+ newScene = CommunalScenes.Blank,
+ loggingReason = "bouncer no longer showing over GH",
+ keyguardState = toState,
+ )
+ } else {
+ startTransitionTo(toState)
+ }
}
}
}
@@ -184,7 +201,32 @@ constructor(
private fun listenForPrimaryBouncerToAsleep() {
if (SceneContainerFlag.isEnabled) return
- scope.launch { listenForSleepTransition() }
+ scope.launch {
+ if (communalSettingsInteractor.isV2FlagEnabled()) {
+ powerInteractor.isAsleep
+ .filter { isAsleep -> isAsleep }
+ .filterRelevantKeyguardState()
+ .sample(communalSceneInteractor.isIdleOnCommunal)
+ .collect { isIdleOnCommunal ->
+ if (isIdleOnCommunal) {
+ // If the bouncer is showing on top of the hub, then ensure we also
+ // hide the hub.
+ communalSceneInteractor.changeScene(
+ newScene = CommunalScenes.Blank,
+ loggingReason = "Sleep while primary bouncer showing over hub",
+ keyguardState = keyguardInteractor.asleepKeyguardState.value,
+ )
+ } else {
+ startTransitionTo(
+ toState = keyguardInteractor.asleepKeyguardState.value,
+ ownerReason = "Sleep transition triggered",
+ )
+ }
+ }
+ } else {
+ listenForSleepTransition()
+ }
+ }
}
private fun listenForPrimaryBouncerToGone() {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt
index 96e05cb7cd63..673fa9730c53 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt
@@ -36,6 +36,8 @@ import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.statusbar.notification.domain.interactor.ActiveNotificationsInteractor
import com.android.systemui.statusbar.notification.domain.interactor.HeadsUpNotificationInteractor
+import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUiAod
+import com.android.systemui.statusbar.notification.promoted.domain.interactor.AODPromotedNotificationInteractor
import com.android.systemui.util.kotlin.combine
import com.android.systemui.wallpapers.domain.interactor.WallpaperFocalAreaInteractor
import javax.inject.Inject
@@ -45,6 +47,7 @@ import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.filterNotNull
+import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
@@ -57,6 +60,7 @@ class KeyguardClockInteractor
constructor(
mediaCarouselInteractor: MediaCarouselInteractor,
activeNotificationsInteractor: ActiveNotificationsInteractor,
+ aodPromotedNotificationInteractor: AODPromotedNotificationInteractor,
shadeInteractor: ShadeInteractor,
keyguardInteractor: KeyguardInteractor,
keyguardTransitionInteractor: KeyguardTransitionInteractor,
@@ -80,11 +84,30 @@ constructor(
var clock: ClockController? by keyguardClockRepository.clockEventController::clock
+ private val isAodPromotedNotificationPresent: Flow<Boolean> =
+ if (PromotedNotificationUiAod.isEnabled) {
+ aodPromotedNotificationInteractor.isPresent
+ } else {
+ flowOf(false)
+ }
+
+ private val areAnyNotificationsPresent: Flow<Boolean> =
+ if (PromotedNotificationUiAod.isEnabled) {
+ combine(
+ activeNotificationsInteractor.areAnyNotificationsPresent,
+ isAodPromotedNotificationPresent,
+ ) { areAnyNotificationsPresent, isAodPromotedNotificationPresent ->
+ areAnyNotificationsPresent || isAodPromotedNotificationPresent
+ }
+ } else {
+ activeNotificationsInteractor.areAnyNotificationsPresent
+ }
+
val clockSize: StateFlow<ClockSize> =
if (SceneContainerFlag.isEnabled) {
combine(
shadeInteractor.isShadeLayoutWide,
- activeNotificationsInteractor.areAnyNotificationsPresent,
+ areAnyNotificationsPresent,
mediaCarouselInteractor.hasActiveMediaOrRecommendation,
keyguardInteractor.isDozing,
isOnAod,
@@ -110,23 +133,32 @@ constructor(
if (SceneContainerFlag.isEnabled) {
combine(
shadeInteractor.isShadeLayoutWide,
- activeNotificationsInteractor.areAnyNotificationsPresent,
+ areAnyNotificationsPresent,
+ isAodPromotedNotificationPresent,
isOnAod,
headsUpNotificationInteractor.isHeadsUpOrAnimatingAway,
keyguardInteractor.isDozing,
- ) { isShadeLayoutWide, areAnyNotificationsPresent, isOnAod, isHeadsUp, isDozing ->
+ ) {
+ isShadeLayoutWide,
+ areAnyNotificationsPresent,
+ isAodPromotedNotificationPresent,
+ isOnAod,
+ isHeadsUp,
+ isDozing ->
when {
!isShadeLayoutWide -> true
!areAnyNotificationsPresent -> true
// Pulsing notification appears on the right. Move clock left to avoid overlap.
isHeadsUp && isDozing -> false
+ isAodPromotedNotificationPresent -> false
else -> isOnAod
}
}
} else {
combine(
shadeInteractor.isShadeLayoutWide,
- activeNotificationsInteractor.areAnyNotificationsPresent,
+ areAnyNotificationsPresent,
+ isAodPromotedNotificationPresent,
keyguardInteractor.dozeTransitionModel,
keyguardTransitionInteractor.startedKeyguardTransitionStep.map { it.to == AOD },
keyguardTransitionInteractor.startedKeyguardTransitionStep.map {
@@ -140,6 +172,7 @@ constructor(
) {
isShadeLayoutWide,
areAnyNotificationsPresent,
+ isAodPromotedNotificationPresent,
dozeTransitionModel,
startedToAod,
startedToLockScreen,
@@ -156,7 +189,7 @@ constructor(
// use null to skip emitting wrong value
startedToGone || startedToDoze -> null
startedToLockScreen -> !areAnyNotificationsPresent
- startedToAod -> !isPulsing
+ startedToAod -> !(isPulsing || isAodPromotedNotificationPresent)
else -> true
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt
index 58fb4230ccf5..3b4a1488095a 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt
@@ -19,7 +19,10 @@ package com.android.systemui.keyguard.domain.interactor
import android.annotation.SuppressLint
import android.util.Log
+import com.android.app.tracing.coroutines.flow.filterTraced
+import com.android.app.tracing.coroutines.flow.traceAs
import com.android.app.tracing.coroutines.launchTraced as launch
+import com.android.app.tracing.coroutines.traceCoroutine
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.SceneKey
import com.android.systemui.Flags.keyguardTransitionForceFinishOnScreenOff
@@ -90,6 +93,7 @@ constructor(
onBufferOverflow = BufferOverflow.DROP_OLDEST,
)
.also { it.tryEmit(0f) }
+ .traceAs("KTF-${state.name}")
}
}
@@ -222,10 +226,11 @@ constructor(
val flow: Flow<TransitionStep> =
transitionMap.getOrPut(mappedEdge) {
- MutableSharedFlow(
- extraBufferCapacity = 10,
- onBufferOverflow = BufferOverflow.DROP_OLDEST,
- )
+ MutableSharedFlow<TransitionStep>(
+ extraBufferCapacity = 10,
+ onBufferOverflow = BufferOverflow.DROP_OLDEST,
+ )
+ .traceAs("KTF-${mappedEdge.from}-to-${mappedEdge.to}")
}
if (!SceneContainerFlag.isEnabled) {
@@ -234,7 +239,7 @@ constructor(
if (edge.isSceneWildcardEdge()) {
return simulateTransitionStepsForSceneTransitions(edge)
}
- return flow.filter { step ->
+ return flow.filterTraced("stl-filter") { step ->
val fromScene =
when (edge) {
is Edge.StateToState -> edge.from?.mapToSceneContainerScene()
@@ -273,7 +278,7 @@ constructor(
step.transitionState == TransitionState.CANCELED) &&
sceneTransitionPair.value.previousValue.isTransitioning(fromScene, toScene)
- return@filter isTransitioningBetweenLockscreenStates ||
+ return@filterTraced isTransitioningBetweenLockscreenStates ||
isTransitioningBetweenDesiredScenes ||
terminalStepBelongsToPreviousTransition ||
belongsToInstantReversedTransition
@@ -362,27 +367,27 @@ constructor(
coroutineScope {
collect { value ->
- job?.cancelAndJoin()
+ traceCoroutine("cancelAndJoin") { job?.cancelAndJoin() }
- job = launch {
+ job = launch("inner") {
val innerFlow = transform(value)
try {
innerFlow.collect { step ->
if (step.transitionState == TransitionState.STARTED) {
startedEmitted = true
}
- send(step)
+ traceCoroutine("send($step)") { send(step) }
}
} finally {
if (startedEmitted) {
- send(
+ val step =
TransitionStep(
from = UNDEFINED,
to = UNDEFINED,
value = 1f,
transitionState = TransitionState.FINISHED,
)
- )
+ traceCoroutine("send($step)") { send(step) }
startedEmitted = false
}
}
@@ -390,6 +395,7 @@ constructor(
}
}
}
+ .traceAs("flatMapLatestWithFinished")
/**
* Converts old KTF states to UNDEFINED when [SceneContainerFlag] is enabled.
@@ -545,6 +551,7 @@ constructor(
}
}
.onStart { emit(false) }
+ .traceAs("isInTransition-$edge-$edgeWithoutSceneContainer")
.distinctUntilChanged()
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
index 00710c97d00a..8e385385b8c4 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
@@ -300,7 +300,7 @@ object KeyguardRootViewBinder {
}
launch {
- viewModel.isNotifIconContainerVisible.collect { isVisible ->
+ viewModel.isAodPromotedNotifVisible.collect { isVisible ->
if (isVisible.value) {
blueprintViewModel.refreshBlueprint()
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/LightRevealScrimViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/LightRevealScrimViewBinder.kt
index 97fa3f19a82e..f0113a5b6020 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/LightRevealScrimViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/LightRevealScrimViewBinder.kt
@@ -26,7 +26,6 @@ import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.shared.Flags.ambientAod
import com.android.systemui.statusbar.LightRevealScrim
import com.android.systemui.wallpapers.ui.viewmodel.WallpaperViewModel
-import com.android.app.tracing.coroutines.launchTraced as launch
object LightRevealScrimViewBinder {
@JvmStatic
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DozingToDreamingTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DozingToDreamingTransitionViewModel.kt
index e6a85c6860c5..9018c58a7e36 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DozingToDreamingTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DozingToDreamingTransitionViewModel.kt
@@ -39,4 +39,6 @@ constructor(animationFlow: KeyguardTransitionAnimationFlow) {
)
val lockscreenAlpha: Flow<Float> = transitionAnimation.immediatelyTransitionTo(0f)
+ // Notifications should not be shown while transitioning to dream.
+ val notificationAlpha = transitionAnimation.immediatelyTransitionTo(0f)
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt
index 62a5ebab29e0..8e21745e1a31 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt
@@ -25,6 +25,7 @@ import com.android.systemui.communal.domain.interactor.CommunalInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
+import com.android.systemui.dump.DumpManager
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.domain.interactor.PulseExpansionInteractor
@@ -44,9 +45,11 @@ import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shade.ui.viewmodel.NotificationShadeWindowModel
import com.android.systemui.statusbar.notification.domain.interactor.NotificationsKeyguardInteractor
import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel
+import com.android.systemui.statusbar.notification.promoted.domain.interactor.AODPromotedNotificationInteractor
import com.android.systemui.statusbar.phone.DozeParameters
import com.android.systemui.statusbar.phone.ScreenOffAnimationController
import com.android.systemui.util.kotlin.BooleanFlowOperators.anyOf
+import com.android.systemui.util.kotlin.FlowDumperImpl
import com.android.systemui.util.kotlin.pairwise
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.ui.AnimatableEvent
@@ -82,6 +85,7 @@ constructor(
private val notificationsKeyguardInteractor: NotificationsKeyguardInteractor,
private val pulseExpansionInteractor: PulseExpansionInteractor,
notificationShadeWindowModel: NotificationShadeWindowModel,
+ private val aodPromotedNotificationInteractor: AODPromotedNotificationInteractor,
private val aodNotificationIconViewModel: NotificationIconContainerAlwaysOnDisplayViewModel,
private val alternateBouncerToAodTransitionViewModel: AlternateBouncerToAodTransitionViewModel,
private val alternateBouncerToGoneTransitionViewModel:
@@ -134,17 +138,21 @@ constructor(
private val aodBurnInViewModel: AodBurnInViewModel,
private val shadeInteractor: ShadeInteractor,
wallpaperFocalAreaInteractor: WallpaperFocalAreaInteractor,
-) {
+ dumpManager: DumpManager,
+) : FlowDumperImpl(dumpManager) {
val burnInLayerVisibility: Flow<Int> =
keyguardTransitionInteractor.startedKeyguardTransitionStep
.filter { it.to == AOD || it.to == LOCKSCREEN }
.map { VISIBLE }
+ .dumpWhileCollecting("burnInLayerVisibility")
val goneToAodTransition =
- keyguardTransitionInteractor.transition(
- edge = Edge.create(Scenes.Gone, AOD),
- edgeWithoutSceneContainer = Edge.create(GONE, AOD),
- )
+ keyguardTransitionInteractor
+ .transition(
+ edge = Edge.create(Scenes.Gone, AOD),
+ edgeWithoutSceneContainer = Edge.create(GONE, AOD),
+ )
+ .dumpWhileCollecting("goneToAodTransition")
private val goneToAodTransitionRunning: Flow<Boolean> =
goneToAodTransition
@@ -222,13 +230,15 @@ constructor(
)
/** Last point that the root view was tapped */
- val lastRootViewTapPosition: Flow<Point?> = keyguardInteractor.lastRootViewTapPosition
+ val lastRootViewTapPosition: Flow<Point?> =
+ keyguardInteractor.lastRootViewTapPosition.dumpWhileCollecting("lastRootViewTapPosition")
/**
* The keyguard root view can be clipped as the shade is pulled down, typically only for
* non-split shade cases.
*/
- val topClippingBounds: Flow<Int?> = keyguardInteractor.topClippingBounds
+ val topClippingBounds: Flow<Int?> =
+ keyguardInteractor.topClippingBounds.dumpWhileCollecting("topClippingBounds")
/** An observable for the alpha level for the entire keyguard root view. */
fun alpha(viewState: ViewStateAccessor): Flow<Float> {
@@ -287,40 +297,56 @@ constructor(
}
}
.distinctUntilChanged()
+ .dumpWhileCollecting("alpha")
}
val scaleFromZoomOut: Flow<Float> =
- keyguardInteractor.zoomOut.map { 1 - it * PUSHBACK_SCALE_FOR_LOCKSCREEN }
+ keyguardInteractor.zoomOut
+ .map { 1 - it * PUSHBACK_SCALE_FOR_LOCKSCREEN }
+ .dumpWhileCollecting("scaleFromZoomOut")
- val translationY: Flow<Float> = aodBurnInViewModel.movement.map { it.translationY.toFloat() }
+ val translationY: Flow<Float> =
+ aodBurnInViewModel.movement
+ .map { it.translationY.toFloat() }
+ .dumpWhileCollecting("translationY")
val translationX: Flow<StateToValue> =
merge(
- aodBurnInViewModel.movement.map {
- StateToValue(to = AOD, value = it.translationX.toFloat())
- },
- lockscreenToGlanceableHubTransitionViewModel.keyguardTranslationX,
- glanceableHubToLockscreenTransitionViewModel.keyguardTranslationX,
- )
+ aodBurnInViewModel.movement.map {
+ StateToValue(to = AOD, value = it.translationX.toFloat())
+ },
+ lockscreenToGlanceableHubTransitionViewModel.keyguardTranslationX,
+ glanceableHubToLockscreenTransitionViewModel.keyguardTranslationX,
+ )
+ .dumpWhileCollecting("translationX")
fun updateBurnInParams(params: BurnInParameters) {
aodBurnInViewModel.updateBurnInParams(params)
}
val scale: Flow<BurnInScaleViewModel> =
- aodBurnInViewModel.movement.map {
- BurnInScaleViewModel(scale = it.scale, scaleClockOnly = it.scaleClockOnly)
- }
+ aodBurnInViewModel.movement
+ .map { BurnInScaleViewModel(scale = it.scale, scaleClockOnly = it.scaleClockOnly) }
+ .dumpWhileCollecting("scale")
- val isAodPromotedNotifVisible: StateFlow<Boolean> =
- keyguardTransitionInteractor
- .transitionValue(AOD)
- .map { it == 1f }
+ val isAodPromotedNotifVisible: StateFlow<AnimatedValue<Boolean>> =
+ combine(
+ areNotifsFullyHiddenAnimated(),
+ isPulseExpandingAnimated(),
+ aodPromotedNotificationInteractor.isPresent,
+ ) { notifsFullyHiddenAnimated, pulseExpandingAnimated, haveAodPromotedNotif ->
+ zip(notifsFullyHiddenAnimated, pulseExpandingAnimated) {
+ notifsFullyHidden,
+ pulseExpanding ->
+ notifsFullyHidden && !pulseExpanding && haveAodPromotedNotif
+ }
+ }
.stateIn(
scope = applicationScope,
started = SharingStarted.WhileSubscribed(),
- initialValue = false,
+ initialValue = AnimatedValue.NotAnimating(false),
)
+ .dumpValue("isAodPromotedNotifVisible")
/** Is the notification icon container visible? */
val isNotifIconContainerVisible: StateFlow<AnimatedValue<Boolean>> =
@@ -376,6 +402,7 @@ constructor(
started = SharingStarted.WhileSubscribed(),
initialValue = AnimatedValue.NotAnimating(false),
)
+ .dumpValue("isNotifIconContainerVisible")
fun onNotificationContainerBoundsChanged(top: Float, bottom: Float, animate: Boolean = false) {
keyguardInteractor.setNotificationContainerBounds(
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java
index 3d2aafeba1a5..f5e62323e769 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java
@@ -185,6 +185,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
}
boolean isDeviceGroup = false;
+ boolean hideGroupItem = false;
GroupStatus groupStatus = null;
OngoingSessionStatus ongoingSessionStatus = null;
ConnectionState connectionState = ConnectionState.DISCONNECTED;
@@ -209,109 +210,118 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
&& !mController.isCurrentConnectedDeviceRemote()) {
connectionState = ConnectionState.CONNECTED;
restrictVolumeAdjustment = true;
- mCurrentActivePosition = position;
- clickListener = v -> onItemClick(v, device);
- } else if (mShouldGroupSelectedMediaItems
- && mController.getSelectedMediaDevice().size() > 1
- && isDeviceIncluded(mController.getSelectedMediaDevice(), device)) {
- if (!mediaItem.isFirstDeviceInGroup()) {
- mItemLayout.setVisibility(View.GONE);
- return;
- } else {
- isDeviceGroup = true;
- }
- } else if (device.hasSubtext()) {
- subtitle = device.getSubtextString();
- boolean isActiveWithOngoingSession =
- device.hasOngoingSession() && (currentlyConnected || isSelected);
- if (isActiveWithOngoingSession) {
- mCurrentActivePosition = position;
- ongoingSessionStatus = new OngoingSessionStatus(
- device.isHostForOngoingSession());
- connectionState = ConnectionState.CONNECTED;
- } else {
- if (currentlyConnected) {
- mCurrentActivePosition = position;
- connectionState = ConnectionState.CONNECTED;
- }
- clickListener = getClickListenerBasedOnSelectionBehavior(device);
- deviceDisabled = clickListener == null;
- deviceStatusIcon = getDeviceStatusIcon(device, device.hasOngoingSession());
- }
- } else if (device.getState() == MediaDeviceState.STATE_CONNECTING_FAILED) {
- deviceStatusIcon = mContext.getDrawable(R.drawable.media_output_status_failed);
- subtitle = mContext.getString(R.string.media_output_dialog_connect_failed);
clickListener = v -> onItemClick(v, device);
+ } else if (currentlyConnected && isMutingExpectedDeviceExist
+ && !mController.isCurrentConnectedDeviceRemote()) {
+ // mark as disconnected and set special click listener
+ clickListener = v -> cancelMuteAwaitConnection();
} else if (device.getState() == MediaDeviceState.STATE_GROUPING) {
connectionState = ConnectionState.CONNECTING;
- } else if (mController.getSelectedMediaDevice().size() > 1 && isSelected) {
- // selected device in group
- groupStatus = new GroupStatus(
- true /* selected */,
- isDeselectable /* deselectable */);
- connectionState = ConnectionState.CONNECTED;
- } else if (currentlyConnected) {
- // single selected device
- if (isMutingExpectedDeviceExist
- && !mController.isCurrentConnectedDeviceRemote()) {
- // mark as disconnected and set special click listener
- clickListener = v -> cancelMuteAwaitConnection();
- } else if (device.hasOngoingSession()) {
- mCurrentActivePosition = position;
- ongoingSessionStatus = new OngoingSessionStatus(
- device.isHostForOngoingSession());
- connectionState = ConnectionState.CONNECTED;
- } else if (mController.isCurrentConnectedDeviceRemote()
- && !mController.getSelectableMediaDevice().isEmpty()) {
- //If device is connected and there's other selectable devices, layout as
- // one of selected devices.
- groupStatus = new GroupStatus(
- true /* selected */,
- isDeselectable /* isDeselectable */);
- connectionState = ConnectionState.CONNECTED;
+ } else if (mShouldGroupSelectedMediaItems && hasMultipleSelectedDevices()
+ && isSelected) {
+ if (mediaItem.isFirstDeviceInGroup()) {
+ isDeviceGroup = true;
} else {
- mCurrentActivePosition = position;
- connectionState = ConnectionState.CONNECTED;
+ hideGroupItem = true;
}
- } else if (isSelectable) {
- //groupable device
- groupStatus = new GroupStatus(false /* selected */, true /* deselectable */);
- if (!Flags.disableTransferWhenAppsDoNotSupport()
- || isTransferable
- || hasRouteListingPreferenceItem) {
+ } else { // A connected or disconnected device.
+ subtitle = device.hasSubtext() ? device.getSubtextString() : null;
+ ongoingSessionStatus = getOngoingSessionStatus(device);
+ groupStatus = getGroupStatus(isSelected, isSelectable, isDeselectable);
+
+ if (device.getState() == MediaDeviceState.STATE_CONNECTING_FAILED) {
+ deviceStatusIcon = mContext.getDrawable(
+ R.drawable.media_output_status_failed);
+ subtitle = mContext.getString(R.string.media_output_dialog_connect_failed);
clickListener = v -> onItemClick(v, device);
+ } else if (currentlyConnected || isSelected) {
+ connectionState = ConnectionState.CONNECTED;
+ } else { // disconnected
+ if (isSelectable) { // groupable device
+ if (!Flags.disableTransferWhenAppsDoNotSupport() || isTransferable
+ || hasRouteListingPreferenceItem) {
+ clickListener = v -> onItemClick(v, device);
+ }
+ } else {
+ deviceStatusIcon = getDeviceStatusIcon(device,
+ device.hasOngoingSession());
+ clickListener = getClickListenerBasedOnSelectionBehavior(device);
+ }
+ deviceDisabled = clickListener == null;
}
- deviceDisabled = clickListener == null;
- } else {
- deviceStatusIcon = getDeviceStatusIcon(device, device.hasOngoingSession());
- clickListener = getClickListenerBasedOnSelectionBehavior(device);
- deviceDisabled = clickListener == null;
}
}
+ if (connectionState == ConnectionState.CONNECTED || isDeviceGroup) {
+ mCurrentActivePosition = position;
+ }
+
if (isDeviceGroup) {
- String sessionName = mController.getSessionName() == null ? ""
- : mController.getSessionName().toString();
- updateTitle(sessionName);
- updateUnmutedVolumeIcon(null /* device */);
- updateGroupSeekBar(getGroupItemContentDescription(sessionName));
- updateEndAreaForDeviceGroup();
- updateItemBackground(ConnectionState.CONNECTED);
+ renderDeviceGroupItem();
} else {
- updateTitle(device.getName());
- updateTitleIcon(device, connectionState, restrictVolumeAdjustment);
- updateSeekBar(device, connectionState, restrictVolumeAdjustment,
- getDeviceItemContentDescription(device));
- updateEndArea(device, connectionState, groupStatus, ongoingSessionStatus);
- updateLoadingIndicator(connectionState);
- updateFullItemClickListener(clickListener);
- updateContentAlpha(deviceDisabled);
- updateSubtitle(subtitle);
- updateDeviceStatusIcon(deviceStatusIcon);
- updateItemBackground(connectionState);
+ renderDeviceItem(hideGroupItem, device, connectionState, restrictVolumeAdjustment,
+ groupStatus, ongoingSessionStatus, clickListener, deviceDisabled, subtitle,
+ deviceStatusIcon);
}
}
+ private void renderDeviceItem(boolean hideGroupItem, MediaDevice device,
+ ConnectionState connectionState, boolean restrictVolumeAdjustment,
+ GroupStatus groupStatus, OngoingSessionStatus ongoingSessionStatus,
+ View.OnClickListener clickListener, boolean deviceDisabled, String subtitle,
+ Drawable deviceStatusIcon) {
+ if (hideGroupItem) {
+ mItemLayout.setVisibility(View.GONE);
+ return;
+ }
+ updateTitle(device.getName());
+ updateTitleIcon(device, connectionState, restrictVolumeAdjustment);
+ updateSeekBar(device, connectionState, restrictVolumeAdjustment,
+ getDeviceItemContentDescription(device));
+ updateEndArea(device, connectionState, groupStatus, ongoingSessionStatus);
+ updateLoadingIndicator(connectionState);
+ updateFullItemClickListener(clickListener);
+ updateContentAlpha(deviceDisabled);
+ updateSubtitle(subtitle);
+ updateDeviceStatusIcon(deviceStatusIcon);
+ updateItemBackground(connectionState);
+ }
+
+ private void renderDeviceGroupItem() {
+ String sessionName = mController.getSessionName() == null ? ""
+ : mController.getSessionName().toString();
+ updateTitle(sessionName);
+ updateUnmutedVolumeIcon(null /* device */);
+ updateGroupSeekBar(getGroupItemContentDescription(sessionName));
+ updateEndAreaForDeviceGroup();
+ updateItemBackground(ConnectionState.CONNECTED);
+ }
+
+ private OngoingSessionStatus getOngoingSessionStatus(MediaDevice device) {
+ return device.hasOngoingSession() ? new OngoingSessionStatus(
+ device.isHostForOngoingSession()) : null;
+ }
+
+ private GroupStatus getGroupStatus(boolean isSelected, boolean isSelectable,
+ boolean isDeselectable) {
+ // A device should either be selectable or, when the device selected, the list should
+ // have other selectable or selected devices.
+ boolean selectedWithOtherGroupDevices =
+ isSelected && (hasMultipleSelectedDevices() || hasSelectableDevices());
+ if (isSelectable || selectedWithOtherGroupDevices) {
+ return new GroupStatus(isSelected, isDeselectable);
+ }
+ return null;
+ }
+
+ private boolean hasMultipleSelectedDevices() {
+ return mController.getSelectedMediaDevice().size() > 1;
+ }
+
+ private boolean hasSelectableDevices() {
+ return !mController.getSelectableMediaDevice().isEmpty();
+ }
+
/** Renders the right side round pill button / checkbox. */
private void updateEndArea(@NonNull MediaDevice device, ConnectionState connectionState,
@Nullable GroupStatus groupStatus,
diff --git a/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt b/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt
index cf3b4969b07d..28540d4f1259 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt
@@ -883,7 +883,7 @@ private suspend fun synchronizeQsState(
var currentTransition: ExpansionTransition? = null
fun snapTo(scene: SceneKey) {
- state.snapToScene(scene)
+ state.snapTo(scene)
currentTransition = null
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/EditTile.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/EditTile.kt
index 7701b9087e23..ebfe101948c2 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/EditTile.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/infinitegrid/EditTile.kt
@@ -34,6 +34,7 @@ import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.clipScrollableContainer
import androidx.compose.foundation.gestures.Orientation
+import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.layout.Arrangement.spacedBy
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
@@ -56,14 +57,18 @@ import androidx.compose.foundation.lazy.grid.rememberLazyGridState
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.systemGestureExclusion
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
+import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.Clear
+import androidx.compose.material.icons.filled.Remove
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LocalContentColor
+import androidx.compose.material3.LocalMinimumInteractiveComponentSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
@@ -86,9 +91,12 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.isSpecified
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.graphicsLayer
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.MeasureScope
import androidx.compose.ui.layout.layout
import androidx.compose.ui.layout.onGloballyPositioned
@@ -105,10 +113,13 @@ import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.stateDescription
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
+import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
+import androidx.compose.ui.unit.toSize
import androidx.compose.ui.util.fastMap
+import androidx.compose.ui.zIndex
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.compose.animation.bounceable
import com.android.compose.modifiers.height
@@ -131,6 +142,7 @@ import com.android.systemui.qs.panels.ui.compose.infinitegrid.EditModeTileDefaul
import com.android.systemui.qs.panels.ui.compose.infinitegrid.EditModeTileDefaults.AUTO_SCROLL_SPEED
import com.android.systemui.qs.panels.ui.compose.infinitegrid.EditModeTileDefaults.AvailableTilesGridMinHeight
import com.android.systemui.qs.panels.ui.compose.infinitegrid.EditModeTileDefaults.CurrentTilesGridPadding
+import com.android.systemui.qs.panels.ui.compose.infinitegrid.EditModeTileDefaults.TileBadgeSize
import com.android.systemui.qs.panels.ui.compose.selection.MutableSelectionState
import com.android.systemui.qs.panels.ui.compose.selection.ResizableTileContainer
import com.android.systemui.qs.panels.ui.compose.selection.ResizingState
@@ -143,6 +155,7 @@ import com.android.systemui.qs.panels.ui.compose.selection.selectableTile
import com.android.systemui.qs.panels.ui.model.GridCell
import com.android.systemui.qs.panels.ui.model.SpacerGridCell
import com.android.systemui.qs.panels.ui.model.TileGridCell
+import com.android.systemui.qs.panels.ui.viewmodel.AvailableEditActions
import com.android.systemui.qs.panels.ui.viewmodel.BounceableTileViewModel
import com.android.systemui.qs.panels.ui.viewmodel.EditTileViewModel
import com.android.systemui.qs.pipeline.shared.TileSpec
@@ -152,6 +165,7 @@ import kotlin.math.abs
import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
object TileType
@@ -232,16 +246,14 @@ fun DefaultEditTileGrid(
// the top bar
.padding(top = innerPadding.calculateTopPadding())
.clipScrollableContainer(Orientation.Vertical)
- .verticalScroll(scrollState),
+ .verticalScroll(scrollState)
+ .dragAndDropRemoveZone(listState, onRemoveTile),
) {
AnimatedContent(
targetState = listState.dragInProgress || selectionState.selected,
label = "QSEditHeader",
) { showRemoveTarget ->
- EditGridHeader(
- Modifier.dragAndDropRemoveZone(listState, onRemoveTile)
- .padding(bottom = 26.dp)
- ) {
+ EditGridHeader(Modifier.padding(bottom = 26.dp)) {
if (showRemoveTarget) {
RemoveTileTarget {
selectionState.selection?.let {
@@ -261,6 +273,7 @@ fun DefaultEditTileGrid(
columns,
largeTilesSpan,
onResize,
+ onRemoveTile,
onSetTiles,
)
@@ -269,7 +282,6 @@ fun DefaultEditTileGrid(
Modifier.fillMaxWidth()
.requiredHeightIn(AvailableTilesGridMinHeight)
.animateContentSize()
- .dragAndDropRemoveZone(listState, onRemoveTile)
) {
// Using the fully qualified name here as a workaround for AnimatedVisibility
// not being available from a Box
@@ -385,6 +397,7 @@ private fun CurrentTilesGrid(
columns: Int,
largeTilesSpan: Int,
onResize: (TileSpec, toIcon: Boolean) -> Unit,
+ onRemoveTile: (TileSpec) -> Unit,
onSetTiles: (List<TileSpec>) -> Unit,
) {
val currentListState by rememberUpdatedState(listState)
@@ -424,8 +437,15 @@ private fun CurrentTilesGrid(
}
.testTag(CURRENT_TILES_GRID_TEST_TAG),
) {
- EditTiles(cells, columns, listState, selectionState, coroutineScope, largeTilesSpan) {
- resizingOperation ->
+ EditTiles(
+ cells,
+ columns,
+ listState,
+ selectionState,
+ coroutineScope,
+ largeTilesSpan,
+ onRemoveTile,
+ ) { resizingOperation ->
when (resizingOperation) {
is TemporaryResizeOperation -> {
currentListState.resizeTile(resizingOperation.spec, resizingOperation.toIcon)
@@ -530,6 +550,7 @@ fun LazyGridScope.EditTiles(
selectionState: MutableSelectionState,
coroutineScope: CoroutineScope,
largeTilesSpan: Int,
+ onRemoveTile: (TileSpec) -> Unit,
onResize: (operation: ResizeOperation) -> Unit,
) {
items(
@@ -558,6 +579,7 @@ fun LazyGridScope.EditTiles(
dragAndDropState = dragAndDropState,
selectionState = selectionState,
onResize = onResize,
+ onRemoveTile = onRemoveTile,
coroutineScope = coroutineScope,
bounceableInfo = cells.bounceableInfo(index, columns),
largeTilesSpan = largeTilesSpan,
@@ -576,6 +598,7 @@ private fun TileGridCell(
dragAndDropState: DragAndDropState,
selectionState: MutableSelectionState,
onResize: (operation: ResizeOperation) -> Unit,
+ onRemoveTile: (TileSpec) -> Unit,
coroutineScope: CoroutineScope,
largeTilesSpan: Int,
bounceableInfo: BounceableInfo,
@@ -583,6 +606,8 @@ private fun TileGridCell(
) {
val stateDescription = stringResource(id = R.string.accessibility_qs_edit_position, index + 1)
var selected by remember { mutableStateOf(false) }
+ val showRemovalBadge =
+ !selected && cell.tile.availableEditActions.contains(AvailableEditActions.REMOVE)
val selectionAlpha by
animateFloatAsState(
targetValue = if (selected) 1f else 0f,
@@ -682,6 +707,15 @@ private fun TileGridCell(
) {
EditTile(tile = cell.tile, state = state, progress = progress)
}
+
+ if (showRemovalBadge) {
+ TileBadge(
+ icon = Icons.Default.Remove,
+ contentDescription = stringResource(R.string.qs_customize_remove),
+ ) {
+ onRemoveTile(cell.tile.tileSpec)
+ }
+ }
}
}
@@ -708,27 +742,35 @@ private fun AvailableTileGridCell(
verticalArrangement = spacedBy(CommonTileDefaults.TilePadding, Alignment.Top),
modifier = modifier,
) {
- Box(
- Modifier.fillMaxWidth()
- .height(TileHeight)
- .clickable(onClick = onClick, onClickLabel = onClickActionName)
- .semantics(mergeDescendants = true) { this.stateDescription = stateDescription }
- .dragAndDropTileSource(
- SizedTileImpl(cell.tile, cell.width),
- dragAndDropState,
- DragType.Add,
- ) {
- selectionState.unSelect()
- }
- .tileBackground(colors.background)
- .tilePadding()
- ) {
- // Icon
- SmallTileContent(
- iconProvider = { cell.tile.icon },
- color = colors.icon,
- animateToEnd = true,
- modifier = Modifier.align(Alignment.Center),
+ Box {
+ Box(
+ Modifier.fillMaxWidth()
+ .height(TileHeight)
+ .clickable(onClick = onClick, onClickLabel = onClickActionName)
+ .semantics(mergeDescendants = true) { this.stateDescription = stateDescription }
+ .dragAndDropTileSource(
+ SizedTileImpl(cell.tile, cell.width),
+ dragAndDropState,
+ DragType.Add,
+ ) {
+ selectionState.unSelect()
+ }
+ .tileBackground(colors.background)
+ .tilePadding()
+ ) {
+ // Icon
+ SmallTileContent(
+ iconProvider = { cell.tile.icon },
+ color = colors.icon,
+ animateToEnd = true,
+ modifier = Modifier.align(Alignment.Center),
+ )
+ }
+
+ TileBadge(
+ icon = Icons.Default.Add,
+ contentDescription = onClickActionName,
+ onClick = onClick,
)
}
Box(Modifier.fillMaxSize()) {
@@ -745,6 +787,39 @@ private fun AvailableTileGridCell(
}
@Composable
+private fun TileBadge(icon: ImageVector, contentDescription: String?, onClick: () -> Unit) {
+ // Use a higher zIndex than the tile to draw over it, and manually create the touch target as
+ // we're drawing over neighbor tiles as well.
+ val minTouchTargetSize = LocalMinimumInteractiveComponentSize.current
+
+ Box(
+ Modifier.zIndex(2f)
+ .layout { measurable, constraints ->
+ val size = minTouchTargetSize.roundToPx()
+ val placeable = measurable.measure(Constraints(size))
+ layout(placeable.width, placeable.height) {
+ val iconRadius = TileBadgeSize.roundToPx() / 2
+ val x = constraints.maxWidth - placeable.width / 2 - iconRadius
+ val y = 0 - placeable.height / 2 + iconRadius
+ placeable.place(x, y)
+ }
+ }
+ .systemGestureExclusion { Rect(Offset.Zero, it.size.toSize()) }
+ .pointerInput(Unit) { detectTapGestures { onClick() } }
+ ) {
+ val secondaryColor = MaterialTheme.colorScheme.secondary
+ Icon(
+ icon,
+ contentDescription = contentDescription,
+ modifier =
+ Modifier.size(TileBadgeSize).align(Alignment.Center).drawBehind {
+ drawCircle(secondaryColor)
+ },
+ )
+ }
+}
+
+@Composable
private fun SpacerGridCell(modifier: Modifier = Modifier) {
// By default, spacers are invisible and exist purely to catch drag movements
Box(modifier.height(TileHeight).fillMaxWidth())
@@ -829,6 +904,7 @@ private object EditModeTileDefaults {
const val AUTO_SCROLL_SPEED = 2 // 2ms per pixel
val CurrentTilesGridPadding = 8.dp
val AvailableTilesGridMinHeight = 200.dp
+ val TileBadgeSize = 20.dp
@Composable
fun editTileColors(): TileColors =
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/selection/Selection.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/selection/Selection.kt
index c1545e1263db..7c472638da63 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/selection/Selection.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/selection/Selection.kt
@@ -81,7 +81,7 @@ fun ResizableTileContainer(
state = state,
modifier =
// Higher zIndex to make sure the handle is drawn above the content
- Modifier.zIndex(2f),
+ Modifier.zIndex(if (selected) 2f else 1f),
)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
index 973265c6c9b1..fd5861fed20c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
@@ -43,8 +43,8 @@ import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.satellite.SatelliteDialogUtils;
import com.android.systemui.animation.Expandable;
+import com.android.systemui.bluetooth.qsdialog.BluetoothDetailsContentViewModel;
import com.android.systemui.bluetooth.qsdialog.BluetoothDetailsViewModel;
-import com.android.systemui.bluetooth.qsdialog.BluetoothTileDialogViewModel;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags;
@@ -84,7 +84,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
private final Executor mExecutor;
- private final BluetoothTileDialogViewModel mDialogViewModel;
+ private final BluetoothDetailsContentViewModel mDetailsContentViewModel;
private final FeatureFlags mFeatureFlags;
@Nullable
@@ -104,7 +104,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
QSLogger qsLogger,
BluetoothController bluetoothController,
FeatureFlags featureFlags,
- BluetoothTileDialogViewModel dialogViewModel
+ BluetoothDetailsContentViewModel detailsContentViewModel
) {
super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
statusBarStateController, activityStarter, qsLogger);
@@ -112,7 +112,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
mController.observe(getLifecycle(), mCallback);
mExecutor = new HandlerExecutor(mainHandler);
mFeatureFlags = featureFlags;
- mDialogViewModel = dialogViewModel;
+ mDetailsContentViewModel = detailsContentViewModel;
}
@Override
@@ -133,7 +133,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
callback.accept(new BluetoothDetailsViewModel(() -> {
longClick(null);
return null;
- }, mDialogViewModel))
+ }, mDetailsContentViewModel))
);
return true;
}
@@ -158,7 +158,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
private void handleClickEvent(@Nullable Expandable expandable) {
if (mFeatureFlags.isEnabled(Flags.BLUETOOTH_QS_TILE_DIALOG)) {
- mDialogViewModel.showDetailsContent(expandable, /* view= */ null);
+ mDetailsContentViewModel.showDetailsContent(expandable, /* view= */ null);
} else {
// Secondary clicks are header clicks, just toggle.
toggleBluetooth();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTileNewImpl.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTileNewImpl.kt
index 4d0e80854853..f80b8fb8cb1f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTileNewImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTileNewImpl.kt
@@ -36,7 +36,6 @@ import com.android.systemui.qs.logging.QSLogger
import com.android.systemui.qs.tileimpl.QSTileImpl
import com.android.systemui.qs.tiles.dialog.InternetDetailsViewModel
import com.android.systemui.qs.tiles.dialog.InternetDialogManager
-import com.android.systemui.qs.tiles.dialog.WifiStateWorker
import com.android.systemui.res.R
import com.android.systemui.statusbar.connectivity.AccessPointController
import com.android.systemui.statusbar.pipeline.shared.ui.binder.InternetTileBinder
@@ -58,7 +57,6 @@ constructor(
qsLogger: QSLogger,
viewModel: InternetTileViewModel,
private val internetDialogManager: InternetDialogManager,
- private val wifiStateWorker: WifiStateWorker,
private val accessPointController: AccessPointController,
private val internetDetailsViewModelFactory: InternetDetailsViewModel.Factory,
) :
@@ -86,10 +84,7 @@ constructor(
mContext.getString(R.string.quick_settings_internet_label)
override fun newTileState(): QSTile.BooleanState {
- return QSTile.BooleanState().also {
- it.forceExpandIcon = true
- it.handlesSecondaryClick = true
- }
+ return QSTile.BooleanState().also { it.forceExpandIcon = true }
}
override fun handleClick(expandable: Expandable?) {
@@ -107,12 +102,6 @@ constructor(
return internetDetailsViewModelFactory.create { longClick(null) }
}
- override fun handleSecondaryClick(expandable: Expandable?) {
- // TODO(b/358352265): Figure out the correct action for the secondary click
- // Toggle wifi
- wifiStateWorker.isWifiEnabled = !wifiStateWorker.isWifiEnabled
- }
-
override fun handleUpdateState(state: QSTile.BooleanState, arg: Any?) {
state.label = mContext.resources.getString(R.string.quick_settings_internet_label)
state.expandedAccessibilityClassName = Button::class.java.name
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
index 42b35c736d42..7b88d6930279 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ScreenRecordTile.java
@@ -26,6 +26,7 @@ import android.text.TextUtils;
import android.util.Log;
import android.widget.Button;
import android.widget.Switch;
+import android.widget.Toast;
import androidx.annotation.Nullable;
@@ -192,8 +193,19 @@ public class ScreenRecordTile extends QSTileImpl<QSTile.BooleanState>
@Override
public boolean getDetailsViewModel(Consumer<TileDetailsViewModel> callback) {
handleClick(() -> executeWhenUnlockedKeyguard(
- () -> callback.accept(new ScreenRecordDetailsViewModel(mController,
- this::onStartRecordingClicked)))
+ () -> {
+ if (mController.isScreenCaptureDisabled()) {
+ // Close the panel first so that the toast can show up.
+ mDialogTransitionAnimator.disableAllCurrentDialogsExitAnimations();
+ mPanelInteractor.collapsePanels();
+
+ showDisabledByPolicyToast();
+ return;
+ }
+
+ callback.accept(new ScreenRecordDetailsViewModel(mController,
+ this::onStartRecordingClicked));
+ })
);
return true;
}
@@ -244,6 +256,12 @@ public class ScreenRecordTile extends QSTileImpl<QSTile.BooleanState>
return mContext.getString(R.string.quick_settings_screen_record_label);
}
+ void showDisabledByPolicyToast() {
+ Toast.makeText(mContext,
+ R.string.screen_capturing_disabled_by_policy_dialog_description, Toast.LENGTH_SHORT)
+ .show();
+ }
+
private void cancelCountdown() {
Log.d(TAG, "Cancelling countdown");
mController.cancelCountdown();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/ScreenRecordDetailsContent.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/ScreenRecordDetailsContent.kt
index bf1a51d8cd59..3eb73d83bc1a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/ScreenRecordDetailsContent.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/ScreenRecordDetailsContent.kt
@@ -28,13 +28,6 @@ import com.android.systemui.screenrecord.ScreenRecordPermissionViewBinder
@Composable
fun ScreenRecordDetailsContent(viewModel: ScreenRecordDetailsViewModel) {
- // TODO(b/378514312): Finish implementing this function.
-
- if (viewModel.recordingController.isScreenCaptureDisabled) {
- // TODO(b/388345506): Show disabled page here.
- return
- }
-
val viewBinder: ScreenRecordPermissionViewBinder = remember {
viewModel.recordingController.createScreenRecordPermissionViewBinder(
viewModel.onStartRecordingClicked
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/InternetTileMapper.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/InternetTileMapper.kt
index 7ad01e463399..8d5880554277 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/InternetTileMapper.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/InternetTileMapper.kt
@@ -92,10 +92,6 @@ constructor(
else QSTileState.ActivationState.INACTIVE
supportedActions =
- setOf(
- QSTileState.UserAction.CLICK,
- QSTileState.UserAction.TOGGLE_CLICK,
- QSTileState.UserAction.LONG_CLICK,
- )
+ setOf(QSTileState.UserAction.CLICK, QSTileState.UserAction.LONG_CLICK)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractor.kt
index 6e2c437b9c16..8e48fe492e13 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/impl/internet/domain/interactor/InternetTileUserActionInteractor.kt
@@ -26,7 +26,6 @@ import com.android.systemui.qs.tiles.base.interactor.QSTileInput
import com.android.systemui.qs.tiles.base.interactor.QSTileUserActionInteractor
import com.android.systemui.qs.tiles.dialog.InternetDetailsViewModel
import com.android.systemui.qs.tiles.dialog.InternetDialogManager
-import com.android.systemui.qs.tiles.dialog.WifiStateWorker
import com.android.systemui.qs.tiles.impl.internet.domain.model.InternetTileModel
import com.android.systemui.qs.tiles.viewmodel.QSTileUserAction
import com.android.systemui.statusbar.connectivity.AccessPointController
@@ -40,7 +39,6 @@ class InternetTileUserActionInteractor
constructor(
@Main private val mainContext: CoroutineContext,
private val internetDialogManager: InternetDialogManager,
- private val wifiStateWorker: WifiStateWorker,
private val accessPointController: AccessPointController,
private val qsTileIntentUserActionHandler: QSTileIntentUserInputHandler,
private val internetDetailsViewModelFactory: InternetDetailsViewModel.Factory,
@@ -59,24 +57,17 @@ constructor(
)
}
}
- is QSTileUserAction.ToggleClick -> {
- // TODO(b/358352265): Figure out the correct action for the secondary click
- // Toggle Wifi
- wifiStateWorker.isWifiEnabled = !wifiStateWorker.isWifiEnabled
- }
is QSTileUserAction.LongClick -> {
handleLongClick(action.expandable)
}
+ else -> {}
}
}
override val detailsViewModel: TileDetailsViewModel =
internetDetailsViewModelFactory.create { handleLongClick(null) }
- private fun handleLongClick(expandable:Expandable?){
- qsTileIntentUserActionHandler.handle(
- expandable,
- Intent(Settings.ACTION_WIFI_SETTINGS)
- )
+ private fun handleLongClick(expandable: Expandable?) {
+ qsTileIntentUserActionHandler.handle(expandable, Intent(Settings.ACTION_WIFI_SETTINGS))
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt
index 475c0794861f..e9e7deca0abf 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt
@@ -16,6 +16,7 @@
package com.android.systemui.scene.domain.interactor
+import com.android.app.tracing.coroutines.flow.stateInTraced
import com.android.compose.animation.scene.ContentKey
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.OverlayKey
@@ -52,7 +53,6 @@ import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
-import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
@@ -124,7 +124,8 @@ constructor(
val transitionState: StateFlow<ObservableTransitionState> =
repository.transitionState
.onEach { logger.logSceneTransition(it) }
- .stateIn(
+ .stateInTraced(
+ name = "transitionState",
scope = applicationScope,
started = SharingStarted.Eagerly,
initialValue = repository.transitionState.value,
@@ -145,7 +146,8 @@ constructor(
is ObservableTransitionState.Transition -> state.toContent
}
}
- .stateIn(
+ .stateInTraced(
+ name = "transitioningTo",
scope = applicationScope,
started = SharingStarted.WhileSubscribed(),
initialValue = null,
@@ -164,7 +166,8 @@ constructor(
is ObservableTransitionState.Idle -> flowOf(false)
}
}
- .stateIn(
+ .stateInTraced(
+ name = "isTransitionUserInputOngoing",
scope = applicationScope,
started = SharingStarted.WhileSubscribed(),
initialValue = false,
@@ -183,7 +186,8 @@ constructor(
activeTransitionAnimationCount = activeTransitionAnimationCount,
)
}
- .stateIn(
+ .stateInTraced(
+ name = "isVisible",
scope = applicationScope,
started = SharingStarted.WhileSubscribed(),
initialValue = isVisibleInternal(),
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/scroll/ImageTileSet.java b/packages/SystemUI/src/com/android/systemui/screenshot/scroll/ImageTileSet.java
index 76a72f7e4adf..25c38050e95a 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/scroll/ImageTileSet.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/scroll/ImageTileSet.java
@@ -29,6 +29,7 @@ import androidx.annotation.UiThread;
import com.android.internal.util.CallbackRegistry;
import com.android.internal.util.CallbackRegistry.NotifierCallback;
+import com.android.systemui.dagger.qualifiers.Main;
import java.util.ArrayList;
import java.util.Iterator;
@@ -49,7 +50,7 @@ class ImageTileSet {
private CallbackRegistry<OnContentChangedListener, ImageTileSet, Rect> mContentListeners;
@Inject
- ImageTileSet(@UiThread Handler handler) {
+ ImageTileSet(@Main Handler handler) {
mHandler = handler;
}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/BaseShadeControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/shade/BaseShadeControllerImpl.kt
index b271c6979b31..71977ef1f234 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/BaseShadeControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/BaseShadeControllerImpl.kt
@@ -16,19 +16,19 @@
package com.android.systemui.shade
+import com.android.keyguard.KeyguardViewController
import com.android.systemui.assist.AssistManager
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.NotificationPresenter
import com.android.systemui.statusbar.NotificationShadeWindowController
-import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
import dagger.Lazy
/** A base class for non-empty implementations of ShadeController. */
abstract class BaseShadeControllerImpl(
protected val commandQueue: CommandQueue,
- protected val statusBarKeyguardViewManager: StatusBarKeyguardViewManager,
+ protected val keyguardViewController: KeyguardViewController,
protected val notificationShadeWindowController: NotificationShadeWindowController,
- protected val assistManagerLazy: Lazy<AssistManager>
+ protected val assistManagerLazy: Lazy<AssistManager>,
) : ShadeController {
protected lateinit var notifPresenter: NotificationPresenter
/** Runnables to run after completing a collapse of the shade. */
@@ -66,7 +66,7 @@ abstract class BaseShadeControllerImpl(
for (r in clonedList) {
r.run()
}
- statusBarKeyguardViewManager.readyForKeyguardDone()
+ keyguardViewController.readyForKeyguardDone()
}
final override fun onLaunchAnimationEnd(launchIsFullScreen: Boolean) {
@@ -77,6 +77,7 @@ abstract class BaseShadeControllerImpl(
instantCollapseShade()
}
}
+
final override fun onLaunchAnimationCancelled(isLaunchForActivity: Boolean) {
if (
notifPresenter.isPresenterFullyCollapsed() &&
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/ShadeControllerImpl.java
index 0e30f2b4bb30..acae1bc81b97 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeControllerImpl.java
@@ -23,6 +23,7 @@ import android.view.MotionEvent;
import android.view.ViewTreeObserver;
import android.view.WindowManagerGlobal;
+import com.android.keyguard.KeyguardViewController;
import com.android.systemui.DejankUtils;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.dagger.SysUISingleton;
@@ -35,7 +36,6 @@ import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
-import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.window.StatusBarWindowControllerStore;
@@ -61,7 +61,6 @@ public final class ShadeControllerImpl extends BaseShadeControllerImpl {
private final KeyguardStateController mKeyguardStateController;
private final NotificationShadeWindowController mNotificationShadeWindowController;
private final StatusBarStateController mStatusBarStateController;
- private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
private final StatusBarWindowControllerStore mStatusBarWindowControllerStore;
private final DeviceProvisionedController mDeviceProvisionedController;
@@ -82,7 +81,7 @@ public final class ShadeControllerImpl extends BaseShadeControllerImpl {
WindowRootViewVisibilityInteractor windowRootViewVisibilityInteractor,
KeyguardStateController keyguardStateController,
StatusBarStateController statusBarStateController,
- StatusBarKeyguardViewManager statusBarKeyguardViewManager,
+ KeyguardViewController keyguardViewController,
StatusBarWindowControllerStore statusBarWindowControllerStore,
DeviceProvisionedController deviceProvisionedController,
NotificationShadeWindowController notificationShadeWindowController,
@@ -93,7 +92,7 @@ public final class ShadeControllerImpl extends BaseShadeControllerImpl {
Lazy<NotificationGutsManager> gutsManager
) {
super(commandQueue,
- statusBarKeyguardViewManager,
+ keyguardViewController,
notificationShadeWindowController,
assistManagerLazy);
SceneContainerFlag.assertInLegacyMode();
@@ -107,7 +106,6 @@ public final class ShadeControllerImpl extends BaseShadeControllerImpl {
mGutsManager = gutsManager;
mNotificationShadeWindowController = notificationShadeWindowController;
mNotifShadeWindowViewController = notificationShadeWindowViewController;
- mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
mDisplayId = displayId;
mKeyguardStateController = keyguardStateController;
mAssistManagerLazy = assistManagerLazy;
@@ -396,7 +394,7 @@ public final class ShadeControllerImpl extends BaseShadeControllerImpl {
@Override
public void collapseShadeForActivityStart() {
- if (isExpandedVisible() && !mStatusBarKeyguardViewManager.isBouncerShowing()) {
+ if (isExpandedVisible() && !getKeyguardViewController().isBouncerShowing()) {
animateCollapseShadeForcedDelayed();
} else {
// Do it after DismissAction has been processed to conserve the
diff --git a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeModeInteractor.kt b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeModeInteractor.kt
index 1ab0b93da175..8f4e8701cad8 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeModeInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/domain/interactor/ShadeModeInteractor.kt
@@ -22,7 +22,6 @@ import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.logDiffsForTable
import com.android.systemui.scene.domain.SceneFrameworkTableLog
-import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.shade.data.repository.ShadeRepository
import com.android.systemui.shade.shared.model.ShadeMode
import com.android.systemui.shared.settings.data.repository.SecureSettingsRepository
@@ -33,7 +32,6 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
-import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.stateIn
/**
@@ -91,14 +89,10 @@ constructor(
) : ShadeModeInteractor {
private val isDualShadeEnabled: Flow<Boolean> =
- if (SceneContainerFlag.isEnabled) {
- secureSettingsRepository.boolSetting(
- Settings.Secure.DUAL_SHADE,
- defaultValue = DUAL_SHADE_ENABLED_DEFAULT,
- )
- } else {
- flowOf(false)
- }
+ secureSettingsRepository.boolSetting(
+ Settings.Secure.DUAL_SHADE,
+ defaultValue = DUAL_SHADE_ENABLED_DEFAULT,
+ )
override val isShadeLayoutWide: StateFlow<Boolean> = repository.isShadeLayoutWide
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ui/ShadeColors.kt b/packages/SystemUI/src/com/android/systemui/shade/ui/ShadeColors.kt
index 8db622566e5e..62428471f08b 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ui/ShadeColors.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ui/ShadeColors.kt
@@ -23,18 +23,48 @@ import com.android.systemui.res.R
object ShadeColors {
@JvmStatic
- fun Resources.shadePanel(): Int {
- val layerAbove =
- ColorUtils.setAlphaComponent(getColor(R.color.shade_panel_base), (0.4f * 255).toInt())
+ fun Resources.shadePanel(blurSupported: Boolean): Int {
+ return if (blurSupported) {
+ shadePanelStandard()
+ } else {
+ shadePanelFallback()
+ }
+ }
+
+ @JvmStatic
+ fun Resources.notificationScrim(blurSupported: Boolean): Int {
+ return if (blurSupported) {
+ notificationScrimStandard()
+ } else {
+ notificationScrimFallback()
+ }
+ }
+
+ @JvmStatic
+ private fun Resources.shadePanelStandard(): Int {
+ val layerAbove = ColorUtils.setAlphaComponent(
+ getColor(R.color.shade_panel_base, null),
+ (0.4f * 255).toInt()
+ )
val layerBelow = ColorUtils.setAlphaComponent(Color.WHITE, (0.1f * 255).toInt())
return ColorUtils.compositeColors(layerAbove, layerBelow)
}
@JvmStatic
- fun Resources.notificationScrim(): Int {
+ private fun Resources.shadePanelFallback(): Int {
+ return getColor(R.color.shade_panel_fallback, null)
+ }
+
+ @JvmStatic
+ private fun Resources.notificationScrimStandard(): Int {
return ColorUtils.setAlphaComponent(
- getColor(R.color.notification_scrim_base),
+ getColor(R.color.notification_scrim_base, null),
(0.5f * 255).toInt(),
)
}
+
+ @JvmStatic
+ private fun Resources.notificationScrimFallback(): Int {
+ return getColor(R.color.notification_scrim_fallback, null)
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BatteryStatusChip.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BatteryStatusChip.kt
index a58ce4162ddc..02cec13d2ce8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BatteryStatusChip.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BatteryStatusChip.kt
@@ -26,6 +26,7 @@ import com.android.settingslib.flags.Flags.newStatusBarIcons
import com.android.systemui.battery.BatteryMeterView
import com.android.systemui.battery.unified.BatteryColors
import com.android.systemui.res.R
+import com.android.systemui.statusbar.core.NewStatusBarIcons
import com.android.systemui.statusbar.events.BackgroundAnimatableView
class BatteryStatusChip @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
@@ -37,6 +38,8 @@ class BatteryStatusChip @JvmOverloads constructor(context: Context, attrs: Attri
get() = batteryMeterView
init {
+ NewStatusBarIcons.assertInLegacyMode()
+
inflate(context, R.layout.battery_status_chip, this)
roundedContainer = requireViewById(R.id.rounded_container)
batteryMeterView = requireViewById(R.id.battery_meter_view)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
index 3e761079bc49..6aa2fe29e768 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
@@ -38,7 +38,6 @@ import com.android.systemui.Flags
import com.android.systemui.Flags.spatialModelAppPushback
import com.android.systemui.animation.ShadeInterpolation
import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dump.DumpManager
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.plugins.statusbar.StatusBarStateController
@@ -61,8 +60,6 @@ import java.util.Optional
import javax.inject.Inject
import kotlin.math.max
import kotlin.math.sign
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
/**
* Responsible for blurring the notification shade window, and applying a zoom effect to the
@@ -84,7 +81,6 @@ constructor(
@ShadeDisplayAware private val context: Context,
private val splitShadeStateController: SplitShadeStateController,
private val windowRootViewBlurInteractor: WindowRootViewBlurInteractor,
- @Application private val applicationScope: CoroutineScope,
private val appZoomOutOptional: Optional<AppZoomOut>,
dumpManager: DumpManager,
configurationController: ConfigurationController,
@@ -394,18 +390,15 @@ constructor(
private fun initBlurListeners() {
if (!Flags.bouncerUiRevamp()) return
- applicationScope.launch {
- Log.d(TAG, "Starting coroutines for window root view blur")
- windowRootViewBlurInteractor.onBlurAppliedEvent.collect { appliedBlurRadius ->
- if (updateScheduled) {
- // Process the blur applied event only if we scheduled the update
- TrackTracer.instantForGroup("shade", "shade_blur_radius", appliedBlurRadius)
- updateScheduled = false
- onBlurApplied(appliedBlurRadius, zoomOutCalculatedFromShadeRadius)
- } else {
- // Try scheduling an update now, maybe our blur request will be scheduled now.
- scheduleUpdate()
- }
+ windowRootViewBlurInteractor.registerBlurAppliedListener { appliedBlurRadius ->
+ if (updateScheduled) {
+ // Process the blur applied event only if we scheduled the update
+ TrackTracer.instantForGroup("shade", "shade_blur_radius", appliedBlurRadius)
+ updateScheduled = false
+ onBlurApplied(appliedBlurRadius, zoomOutCalculatedFromShadeRadius)
+ } else {
+ // Try scheduling an update now, maybe our blur request will be scheduled now.
+ scheduleUpdate()
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/interactor/SingleNotificationChipInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/interactor/SingleNotificationChipInteractor.kt
index a9338885d4c2..b1af811178e4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/interactor/SingleNotificationChipInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/interactor/SingleNotificationChipInteractor.kt
@@ -105,17 +105,12 @@ constructor(
*/
val notificationChip: Flow<NotificationChipModel?> =
combine(_notificationModel, isAppVisible) { notif, isAppVisible ->
- if (isAppVisible) {
- // If the app that posted this notification is visible, we want to hide the chip
- // because information between the status bar chip and the app itself could be
- // out-of-sync (like a timer that's slightly off)
- null
- } else {
- notif.toNotificationChipModel()
- }
+ notif.toNotificationChipModel(isAppVisible)
}
- private fun ActiveNotificationModel.toNotificationChipModel(): NotificationChipModel? {
+ private fun ActiveNotificationModel.toNotificationChipModel(
+ isVisible: Boolean
+ ): NotificationChipModel? {
val promotedContent = this.promotedContent
if (promotedContent == null) {
logger.w({
@@ -138,7 +133,13 @@ constructor(
}
}
- return NotificationChipModel(key, appName, statusBarChipIconView, promotedContent)
+ return NotificationChipModel(
+ key,
+ appName,
+ statusBarChipIconView,
+ promotedContent,
+ isVisible,
+ )
}
@AssistedFactory
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/interactor/StatusBarNotificationChipsInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/interactor/StatusBarNotificationChipsInteractor.kt
index 9463db57585b..c26d10311f1e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/interactor/StatusBarNotificationChipsInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/interactor/StatusBarNotificationChipsInteractor.kt
@@ -142,10 +142,10 @@ constructor(
}
/**
- * A flow modeling the notifications that should be shown as chips in the status bar. Emits an
- * empty list if there are no notifications that should show a status bar chip.
+ * Emits all notifications that are eligible to show as chips in the status bar. This is
+ * different from which chips will *actually* show, see [shownNotificationChips] for that.
*/
- val notificationChips: Flow<List<NotificationChipModel>> =
+ private val allNotificationChips: Flow<List<NotificationChipModel>> =
if (StatusBarNotifChips.isEnabled) {
// For all our current interactors...
promotedNotificationInteractors.flatMapLatest { intrs ->
@@ -172,4 +172,13 @@ constructor(
} else {
flowOf(emptyList())
}
+
+ /** Emits the notifications that should actually be *shown* as chips in the status bar. */
+ val shownNotificationChips: Flow<List<NotificationChipModel>> =
+ allNotificationChips.map { chipsList ->
+ // If the app that posted this notification is visible, we want to hide the chip
+ // because information between the status bar chip and the app itself could be
+ // out-of-sync (like a timer that's slightly off)
+ chipsList.filter { !it.isAppVisible }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/model/NotificationChipModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/model/NotificationChipModel.kt
index e7a90804a768..97c37628f2e1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/model/NotificationChipModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/domain/model/NotificationChipModel.kt
@@ -22,8 +22,10 @@ import com.android.systemui.statusbar.notification.promoted.shared.model.Promote
/** Modeling all the data needed to render a status bar notification chip. */
data class NotificationChipModel(
val key: String,
- /** The user-readable name of the app that posted the call notification. */
+ /** The user-readable name of the app that posted this notification. */
val appName: String,
val statusBarChipIconView: StatusBarIconView?,
val promotedContent: PromotedNotificationContentModel,
+ /** True if the app managing this notification is currently visible to the user. */
+ val isAppVisible: Boolean,
)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/ui/viewmodel/NotifChipsViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/ui/viewmodel/NotifChipsViewModel.kt
index 2d6102e310f2..3ecbdf82f2cb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/ui/viewmodel/NotifChipsViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/chips/notification/ui/viewmodel/NotifChipsViewModel.kt
@@ -58,7 +58,7 @@ constructor(
*/
val chips: Flow<List<OngoingActivityChipModel.Active>> =
combine(
- notifChipsInteractor.notificationChips,
+ notifChipsInteractor.shownNotificationChips,
headsUpNotificationInteractor.statusBarHeadsUpState,
) { notifications, headsUpState ->
notifications.map { it.toActivityChipModel(headsUpState) }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/ChipContent.kt b/packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/ChipContent.kt
index 8443d106dfb1..2501aa59c375 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/ChipContent.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/ChipContent.kt
@@ -19,8 +19,6 @@ package com.android.systemui.statusbar.chips.ui.compose
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.Measurable
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/OngoingActivityChip.kt b/packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/OngoingActivityChip.kt
index 1cdf6800fb97..4a999d5f5e0e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/OngoingActivityChip.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/OngoingActivityChip.kt
@@ -49,11 +49,18 @@ import com.android.systemui.animation.Expandable
import com.android.systemui.common.ui.compose.Icon
import com.android.systemui.common.ui.compose.load
import com.android.systemui.res.R
+import com.android.systemui.statusbar.StatusBarIconView
import com.android.systemui.statusbar.chips.ui.model.ColorsModel
import com.android.systemui.statusbar.chips.ui.model.OngoingActivityChipModel
+import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
+import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerViewBinder
@Composable
-fun OngoingActivityChip(model: OngoingActivityChipModel.Active, modifier: Modifier = Modifier) {
+fun OngoingActivityChip(
+ model: OngoingActivityChipModel.Active,
+ iconViewStore: NotificationIconContainerViewBinder.IconViewStore?,
+ modifier: Modifier = Modifier,
+) {
when (val clickBehavior = model.clickBehavior) {
is OngoingActivityChipModel.ClickBehavior.ExpandAction -> {
// Wrap the chip in an Expandable so we can animate the expand transition.
@@ -65,15 +72,15 @@ fun OngoingActivityChip(model: OngoingActivityChipModel.Active, modifier: Modifi
),
modifier = modifier,
) { expandable ->
- ChipBody(model, onClick = { clickBehavior.onClick(expandable) })
+ ChipBody(model, iconViewStore, onClick = { clickBehavior.onClick(expandable) })
}
}
is OngoingActivityChipModel.ClickBehavior.ShowHeadsUpNotification -> {
- ChipBody(model, onClick = { clickBehavior.onClick() })
+ ChipBody(model, iconViewStore, onClick = { clickBehavior.onClick() })
}
is OngoingActivityChipModel.ClickBehavior.None -> {
- ChipBody(model, modifier = modifier)
+ ChipBody(model, iconViewStore, modifier = modifier)
}
}
}
@@ -81,12 +88,15 @@ fun OngoingActivityChip(model: OngoingActivityChipModel.Active, modifier: Modifi
@Composable
private fun ChipBody(
model: OngoingActivityChipModel.Active,
+ iconViewStore: NotificationIconContainerViewBinder.IconViewStore?,
modifier: Modifier = Modifier,
onClick: (() -> Unit)? = null,
) {
val context = LocalContext.current
val isClickable = onClick != null
- val hasEmbeddedIcon = model.icon is OngoingActivityChipModel.ChipIcon.StatusBarView
+ val hasEmbeddedIcon =
+ model.icon is OngoingActivityChipModel.ChipIcon.StatusBarView ||
+ model.icon is OngoingActivityChipModel.ChipIcon.StatusBarNotificationIcon
val contentDescription =
when (val icon = model.icon) {
is OngoingActivityChipModel.ChipIcon.StatusBarView -> icon.contentDescription.load()
@@ -156,7 +166,9 @@ private fun ChipBody(
}
),
) {
- model.icon?.let { ChipIcon(viewModel = it, colors = model.colors) }
+ model.icon?.let {
+ ChipIcon(viewModel = it, iconViewStore = iconViewStore, colors = model.colors)
+ }
val isIconOnly = model is OngoingActivityChipModel.Active.IconOnly
if (!isIconOnly) {
@@ -169,6 +181,7 @@ private fun ChipBody(
@Composable
private fun ChipIcon(
viewModel: OngoingActivityChipModel.ChipIcon,
+ iconViewStore: NotificationIconContainerViewBinder.IconViewStore?,
colors: ColorsModel,
modifier: Modifier = Modifier,
) {
@@ -176,22 +189,16 @@ private fun ChipIcon(
when (viewModel) {
is OngoingActivityChipModel.ChipIcon.StatusBarView -> {
- // TODO(b/364653005): If the notification updates their small icon, ensure it's updated
- // in the chip.
- val originalIcon = viewModel.impl
- val iconSizePx =
- context.resources.getDimensionPixelSize(
- R.dimen.ongoing_activity_chip_embedded_padding_icon_size
- )
- AndroidView(
- modifier = modifier,
- factory = { _ ->
- originalIcon.apply {
- layoutParams = ViewGroup.LayoutParams(iconSizePx, iconSizePx)
- imageTintList = ColorStateList.valueOf(colors.text(context))
- }
- },
- )
+ StatusBarConnectedDisplays.assertInLegacyMode()
+ StatusBarIcon(colors, viewModel.impl.notification?.key, modifier) { viewModel.impl }
+ }
+ is OngoingActivityChipModel.ChipIcon.StatusBarNotificationIcon -> {
+ StatusBarConnectedDisplays.assertInNewMode()
+ check(iconViewStore != null)
+
+ StatusBarIcon(colors, viewModel.notificationKey, modifier) {
+ iconViewStore.iconView(viewModel.notificationKey)
+ }
}
is OngoingActivityChipModel.ChipIcon.SingleColorIcon -> {
@@ -209,6 +216,31 @@ private fun ChipIcon(
}
}
+/** A Compose wrapper around [StatusBarIconView]. */
+@Composable
+private fun StatusBarIcon(
+ colors: ColorsModel,
+ notificationKey: String?,
+ modifier: Modifier = Modifier,
+ iconFactory: () -> StatusBarIconView?,
+) {
+ val context = LocalContext.current
+
+ val iconSizePx =
+ context.resources.getDimensionPixelSize(
+ R.dimen.ongoing_activity_chip_embedded_padding_icon_size
+ )
+ AndroidView(
+ modifier = modifier,
+ factory = { _ ->
+ iconFactory.invoke()?.apply {
+ layoutParams = ViewGroup.LayoutParams(iconSizePx, iconSizePx)
+ imageTintList = ColorStateList.valueOf(colors.text(context))
+ } ?: throw IllegalStateException("Missing StatusBarIconView for $notificationKey")
+ },
+ )
+}
+
@Composable
private fun ExpandableChip(
color: () -> Color,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/OngoingActivityChips.kt b/packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/OngoingActivityChips.kt
index 64cad31f2150..4017c436151e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/OngoingActivityChips.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/OngoingActivityChips.kt
@@ -26,18 +26,24 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.android.systemui.statusbar.chips.ui.model.MultipleOngoingActivityChipsModel
+import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerViewBinder
@Composable
-fun OngoingActivityChips(chips: MultipleOngoingActivityChipsModel, modifier: Modifier = Modifier) {
+fun OngoingActivityChips(
+ chips: MultipleOngoingActivityChipsModel,
+ iconViewStore: NotificationIconContainerViewBinder.IconViewStore?,
+ modifier: Modifier = Modifier,
+) {
Row(
// TODO(b/372657935): Remove magic numbers for padding and spacing.
modifier = modifier.fillMaxHeight().padding(horizontal = 6.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp),
) {
- // TODO(b/372657935): Make sure chips are only shown when there is enough horizontal space.
chips.active
.filter { !it.isHidden }
- .forEach { key(it.key) { OngoingActivityChip(model = it) } }
+ .forEach {
+ key(it.key) { OngoingActivityChip(model = it, iconViewStore = iconViewStore) }
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt
index ea1d7820c79c..5887eb6ad865 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/StatusEvent.kt
@@ -25,6 +25,8 @@ import com.android.systemui.privacy.OngoingPrivacyChip
import com.android.systemui.privacy.PrivacyItem
import com.android.systemui.statusbar.BatteryStatusChip
import com.android.systemui.statusbar.ConnectedDisplayChip
+import com.android.systemui.statusbar.core.NewStatusBarIcons
+import com.android.systemui.statusbar.events.ui.view.BatteryStatusEventComposeChip
typealias ViewCreator = (context: Context) -> BackgroundAnimatableView
@@ -53,9 +55,7 @@ interface StatusEvent {
}
}
-class BGView(
- context: Context
-) : View(context), BackgroundAnimatableView {
+class BGView(context: Context) : View(context), BackgroundAnimatableView {
override val view: View
get() = this
@@ -65,9 +65,7 @@ class BGView(
}
@SuppressLint("AppCompatCustomView")
-class BGImageView(
- context: Context
-) : ImageView(context), BackgroundAnimatableView {
+class BGImageView(context: Context) : ImageView(context), BackgroundAnimatableView {
override val view: View
get() = this
@@ -84,8 +82,10 @@ class BatteryEvent(@IntRange(from = 0, to = 100) val batteryLevel: Int) : Status
override val shouldAnnounceAccessibilityEvent: Boolean = false
override val viewCreator: ViewCreator = { context ->
- BatteryStatusChip(context).apply {
- setBatteryLevel(batteryLevel)
+ if (NewStatusBarIcons.isEnabled) {
+ BatteryStatusEventComposeChip(batteryLevel, context)
+ } else {
+ BatteryStatusChip(context).apply { setBatteryLevel(batteryLevel) }
}
}
@@ -103,9 +103,7 @@ class ConnectedDisplayEvent : StatusEvent {
override var contentDescription: String? = ""
override val shouldAnnounceAccessibilityEvent: Boolean = true
- override val viewCreator: ViewCreator = { context ->
- ConnectedDisplayChip(context)
- }
+ override val viewCreator: ViewCreator = { context -> ConnectedDisplayChip(context) }
override fun toString(): String {
return javaClass.simpleName
@@ -134,7 +132,8 @@ open class PrivacyEvent(override val showAnimation: Boolean = true) : StatusEven
}
override fun shouldUpdateFromEvent(other: StatusEvent?): Boolean {
- return other is PrivacyEvent && (other.privacyItems != privacyItems ||
+ return other is PrivacyEvent &&
+ (other.privacyItems != privacyItems ||
other.contentDescription != contentDescription ||
(other.forceVisible && !forceVisible))
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/events/ui/view/BatteryStatusEventComposeChip.kt b/packages/SystemUI/src/com/android/systemui/statusbar/events/ui/view/BatteryStatusEventComposeChip.kt
new file mode 100644
index 000000000000..a90e3ff4b2dc
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/events/ui/view/BatteryStatusEventComposeChip.kt
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.events.ui.view
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.util.AttributeSet
+import android.view.View
+import android.widget.FrameLayout
+import android.widget.LinearLayout
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.width
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.ComposeView
+import com.android.systemui.res.R
+import com.android.systemui.statusbar.core.NewStatusBarIcons
+import com.android.systemui.statusbar.events.BackgroundAnimatableView
+import com.android.systemui.statusbar.pipeline.battery.domain.interactor.BatteryInteractor
+import com.android.systemui.statusbar.pipeline.battery.shared.ui.BatteryColors.LightThemeChargingColors
+import com.android.systemui.statusbar.pipeline.battery.shared.ui.BatteryFrame
+import com.android.systemui.statusbar.pipeline.battery.shared.ui.BatteryGlyph
+import com.android.systemui.statusbar.pipeline.battery.ui.composable.BatteryCanvas
+import com.android.systemui.statusbar.pipeline.battery.ui.viewmodel.BatteryViewModel
+import com.android.systemui.statusbar.pipeline.battery.ui.viewmodel.BatteryViewModel.Companion.glyphRepresentation
+
+/**
+ * [StatusEvent] chip for the battery plugged in status event. Shows the current battery level and
+ * charging state in the status bar via the system event animation.
+ *
+ * This chip will fully replace [BatteryStatusChip] when [NewStatusBarIcons] is rolled out
+ */
+@SuppressLint("ViewConstructor")
+class BatteryStatusEventComposeChip
+@JvmOverloads
+constructor(level: Int, context: Context, attrs: AttributeSet? = null) :
+ FrameLayout(context, attrs), BackgroundAnimatableView {
+ private val roundedContainer: LinearLayout
+ private val composeInner: ComposeView
+ override val contentView: View
+ get() = composeInner
+
+ init {
+ NewStatusBarIcons.assertInNewMode()
+
+ inflate(context, R.layout.status_bar_event_chip_compose, this)
+ roundedContainer = requireViewById(R.id.rounded_container)
+ composeInner = requireViewById(R.id.compose_view)
+ composeInner.apply {
+ setContent {
+ val isFull = BatteryInteractor.isBatteryFull(level)
+ BatteryCanvas(
+ modifier =
+ Modifier.width(BatteryViewModel.STATUS_BAR_BATTERY_WIDTH)
+ .height(BatteryViewModel.STATUS_BAR_BATTERY_HEIGHT),
+ path = BatteryFrame.pathSpec,
+ // TODO(b/394659067): get a content description for this chip
+ contentDescription = "",
+ innerWidth = BatteryFrame.innerWidth,
+ innerHeight = BatteryFrame.innerHeight,
+ // This event only happens when plugged in, so we always show it as charging
+ glyphs =
+ if (isFull) listOf(BatteryGlyph.Bolt)
+ else level.glyphRepresentation() + BatteryGlyph.Bolt,
+ level = level,
+ isFull = isFull,
+ colorsProvider = { LightThemeChargingColors },
+ )
+ }
+ }
+ updateResources()
+ }
+
+ /**
+ * When animating as a chip in the status bar, we want to animate the width for the rounded
+ * container. We have to subtract our own top and left offset because the bounds come to us as
+ * absolute on-screen bounds.
+ */
+ override fun setBoundsForAnimation(l: Int, t: Int, r: Int, b: Int) {
+ roundedContainer.setLeftTopRightBottom(l - left, t - top, r - left, b - top)
+ }
+
+ @SuppressLint("UseCompatLoadingForDrawables")
+ private fun updateResources() {
+ roundedContainer.background = mContext.getDrawable(R.drawable.statusbar_chip_bg)
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterView.java
index 96192b1ea315..25deec375c03 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/footer/ui/view/FooterView.java
@@ -391,7 +391,7 @@ public class FooterView extends StackScrollerDecorView {
if (!notificationFooterBackgroundTintOptimization()) {
if (notificationShadeBlur()) {
Color backgroundColor = Color.valueOf(
- SurfaceEffectColors.surfaceEffect0(getResources()));
+ SurfaceEffectColors.surfaceEffect1(getResources()));
scHigh = ColorUtils.setAlphaComponent(backgroundColor.toArgb(), 0xFF);
// Apply alpha on background drawables.
int backgroundAlpha = (int) (backgroundColor.alpha() * 0xFF);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt
index 31375cc4a03a..c512b43c91a3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/IconManager.kt
@@ -222,10 +222,6 @@ constructor(
return@traceSection
}
- if (StatusBarConnectedDisplays.isEnabled) {
- onIconUpdateRequiredListeners.onEach { it.onIconUpdateRequired(entry) }
- }
-
if (usingCache && !Flags.notificationsBackgroundIcons()) {
Log.wtf(
TAG,
@@ -238,6 +234,10 @@ constructor(
entry.icons.peopleAvatarDescriptor = null
}
+ if (StatusBarConnectedDisplays.isEnabled) {
+ onIconUpdateRequiredListeners.onEach { it.onIconUpdateRequired(entry) }
+ }
+
val (normalIconDescriptor, sensitiveIconDescriptor) = getIconDescriptors(entry)
val notificationContentDescription =
entry.sbn.notification?.let { iconBuilder.getIconContentDescription(it) }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/AODPromotedNotification.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/AODPromotedNotification.kt
index 777ffda8c87d..e5d2361e8524 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/AODPromotedNotification.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/AODPromotedNotification.kt
@@ -23,6 +23,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.View.GONE
import android.view.View.VISIBLE
+import android.view.ViewGroup.MarginLayoutParams
import android.view.ViewStub
import android.widget.Chronometer
import android.widget.DateTimeView
@@ -38,7 +39,6 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable
import androidx.compose.runtime.key
import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.unit.dp
@@ -164,8 +164,8 @@ private class AODPromotedNotificationViewUpdater(root: View) {
private var chronometerStub: ViewStub? = root.findViewById(R.id.chronometer)
private var chronometer: Chronometer? = null
private val closeButton: View? = root.findViewById(R.id.close_button)
- private val conversationIconContainer: View? =
- root.findViewById(R.id.conversation_icon_container)
+ private val conversationIconBadge: View? = root.findViewById(R.id.conversation_icon_badge)
+ private val conversationIcon: CachingIconView? = root.findViewById(R.id.conversation_icon)
private val conversationText: TextView? = root.findViewById(R.id.conversation_text)
private val expandButton: NotificationExpandButton? = root.findViewById(R.id.expand_button)
private val headerText: TextView? = root.findViewById(R.id.header_text)
@@ -175,12 +175,13 @@ private class AODPromotedNotificationViewUpdater(root: View) {
root.findViewById(R.id.header_text_secondary_divider)
private val icon: NotificationRowIconView? = root.findViewById(R.id.icon)
private val leftIcon: ImageView? = root.findViewById(R.id.left_icon)
- private val rightIcon: ImageView? = root.findViewById(R.id.right_icon)
+ private val mainColumn: View? = root.findViewById(R.id.notification_main_column)
private val notificationProgressEndIcon: CachingIconView? =
root.findViewById(R.id.notification_progress_end_icon)
private val notificationProgressStartIcon: CachingIconView? =
root.findViewById(R.id.notification_progress_start_icon)
private val profileBadge: ImageView? = root.findViewById(R.id.profile_badge)
+ private val rightIcon: ImageView? = root.findViewById(R.id.right_icon)
private val text: ImageFloatingTextView? = root.findViewById(R.id.text)
private val time: DateTimeView? = root.findViewById(R.id.time)
private val timeDivider: View? = root.findViewById(R.id.time_divider)
@@ -198,7 +199,7 @@ private class AODPromotedNotificationViewUpdater(root: View) {
alternateExpandTarget?.visibility = GONE
bigPicture?.visibility = GONE
closeButton?.visibility = GONE
- conversationIconContainer?.visibility = GONE
+ conversationIconBadge?.visibility = GONE
expandButton?.visibility = GONE
leftIcon?.visibility = GONE
notificationProgressEndIcon?.visibility = GONE
@@ -209,6 +210,16 @@ private class AODPromotedNotificationViewUpdater(root: View) {
?.drawable
?.mutate()
?.setColorFilter(SecondaryText.colorInt, PorterDuff.Mode.SRC_IN)
+
+ if (Flags.notificationsRedesignTemplates()) {
+ (mainColumn?.layoutParams as? MarginLayoutParams)?.let { mainColumnMargins ->
+ mainColumnMargins.topMargin =
+ Notification.Builder.getContentMarginTop(
+ root.context,
+ R.dimen.notification_2025_content_margin_top,
+ )
+ }
+ }
}
fun update(content: PromotedNotificationContentModel, audiblyAlertedIconVisible: Boolean) {
@@ -229,16 +240,11 @@ private class AODPromotedNotificationViewUpdater(root: View) {
textView: ImageFloatingTextView? = null,
showOldProgress: Boolean = true,
) {
- // Icon binding must be called in this order
- updateImageView(icon, content.smallIcon)
- icon?.setImageLevel(content.iconLevel)
- icon?.setBackgroundColor(Background.colorInt)
- icon?.originalIconColor = PrimaryText.colorInt
-
updateHeader(content, hideTitle = true)
updateTitle(title, content)
updateText(textView ?: text, content)
+ updateSmallIcon(icon, content)
updateImageView(rightIcon, content.skeletonLargeIcon)
if (showOldProgress) {
@@ -341,6 +347,8 @@ private class AODPromotedNotificationViewUpdater(root: View) {
updateImageView(verificationIcon, content.verificationIcon)
updateTextView(verificationText, content.verificationText)
+
+ updateSmallIcon(conversationIcon, content)
}
private fun updateConversationHeaderDividers(
@@ -398,6 +406,19 @@ private class AODPromotedNotificationViewUpdater(root: View) {
}
}
+ private fun updateSmallIcon(
+ smallIconView: CachingIconView?,
+ content: PromotedNotificationContentModel,
+ ) {
+ smallIconView ?: return
+
+ // Icon binding must be called in this order
+ updateImageView(smallIconView, content.smallIcon)
+ smallIconView.setImageLevel(content.iconLevel)
+ smallIconView.setBackgroundColor(Background.colorInt)
+ smallIconView.originalIconColor = PrimaryText.colorInt
+ }
+
private fun inflateChronometer() {
if (chronometer != null) {
return
@@ -480,14 +501,12 @@ private fun Notification.ProgressStyle.Point.toSkeleton(): Notification.Progress
}
}
-private enum class AodPromotedNotificationColor(colorUInt: UInt) {
- Background(0xFF000000u),
- PrimaryText(0xFFFFFFFFu),
- SecondaryText(0xFFCCCCCCu);
+private enum class AodPromotedNotificationColor(val colorInt: Int) {
+ Background(android.graphics.Color.BLACK),
+ PrimaryText(android.graphics.Color.WHITE),
+ SecondaryText(android.graphics.Color.WHITE);
- val colorInt = colorUInt.toInt()
- val color = Color(colorInt)
- val brush = SolidColor(color)
+ val brush = SolidColor(androidx.compose.ui.graphics.Color(colorInt))
}
private val viewUpdaterTagId = systemuiR.id.aod_promoted_notification_view_updater_tag
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/domain/interactor/AODPromotedNotificationInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/domain/interactor/AODPromotedNotificationInteractor.kt
index 0f21514fcc94..393f95d3ad77 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/domain/interactor/AODPromotedNotificationInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/promoted/domain/interactor/AODPromotedNotificationInteractor.kt
@@ -17,8 +17,11 @@
package com.android.systemui.statusbar.notification.promoted.domain.interactor
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dump.DumpManager
import com.android.systemui.statusbar.notification.domain.interactor.ActiveNotificationsInteractor
import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModel
+import com.android.systemui.statusbar.notification.promoted.shared.model.PromotedNotificationContentModel.Style
+import com.android.systemui.util.kotlin.FlowDumperImpl
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
@@ -26,9 +29,17 @@ import kotlinx.coroutines.flow.map
@SysUISingleton
class AODPromotedNotificationInteractor
@Inject
-constructor(activeNotificationsInteractor: ActiveNotificationsInteractor) {
+constructor(
+ activeNotificationsInteractor: ActiveNotificationsInteractor,
+ dumpManager: DumpManager,
+) : FlowDumperImpl(dumpManager) {
val content: Flow<PromotedNotificationContentModel?> =
activeNotificationsInteractor.topLevelRepresentativeNotifications.map { notifs ->
notifs.firstNotNullOfOrNull { it.promotedContent }
}
+
+ val isPresent: Flow<Boolean> =
+ content
+ .map { (it != null) && (it.style != Style.Ineligible) }
+ .dumpWhileCollecting("isPresent")
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/MagicActionBackgroundDrawable.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/MagicActionBackgroundDrawable.kt
index 6aa5e405f29c..77135802eced 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/MagicActionBackgroundDrawable.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/MagicActionBackgroundDrawable.kt
@@ -18,243 +18,126 @@ package com.android.systemui.statusbar.notification.row
import android.animation.ValueAnimator
import android.content.Context
-import android.graphics.BlendMode
import android.graphics.Canvas
-import android.graphics.Color
import android.graphics.ColorFilter
-import android.graphics.LinearGradient
import android.graphics.Paint
import android.graphics.Path
import android.graphics.PixelFormat
+import android.graphics.drawable.Drawable
+import android.graphics.LinearGradient
+import android.graphics.Matrix
import android.graphics.Rect
-import android.graphics.RuntimeShader
+import android.graphics.RectF
import android.graphics.Shader
-import android.graphics.drawable.Drawable
-import android.widget.FrameLayout
-import androidx.compose.foundation.layout.size
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.viewinterop.AndroidView
-import com.android.internal.graphics.ColorUtils
import com.android.systemui.res.R
-import com.android.systemui.surfaceeffects.shaderutil.ShaderUtilLibrary
import com.android.wm.shell.shared.animation.Interpolators
-import kotlin.math.min
-/**
- * A background style for smarter-smart-actions. The style is composed by a simplex3d noise,
- * overlaid with sparkles.
- */
class MagicActionBackgroundDrawable(
context: Context,
- primaryContainer: Int? = null,
- seed: Float = 0f,
) : Drawable() {
- private val pixelDensity = context.resources.displayMetrics.density
- private val cornerRadius =
- context.resources.getDimensionPixelSize(R.dimen.smart_reply_button_corner_radius).toFloat()
- private val outlineStrokeWidth =
- context.resources
- .getDimensionPixelSize(R.dimen.smart_action_button_outline_stroke_width)
- .toFloat()
- private val buttonShape = Path()
- private val paddingVertical =
- context.resources.getDimensionPixelSize(R.dimen.smart_action_button_icon_padding).toFloat()
+ private val cornerRadius = context.resources.getDimension(R.dimen.magic_action_button_corner_radius)
+ private val outlineStrokeWidth = context.resources.getDimension(R.dimen.magic_action_button_outline_stroke_width)
+ private val insetVertical = 8 * context.resources.displayMetrics.density
- /** The color of the button background. */
- private val mainColor =
- primaryContainer
- ?: context.getColor(com.android.internal.R.color.materialColorPrimaryContainer)
-
- /** Slightly brighter version of [mainColor] used on the simplex noise. */
- private val effectColor: Int
- get() {
- val labColor = arrayOf(0.0, 0.0, 0.0).toDoubleArray()
- ColorUtils.colorToLAB(mainColor, labColor)
- val camColor = ColorUtils.colorToCAM(mainColor)
- return ColorUtils.CAMToColor(
- camColor.hue,
- camColor.chroma,
- min(100f, (labColor[0] + 10).toFloat()),
+ private val buttonShape = Path()
+ // Color and style
+ private val bgPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
+ val bgColor =
+ context.getColor(
+ com.android.internal.R.color.materialColorPrimaryContainer
)
- }
+ color = bgColor
+ style = Paint.Style.FILL
+ }
+ private val outlinePaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
+ val outlineColor =
+ context.getColor(
+ com.android.internal.R.color.materialColorOutlineVariant
+ )
+ color = outlineColor
+ style = Paint.Style.STROKE
+ strokeWidth = outlineStrokeWidth
+ }
+ private val outlineStartColor =
+ context.getColor(
+ com.android.internal.R.color.materialColorTertiaryContainer
+ )
+ private val outlineMiddleColor =
+ context.getColor(
+ com.android.internal.R.color.materialColorPrimaryFixedDim
+ )
+ private val outlineEndColor =
+ context.getColor(
+ com.android.internal.R.color.materialColorPrimary
+ )
+ // Animation
+ private var gradientAnimator: ValueAnimator
+ private var rotationAngle = 20f // Start rotation at 20 degrees
- private val bgShader = MagicActionBackgroundShader()
- private val bgPaint = Paint()
- private val outlinePaint = Paint()
- private val gradientAnimator =
- ValueAnimator.ofFloat(0f, 1f).apply {
- duration = 2500
- interpolator = Interpolators.LINEAR
- addUpdateListener { invalidateSelf() }
- }
- private val turbulenceAnimator =
- ValueAnimator.ofFloat(seed, seed + TURBULENCE_MOVEMENT).apply {
- duration = ANIMATION_DURATION
+ init {
+ gradientAnimator = ValueAnimator.ofFloat(0f, 1f).apply {
+ duration = 5000 // 5 seconds
interpolator = Interpolators.LINEAR
- addUpdateListener { invalidateSelf() }
+ repeatCount = 1
+ addUpdateListener { animator ->
+ val animatedValue = animator.animatedValue as Float
+ rotationAngle = 20f + animatedValue * 360f // Rotate in a spiral
+ invalidateSelf()
+ }
+ // TODO: Reset the outline color when animation ends.
start()
}
- private val effectFadeAnimation =
- ValueAnimator.ofFloat(0f, 1f).apply {
- duration = 1000
- startDelay = ANIMATION_DURATION - 1000L
- interpolator = Interpolators.STANDARD_DECELERATE
- addUpdateListener { invalidateSelf() }
- }
-
- init {
- bgShader.setColorUniform("in_color", mainColor)
- bgShader.setColorUniform("in_effectColor", effectColor)
- bgPaint.shader = bgShader
- outlinePaint.style = Paint.Style.STROKE
- // Stroke is doubled in width and then clipped, to avoid anti-aliasing artifacts at the edge
- // of the rectangle.
- outlinePaint.strokeWidth = outlineStrokeWidth * 2
- outlinePaint.blendMode = BlendMode.SCREEN
- outlinePaint.alpha = OUTLINE_ALPHA
-
- animate()
- }
-
- private fun animate() {
- turbulenceAnimator.start()
- gradientAnimator.start()
- effectFadeAnimation.start()
}
override fun draw(canvas: Canvas) {
- updateShaders()
+ val boundsF = RectF(bounds)
+ boundsF.inset(0f, insetVertical)
+ buttonShape.reset()
+ buttonShape.addRoundRect(boundsF, cornerRadius, cornerRadius, Path.Direction.CW)
- // We clip instead of drawing 2 rounded rects, otherwise there will be artifacts where
- // around the button background and the outline.
canvas.save()
+ // Draw background
canvas.clipPath(buttonShape)
canvas.drawPath(buttonShape, bgPaint)
+ // Apply gradient to outline
canvas.drawPath(buttonShape, outlinePaint)
+ updateGradient(boundsF)
canvas.restore()
}
- private fun updateShaders() {
- val effectAlpha = 1f - effectFadeAnimation.animatedValue as Float
- val turbulenceZ = turbulenceAnimator.animatedValue as Float
- bgShader.setFloatUniform("in_sparkleMove", turbulenceZ * 1000)
- bgShader.setFloatUniform("in_noiseMove", 0f, 0f, turbulenceZ)
- bgShader.setFloatUniform("in_turbulenceAlpha", effectAlpha)
- bgShader.setFloatUniform("in_spkarkleAlpha", SPARKLE_ALPHA * effectAlpha)
- val gradientOffset = gradientAnimator.animatedValue as Float * bounds.width()
- val outlineGradient =
- LinearGradient(
- gradientOffset + bounds.left.toFloat(),
- 0f,
- gradientOffset + bounds.right.toFloat(),
- 0f,
- mainColor,
- ColorUtils.setAlphaComponent(mainColor, 0),
- Shader.TileMode.MIRROR,
- )
- outlinePaint.shader = outlineGradient
+ private fun updateGradient(boundsF: RectF) {
+ val gradient = LinearGradient(
+ boundsF.left, boundsF.top,
+ boundsF.right, boundsF.bottom,
+ intArrayOf(outlineStartColor, outlineMiddleColor, outlineEndColor),
+ null,
+ Shader.TileMode.CLAMP
+ )
+ // Create a rotation matrix for the spiral effect
+ val matrix = Matrix()
+ matrix.setRotate(rotationAngle, boundsF.centerX(), boundsF.centerY())
+ gradient.setLocalMatrix(matrix)
+
+ outlinePaint.shader = gradient
}
override fun onBoundsChange(bounds: Rect) {
super.onBoundsChange(bounds)
-
- val width = bounds.width().toFloat()
- val height = bounds.height().toFloat()
- if (width == 0f || height == 0f) return
-
- bgShader.setFloatUniform("in_gridNum", NOISE_SIZE)
- bgShader.setFloatUniform("in_size", width, height)
- bgShader.setFloatUniform("in_aspectRatio", width / height)
- bgShader.setFloatUniform("in_pixelDensity", pixelDensity)
-
- buttonShape.reset()
- buttonShape.addRoundRect(
- bounds.left.toFloat(),
- bounds.top + paddingVertical,
- bounds.right.toFloat(),
- bounds.bottom - paddingVertical,
- cornerRadius,
- cornerRadius,
- Path.Direction.CW,
- )
+ invalidateSelf() // Redraw when size changes
}
override fun setAlpha(alpha: Int) {
bgPaint.alpha = alpha
+ outlinePaint.alpha = alpha
invalidateSelf()
}
override fun setColorFilter(colorFilter: ColorFilter?) {
bgPaint.colorFilter = colorFilter
+ outlinePaint.colorFilter = colorFilter
invalidateSelf()
}
override fun getOpacity(): Int = PixelFormat.TRANSLUCENT
-
- companion object {
- /** Smoothness of the turbulence. Larger numbers yield more detail. */
- private const val NOISE_SIZE = 0.57f
- /** Strength of the sparkles overlaid on the turbulence. */
- private const val SPARKLE_ALPHA = 0.15f
- /** Alpha (0..255) of the button outline */
- private const val OUTLINE_ALPHA = 82
- /** Turbulence grid size */
- private const val TURBULENCE_MOVEMENT = 4.3f
- /** Total animation duration in millis */
- private const val ANIMATION_DURATION = 5000L
- }
-}
-
-private class MagicActionBackgroundShader : RuntimeShader(SHADER) {
-
- // language=AGSL
- companion object {
- private const val UNIFORMS =
- """
- uniform float in_gridNum;
- uniform vec3 in_noiseMove;
- uniform half in_sparkleMove;
- uniform vec2 in_size;
- uniform float in_aspectRatio;
- uniform half in_pixelDensity;
- uniform float in_turbulenceAlpha;
- uniform float in_spkarkleAlpha;
- layout(color) uniform vec4 in_color;
- layout(color) uniform vec4 in_effectColor;
- """
- private const val MAIN_SHADER =
- """vec4 main(vec2 p) {
- vec2 uv = p / in_size.xy;
- uv.x *= in_aspectRatio;
- vec3 noiseP = vec3(uv + in_noiseMove.xy, in_noiseMove.z) * in_gridNum;
- half luma = getLuminosity(half3(simplex3d(noiseP)));
- half4 turbulenceColor = mix(in_color, in_effectColor, luma * in_turbulenceAlpha);
- float sparkle = sparkles(p - mod(p, in_pixelDensity * 0.8), in_sparkleMove);
- sparkle = min(sparkle * in_spkarkleAlpha, in_spkarkleAlpha);
- return saturate(turbulenceColor + half4(sparkle));
- }
- """
- private const val SHADER = UNIFORMS + ShaderUtilLibrary.SHADER_LIB + MAIN_SHADER
- }
-}
-
-// @Preview
-@Composable
-fun DrawablePreview() {
- AndroidView(
- factory = { context ->
- FrameLayout(context).apply {
- background =
- MagicActionBackgroundDrawable(
- context = context,
- primaryContainer = Color.parseColor("#c5eae2"),
- seed = 0f,
- )
- }
- },
- modifier = Modifier.size(100.dp, 50.dp),
- )
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/MagicActionButton.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/MagicActionButton.kt
new file mode 100644
index 000000000000..d735360f1d4e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/MagicActionButton.kt
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.notification.row
+
+import android.annotation.SuppressLint
+import android.content.Context
+import android.util.AttributeSet
+import android.widget.Button
+
+/**
+ * Custom Button for Magic Action Button, which includes the custom background and foreground.
+ */
+@SuppressLint("AppCompatCustomView")
+class MagicActionButton @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : Button(context, attrs, defStyleAttr) {
+ init {
+ background = MagicActionBackgroundDrawable(context)
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PromotedNotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PromotedNotificationInfo.java
index 93b2a2d41691..db25e0889298 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PromotedNotificationInfo.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/PromotedNotificationInfo.java
@@ -40,6 +40,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
public class PromotedNotificationInfo extends NotificationInfo {
private static final String TAG = "PromotedNotifInfoGuts";
private INotificationManager mNotificationManager;
+ private NotificationGuts mGutsContainer;
public PromotedNotificationInfo(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -71,32 +72,27 @@ public class PromotedNotificationInfo extends NotificationInfo {
mNotificationManager = iNotificationManager;
- bindDismiss(entry.getSbn(), onCloseClick);
bindDemote(entry.getSbn(), pkg);
}
-
- protected void bindDismiss(StatusBarNotification sbn,
- View.OnClickListener onCloseClick) {
- View dismissButton = findViewById(R.id.promoted_dismiss);
-
- dismissButton.setOnClickListener(onCloseClick);
- dismissButton.setVisibility(!sbn.isNonDismissable()
- && dismissButton.hasOnClickListeners() ? VISIBLE : GONE);
-
- }
-
protected void bindDemote(StatusBarNotification sbn, String packageName) {
View demoteButton = findViewById(R.id.promoted_demote);
demoteButton.setOnClickListener(getDemoteClickListener(sbn, packageName));
demoteButton.setVisibility(demoteButton.hasOnClickListeners() ? VISIBLE : GONE);
}
+ @Override
+ public void setGutsParent(NotificationGuts guts) {
+ mGutsContainer = guts;
+ super.setGutsParent(guts);
+ }
+
private OnClickListener getDemoteClickListener(StatusBarNotification sbn, String packageName) {
- return ((View unusedView) -> {
+ return ((View v) -> {
try {
// TODO(b/391661009): Signal AutomaticPromotionCoordinator here
mNotificationManager.setCanBePromoted(packageName, sbn.getUid(), false, true);
+ mGutsContainer.closeControls(v, true);
} catch (RemoteException e) {
Log.e(TAG, "Couldn't revoke live update permission", e);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
index e9eecdd8a26f..e8affaa4b60f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationHeaderViewWrapper.java
@@ -31,6 +31,7 @@ import android.view.ViewGroup;
import android.view.animation.Interpolator;
import android.view.animation.PathInterpolator;
import android.widget.DateTimeView;
+import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
@@ -41,6 +42,7 @@ import com.android.app.animation.Interpolators;
import com.android.internal.widget.CachingIconView;
import com.android.internal.widget.NotificationCloseButton;
import com.android.internal.widget.NotificationExpandButton;
+import com.android.systemui.Flags;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.TransformableView;
import com.android.systemui.statusbar.ViewTransformationHelper;
@@ -67,6 +69,7 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper imple
private CachingIconView mIcon;
private NotificationCloseButton mCloseButton;
private NotificationExpandButton mExpandButton;
+ private FrameLayout mExpandButtonSpacer;
private View mAltExpandTarget;
private View mIconContainer;
protected NotificationHeaderView mNotificationHeader;
@@ -154,6 +157,10 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper imple
mHeaderText = mView.findViewById(com.android.internal.R.id.header_text);
mAppNameText = mView.findViewById(com.android.internal.R.id.app_name_text);
mExpandButton = mView.findViewById(com.android.internal.R.id.expand_button);
+ if (Flags.uiRichOngoingForceExpanded()) {
+ mExpandButtonSpacer =
+ mView.findViewById(com.android.internal.R.id.expand_button_spacer);
+ }
mAltExpandTarget = mView.findViewById(com.android.internal.R.id.alternate_expand_target);
mIconContainer = mView.findViewById(com.android.internal.R.id.conversation_icon_container);
mWorkProfileImage = mView.findViewById(com.android.internal.R.id.profile_badge);
@@ -295,6 +302,9 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper imple
boolean expandable,
View.OnClickListener onClickListener,
boolean requestLayout) {
+ if (Flags.uiRichOngoingForceExpanded() && mExpandButtonSpacer != null) {
+ mExpandButtonSpacer.setVisibility(expandable ? GONE : VISIBLE);
+ }
mExpandButton.setVisibility(expandable ? VISIBLE : GONE);
mExpandButton.setOnClickListener(expandable ? onClickListener : null);
if (mAltExpandTarget != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImpl.kt
index 5a29a699a7e6..a507c4ceecd2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MagneticNotificationRowManagerImpl.kt
@@ -190,7 +190,8 @@ constructor(
currentMagneticListeners.forEachIndexed { i, target ->
target?.let {
if (i != currentMagneticListeners.size / 2) {
- snapBack(it, velocity)
+ val velocityMultiplier = MAGNETIC_TRANSLATION_MULTIPLIERS[i]
+ snapBack(it, velocity?.times(velocityMultiplier))
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
index 42d02e10ab8d..b9352bf64be4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
@@ -52,6 +52,9 @@ import android.graphics.Outline;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
+import android.graphics.RenderEffect;
+import android.graphics.RenderNode;
+import android.graphics.Shader;
import android.os.Bundle;
import android.os.SystemClock;
import android.os.Trace;
@@ -513,6 +516,13 @@ public class NotificationStackScrollLayout
/** The clip path defining where we are NOT allowed to draw. */
private final Path mNegativeRoundedClipPath = new Path();
+ /** RenderNode to blur notifications which will be reused (redrawn) whenever NSSL is drawn. */
+ private final RenderNode mBlurNode = new RenderNode("BlurNode");
+
+ /** Radius of the blur effect applied to the content of the NSSL. */
+ private float mBlurRadius = 0f;
+ @Nullable private RenderEffect mBlurEffect = null;
+
/**
* The clip Path used to clip the launching notification. This may be different
* from the normal path, as the views launch animation could start clipped.
@@ -896,6 +906,7 @@ public class NotificationStackScrollLayout
mOverflingDistance = configuration.getScaledOverflingDistance();
Resources res = context.getResources();
+ mSwipeHelper.updateResourceProperties(res);
final boolean isSmallScreenLandscape = res.getBoolean(R.bool.is_small_screen_landscape);
boolean useSmallLandscapeLockscreenResources = mIsSmallLandscapeLockscreenEnabled
&& isSmallScreenLandscape;
@@ -2073,8 +2084,6 @@ public class NotificationStackScrollLayout
Resources res = getResources();
updateSplitNotificationShade();
mStatusBarHeight = SystemBarUtils.getStatusBarHeight(mContext);
- float densityScale = res.getDisplayMetrics().density;
- mSwipeHelper.setDensityScale(densityScale);
float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
mSwipeHelper.setPagingTouchSlop(pagingTouchSlop);
reinitView();
@@ -5974,6 +5983,24 @@ public class NotificationStackScrollLayout
invalidate();
}
+ @Override
+ public void setBlurRadius(float blurRadius) {
+ if (mBlurRadius != blurRadius) {
+ mBlurRadius = blurRadius;
+ updateBlurEffect();
+ invalidate();
+ }
+ }
+
+ private void updateBlurEffect() {
+ if (mBlurRadius > 0) {
+ mBlurEffect =
+ RenderEffect.createBlurEffect(mBlurRadius, mBlurRadius, Shader.TileMode.CLAMP);
+ } else {
+ mBlurEffect = null;
+ }
+ }
+
/**
* Set rounded rect clipping bounds on this view.
*/
@@ -6144,26 +6171,64 @@ public class NotificationStackScrollLayout
@Override
protected void dispatchDraw(@NonNull Canvas canvas) {
- if (!mLaunchingNotification) {
- // When launching notifications, we're clipping the children individually instead of in
- // dispatchDraw
- if (mShouldUseRoundedRectClipping) {
- // Let's clip rounded.
- canvas.clipPath(mRoundedClipPath);
+ if (mBlurEffect != null) {
+ // reuse the cached RenderNode to blur
+ mBlurNode.setPosition(0, 0, canvas.getWidth(), canvas.getHeight());
+ mBlurNode.setRenderEffect(mBlurEffect);
+ Canvas blurCanvas = mBlurNode.beginRecording();
+ // draw all the children (except HUNs) on the blurred canvas
+ super.dispatchDraw(blurCanvas);
+ mBlurNode.endRecording();
+ // apply clipping to the canvas
+ int saveCount = canvas.save();
+ applyClipToCanvas(canvas);
+ // draw the blurred content to the clipped canvas
+ canvas.drawRenderNode(mBlurNode);
+ // restore the canvas, so it doesn't clip anymore
+ canvas.restoreToCount(saveCount);
+ // draw the children that were left out during the dispatchDraw phase
+ for (int i = 0; i < getChildCount(); i++) {
+ // TODO(b/388469101) draw these children in z-order
+ ExpandableView child = getChildAtIndex(i);
+ if (shouldSkipBlurForChild(child)) {
+ super.drawChild(canvas, child, getDrawingTime());
+ }
}
- if (mShouldUseNegativeRoundedRectClipping) {
- // subtract the negative path if it is defined
- canvas.clipOutPath(mNegativeRoundedClipPath);
+ } else {
+ if (!mLaunchingNotification) {
+ // When launching notifications, we're clipping the children individually instead
+ // of in dispatchDraw
+ applyClipToCanvas(canvas);
}
+ super.dispatchDraw(canvas);
+ }
+ }
+
+ private void applyClipToCanvas(Canvas canvas) {
+ if (mShouldUseRoundedRectClipping) {
+ // clip by the positive path if it is defined
+ canvas.clipPath(mRoundedClipPath);
+ }
+ if (mShouldUseNegativeRoundedRectClipping) {
+ // subtract the negative path if it is defined
+ canvas.clipOutPath(mNegativeRoundedClipPath);
}
- super.dispatchDraw(canvas);
}
@Override
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
boolean shouldUseClipping =
mShouldUseRoundedRectClipping || mShouldUseNegativeRoundedRectClipping;
- if (mLaunchingNotification && shouldUseClipping) {
+ if (mBlurEffect != null) {
+ if (shouldSkipBlurForChild(child)) {
+ // skip drawing this child during the regular dispatchDraw pass
+ return false;
+ } else {
+ // draw the child as if nothing happened, non-blurred elements shouldn't be
+ // affected by clipping either
+ return super.drawChild(canvas, child, drawingTime);
+ }
+ } else if (mLaunchingNotification && shouldUseClipping) {
// Let's clip children individually during notification launch
canvas.save();
ExpandableView expandableView = (ExpandableView) child;
@@ -6194,6 +6259,14 @@ public class NotificationStackScrollLayout
}
}
+ private boolean shouldSkipBlurForChild(View child) {
+ if (child instanceof ExpandableView row) {
+ return row.isHeadsUpState();
+ } else {
+ return false;
+ }
+ }
+
/**
* Calculate the total translation needed when dismissing.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java
index 6f4047f48205..c5a846e1da05 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationSwipeHelper.java
@@ -534,12 +534,6 @@ class NotificationSwipeHelper extends SwipeHelper implements NotificationSwipeAc
}
@Override
- public void setDensityScale(float densityScale) {
- super.setDensityScale(densityScale);
- mCallback.onDensityScaleChange(densityScale);
- }
-
- @Override
public void resetTouchState() {
super.resetTouchState();
mCallback.resetMagneticStates();
@@ -565,8 +559,6 @@ class NotificationSwipeHelper extends SwipeHelper implements NotificationSwipeAc
*/
float getTotalTranslationLength(View animView);
- void onDensityScaleChange(float density);
-
boolean handleSwipeableViewTranslation(SwipeableView view, float translate);
// Reset any ongoing magnetic interactions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationScrollView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationScrollView.kt
index 5fec0965f6a0..a7305f7f27ab 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationScrollView.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationScrollView.kt
@@ -58,6 +58,13 @@ interface NotificationScrollView {
*/
fun setNegativeClippingShape(shape: ShadeScrimShape?)
+ /**
+ * Sets a blur effect on the view. A radius of 0 means no blur.
+ *
+ * @param radius blur radius in pixels
+ */
+ fun setBlurRadius(radius: Float)
+
/** set the y position in px of the top of the stack in this view's coordinates */
fun setStackTop(stackTop: Float)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt
index 43a552b516ae..a4e39cbd8388 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt
@@ -94,6 +94,7 @@ constructor(
}
}
launch { viewModel.qsExpandFraction.collectTraced { view.setQsExpandFraction(it) } }
+ launch { viewModel.blurRadius(maxBlurRadius).collect(view::setBlurRadius) }
launch {
viewModel.isShowingStackOnLockscreen.collectTraced {
view.setShowingStackOnLockscreen(it)
@@ -146,6 +147,10 @@ constructor(
}
}
+ /** blur radius to be applied when the QS panel is fully expanded */
+ private val maxBlurRadius: Flow<Int> =
+ configuration.getDimensionPixelSize(R.dimen.max_shade_content_blur_radius)
+
/** flow of the scrim clipping radius */
private val scrimRadius: Flow<Int>
get() = configuration.getDimensionPixelOffset(R.dimen.notification_scrim_corner_radius)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt
index 7f016a1cbc2e..08d98a1d53e5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt
@@ -15,6 +15,8 @@
*
*/
+@file:OptIn(ExperimentalCoroutinesApi::class)
+
package com.android.systemui.statusbar.notification.stack.ui.viewmodel
import com.android.compose.animation.scene.ContentKey
@@ -46,11 +48,14 @@ import com.android.systemui.util.kotlin.ActivatableFlowDumperImpl
import dagger.Lazy
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.combineTransform
import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapNotNull
@@ -193,6 +198,37 @@ constructor(
val qsExpandFraction: Flow<Float> =
shadeInteractor.qsExpansion.dumpWhileCollecting("qsExpandFraction")
+ /** Blur radius to be applied to Notifications. */
+ fun blurRadius(maxBlurRadius: Flow<Int>) =
+ combine(blurFraction, maxBlurRadius) { fraction, maxRadius -> fraction * maxRadius }
+
+ /**
+ * Scale of the blur effect that should be applied to Notifications.
+ *
+ * 0 -> don't blur (default, removes all blur render effects) 1 -> do the full blur (apply a
+ * render effect with the max blur radius)
+ */
+ private val blurFraction: Flow<Float> =
+ if (SceneContainerFlag.isEnabled) {
+ shadeModeInteractor.shadeMode.flatMapLatest { shadeMode ->
+ when (shadeMode) {
+ ShadeMode.Dual ->
+ combineTransform(
+ shadeInteractor.shadeExpansion,
+ shadeInteractor.qsExpansion,
+ ) { notificationShadeExpansion, qsExpansion ->
+ if (notificationShadeExpansion == 0f) {
+ // Blur out notifications as the QS overlay panel expands
+ emit(qsExpansion)
+ }
+ }
+ else -> flowOf(0f)
+ }
+ }
+ } else {
+ flowOf(0f)
+ }
+
/** Whether we should close any open notification guts. */
val shouldCloseGuts: Flow<Boolean> = stackAppearanceInteractor.shouldCloseGuts
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt
index 54efa4a2bcf2..2c8c7a1bdd44 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt
@@ -48,6 +48,7 @@ import com.android.systemui.keyguard.ui.viewmodel.AodToGoneTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.AodToLockscreenTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.AodToOccludedTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.AodToPrimaryBouncerTransitionViewModel
+import com.android.systemui.keyguard.ui.viewmodel.DozingToDreamingTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.DozingToGlanceableHubTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.DozingToLockscreenTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.DozingToOccludedTransitionViewModel
@@ -136,6 +137,7 @@ constructor(
private val aodToLockscreenTransitionViewModel: AodToLockscreenTransitionViewModel,
private val aodToOccludedTransitionViewModel: AodToOccludedTransitionViewModel,
private val aodToPrimaryBouncerTransitionViewModel: AodToPrimaryBouncerTransitionViewModel,
+ private val dozingToDreamingTransitionViewModel: DozingToDreamingTransitionViewModel,
dozingToGlanceableHubTransitionViewModel: DozingToGlanceableHubTransitionViewModel,
private val dozingToLockscreenTransitionViewModel: DozingToLockscreenTransitionViewModel,
private val dozingToOccludedTransitionViewModel: DozingToOccludedTransitionViewModel,
@@ -572,6 +574,7 @@ constructor(
aodToLockscreenTransitionViewModel.notificationAlpha,
aodToOccludedTransitionViewModel.lockscreenAlpha(viewState),
aodToPrimaryBouncerTransitionViewModel.notificationAlpha,
+ dozingToDreamingTransitionViewModel.notificationAlpha,
dozingToLockscreenTransitionViewModel.lockscreenAlpha,
dozingToOccludedTransitionViewModel.lockscreenAlpha(viewState),
dozingToPrimaryBouncerTransitionViewModel.notificationAlpha,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
index 04dedb629a15..9aa4c54c4292 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BiometricUnlockController.java
@@ -275,7 +275,8 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp
DozeScrimController dozeScrimController,
KeyguardViewMediator keyguardViewMediator,
NotificationShadeWindowController notificationShadeWindowController,
- KeyguardStateController keyguardStateController, Handler handler,
+ KeyguardStateController keyguardStateController,
+ @Main Handler handler,
KeyguardUpdateMonitor keyguardUpdateMonitor,
@Main Resources resources,
KeyguardBypassController keyguardBypassController,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
index b2d337797b53..66f0d4ad692e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -92,6 +92,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
+import java.util.function.Supplier;
import javax.inject.Inject;
@@ -167,6 +168,27 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
*/
@FloatRange(from = 0, to = 1)
private float mBouncerHiddenFraction = KeyguardBouncerConstants.EXPANSION_HIDDEN;
+ private boolean mIsBlurSupported = false;
+
+ private float getDefaultScrimAlpha(boolean ignoreCurrentState) {
+ if (Flags.bouncerUiRevamp() && mIsBlurSupported) {
+ // Hack to not make the shade transparent when shade blur is not enabled.
+ if (!Flags.notificationShadeBlur() && !ignoreCurrentState) {
+ // When we expand directly to full quick settings, shade state is KEYGUARD
+ if (mState == ScrimState.SHADE_LOCKED || (mState == ScrimState.KEYGUARD
+ && mQsExpansion == 1)) {
+ return BUSY_SCRIM_ALPHA;
+ }
+ }
+ return TRANSPARENT_BOUNCER_SCRIM_ALPHA;
+ } else {
+ return BUSY_SCRIM_ALPHA;
+ }
+ }
+
+ private float getDefaultScrimAlpha() {
+ return getDefaultScrimAlpha(false);
+ }
@IntDef(prefix = {"VISIBILITY_"}, value = {
TRANSPARENT,
@@ -229,7 +251,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
private float mScrimBehindAlphaKeyguard = KEYGUARD_SCRIM_ALPHA;
static final float TRANSPARENT_BOUNCER_SCRIM_ALPHA = 0.54f;
- private float mDefaultScrimAlpha;
private float mRawPanelExpansionFraction;
private float mPanelScrimMinFraction;
@@ -328,7 +349,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
DozeParameters dozeParameters,
KeyguardStateController keyguardStateController,
DelayedWakeLock.Factory delayedWakeLockFactory,
- Handler handler,
+ @Main Handler handler,
KeyguardUpdateMonitor keyguardUpdateMonitor,
DockManager dockManager,
ConfigurationController configurationController,
@@ -349,7 +370,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
mLargeScreenShadeInterpolator = largeScreenShadeInterpolator;
mBlurConfig = blurConfig;
mWindowRootViewBlurInteractor = windowRootViewBlurInteractor;
- mDefaultScrimAlpha = BUSY_SCRIM_ALPHA;
mKeyguardStateController = keyguardStateController;
mDarkenWhileDragging = !mKeyguardStateController.canDismissLockScreen();
@@ -410,9 +430,10 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
final ScrimState[] states = ScrimState.values();
for (int i = 0; i < states.length; i++) {
- states[i].init(mScrimInFront, mScrimBehind, mDozeParameters, mDockManager);
+ states[i].init(mScrimInFront, mScrimBehind, mDozeParameters, mDockManager,
+ this::isBlurCurrentlySupported);
states[i].setScrimBehindAlphaKeyguard(mScrimBehindAlphaKeyguard);
- states[i].setDefaultScrimAlpha(mDefaultScrimAlpha);
+ states[i].setDefaultScrimAlpha(getDefaultScrimAlpha());
}
mTransparentScrimBackground = notificationsScrim.getResources()
@@ -489,28 +510,39 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
Edge.Companion.create(GLANCEABLE_HUB, LOCKSCREEN)),
mGlanceableHubConsumer, mMainDispatcher);
- if (Flags.bouncerUiRevamp()) {
+ if (Flags.bouncerUiRevamp() || Flags.notificationShadeBlur()) {
collectFlow(behindScrim,
mWindowRootViewBlurInteractor.get().isBlurCurrentlySupported(),
this::handleBlurSupportedChanged);
}
}
- private void updateDefaultScrimAlpha(float alpha) {
- mDefaultScrimAlpha = alpha;
+ private void updateDefaultScrimAlphas() {
for (ScrimState state : ScrimState.values()) {
- state.setDefaultScrimAlpha(mDefaultScrimAlpha);
+ state.setDefaultScrimAlpha(getDefaultScrimAlpha(true));
}
applyAndDispatchState();
}
+ private boolean isBlurCurrentlySupported() {
+ return mWindowRootViewBlurInteractor.get()
+ .isBlurCurrentlySupported()
+ .getValue();
+ }
+
private void handleBlurSupportedChanged(boolean isBlurSupported) {
- if (isBlurSupported) {
- updateDefaultScrimAlpha(TRANSPARENT_BOUNCER_SCRIM_ALPHA);
- ScrimState.BOUNCER_SCRIMMED.setNotifBlurRadius(mBlurConfig.getMaxBlurRadiusPx());
- } else {
- ScrimState.BOUNCER_SCRIMMED.setNotifBlurRadius(0f);
- updateDefaultScrimAlpha(BUSY_SCRIM_ALPHA);
+ this.mIsBlurSupported = isBlurSupported;
+ if (Flags.bouncerUiRevamp()) {
+ updateDefaultScrimAlphas();
+ if (isBlurSupported) {
+ ScrimState.BOUNCER_SCRIMMED.setNotifBlurRadius(mBlurConfig.getMaxBlurRadiusPx());
+ } else {
+ ScrimState.BOUNCER_SCRIMMED.setNotifBlurRadius(0f);
+ }
+ }
+ if (Flags.notificationShadeBlur()) {
+ mState.prepare(mState);
+ applyAndDispatchState();
}
}
@@ -989,7 +1021,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
float behindFraction = getInterpolatedFraction();
behindFraction = (float) Math.pow(behindFraction, 0.8f);
mBehindAlpha = 1;
- mNotificationsAlpha = behindFraction * mDefaultScrimAlpha;
+ mNotificationsAlpha = behindFraction * getDefaultScrimAlpha();
} else {
if (Flags.notificationShadeBlur()) {
// TODO (b/390730594): match any spec for controlling alpha based on shade
@@ -1000,7 +1032,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
mNotificationsTint = mState.getNotifTint();
} else {
mBehindAlpha = mLargeScreenShadeInterpolator.getBehindScrimAlpha(
- mPanelExpansionFraction * mDefaultScrimAlpha);
+ mPanelExpansionFraction * getDefaultScrimAlpha());
mNotificationsAlpha =
mLargeScreenShadeInterpolator.getNotificationScrimAlpha(
mPanelExpansionFraction);
@@ -1016,7 +1048,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
final float interpolatedFraction =
BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(
mBouncerHiddenFraction);
- mBehindAlpha = MathUtils.lerp(mDefaultScrimAlpha, mBehindAlpha,
+ mBehindAlpha = MathUtils.lerp(getDefaultScrimAlpha(), mBehindAlpha,
interpolatedFraction);
mBehindTint = ColorUtils.blendARGB(ScrimState.BOUNCER.getBehindTint(),
mBehindTint,
@@ -1106,7 +1138,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
float behindAlpha;
int behindTint = state.getBehindTint();
if (mDarkenWhileDragging) {
- behindAlpha = MathUtils.lerp(mDefaultScrimAlpha, stateBehind,
+ behindAlpha = MathUtils.lerp(getDefaultScrimAlpha(), stateBehind,
interpolatedFract);
} else {
behindAlpha = MathUtils.lerp(0 /* start */, stateBehind,
@@ -1122,7 +1154,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
}
}
if (mQsExpansion > 0) {
- behindAlpha = MathUtils.lerp(behindAlpha, mDefaultScrimAlpha, mQsExpansion);
+ behindAlpha = MathUtils.lerp(behindAlpha, getDefaultScrimAlpha(), mQsExpansion);
float tintProgress = mQsExpansion;
if (mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()) {
// this is case of - on lockscreen - going from expanded QS to bouncer.
@@ -1639,7 +1671,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
pw.println(mTransitionToLockScreenFullShadeNotificationsProgress);
pw.print(" mDefaultScrimAlpha=");
- pw.println(mDefaultScrimAlpha);
+ pw.println(getDefaultScrimAlpha());
pw.print(" mPanelExpansionFraction=");
pw.println(mPanelExpansionFraction);
pw.print(" mExpansionAffectsAlpha=");
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
index 071a57a8b298..2282b9702ad5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimState.java
@@ -28,6 +28,8 @@ import com.android.systemui.scrim.ScrimView;
import com.android.systemui.shade.ui.ShadeColors;
import com.android.systemui.statusbar.notification.stack.StackStateAnimator;
+import java.util.function.Supplier;
+
import kotlinx.coroutines.ExperimentalCoroutinesApi;
/**
@@ -88,7 +90,8 @@ public enum ScrimState {
}
if (Flags.notificationShadeBlur()) {
mBehindTint = Color.TRANSPARENT;
- mNotifTint = ShadeColors.notificationScrim(mScrimBehind.getResources());
+ mNotifTint = ShadeColors.notificationScrim(mScrimBehind.getResources(),
+ mIsBlurSupported.get());
mBehindAlpha = 0.0f;
mNotifAlpha = 0.0f;
mFrontAlpha = 0.0f;
@@ -148,7 +151,9 @@ public enum ScrimState {
@Override
public void prepare(ScrimState previousState) {
if (Flags.bouncerUiRevamp()) {
- if (previousState == SHADE_LOCKED) {
+ // Add unlocked here because scrim state is unlocked when there is an app on top of
+ // the lockscreen and shade is pulled over it.
+ if (previousState == SHADE_LOCKED || previousState == UNLOCKED) {
mBehindAlpha = previousState.getBehindAlpha();
mNotifAlpha = previousState.getNotifAlpha();
} else {
@@ -184,12 +189,23 @@ public enum ScrimState {
@Override
public void prepare(ScrimState previousState) {
if (Flags.notificationShadeBlur()) {
- mBehindTint = ShadeColors.shadePanel(mScrimBehind.getResources());
+ mBehindTint = ShadeColors.shadePanel(mScrimBehind.getResources(),
+ mIsBlurSupported.get());
mBehindAlpha = Color.alpha(mBehindTint) / 255.0f;
- mNotifTint = ShadeColors.notificationScrim(mScrimBehind.getResources());
+ mNotifTint = ShadeColors.notificationScrim(mScrimBehind.getResources(),
+ mIsBlurSupported.get());
mNotifAlpha = Color.alpha(mNotifTint) / 255.0f;
mFrontAlpha = 0.0f;
} else {
+ if (Flags.bouncerUiRevamp()) {
+ // This is only required until shade blur flag is fully enabled, shade is always
+ // opaque when shade blur is not enabled, and mClipQsScrim is always false.
+ mBehindAlpha = 1f;
+ mNotifAlpha = 1f;
+ mFrontAlpha = 0f;
+ mBehindTint = mBackgroundColor;
+ return;
+ }
mBehindAlpha = mClipQsScrim ? 1 : mDefaultScrimAlpha;
mNotifAlpha = 1f;
mFrontAlpha = 0f;
@@ -305,9 +321,11 @@ public enum ScrimState {
mBehindTint = mBackgroundColor;
mBlankScreen = true;
} else if (Flags.notificationShadeBlur()) {
- mBehindTint = ShadeColors.shadePanel(mScrimBehind.getResources());
+ mBehindTint = ShadeColors.shadePanel(mScrimBehind.getResources(),
+ mIsBlurSupported.get());
mBehindAlpha = Color.alpha(mBehindTint) / 255.0f;
- mNotifTint = ShadeColors.notificationScrim(mScrimBehind.getResources());
+ mNotifTint = ShadeColors.notificationScrim(mScrimBehind.getResources(),
+ mIsBlurSupported.get());
mNotifAlpha = Color.alpha(mNotifTint) / 255.0f;
mFrontAlpha = 0.0f;
return;
@@ -400,6 +418,7 @@ public enum ScrimState {
DozeParameters mDozeParameters;
DockManager mDockManager;
boolean mDisplayRequiresBlanking;
+ protected Supplier<Boolean> mIsBlurSupported;
boolean mLaunchingAffordanceWithPreview;
boolean mOccludeAnimationPlaying;
boolean mWakeLockScreenSensorActive;
@@ -413,7 +432,7 @@ public enum ScrimState {
protected float mNotifBlurRadius = 0.0f;
public void init(ScrimView scrimInFront, ScrimView scrimBehind, DozeParameters dozeParameters,
- DockManager dockManager) {
+ DockManager dockManager, Supplier<Boolean> isBlurSupported) {
mBackgroundColor = scrimBehind.getContext().getColor(R.color.shade_scrim_background_dark);
mScrimInFront = scrimInFront;
mScrimBehind = scrimBehind;
@@ -421,6 +440,7 @@ public enum ScrimState {
mDozeParameters = dozeParameters;
mDockManager = dockManager;
mDisplayRequiresBlanking = dozeParameters.getDisplayNeedsBlanking();
+ mIsBlurSupported = isBlurSupported;
}
/** Prepare state for transition. */
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 01de925f3d78..bc297699c41a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -46,7 +46,6 @@ import androidx.annotation.VisibleForTesting;
import com.android.internal.util.LatencyTracker;
import com.android.internal.widget.LockPatternUtils;
-import com.android.keyguard.KeyguardMessageAreaController;
import com.android.keyguard.KeyguardSecurityModel;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
@@ -56,7 +55,6 @@ import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.DejankUtils;
import com.android.systemui.Flags;
import com.android.systemui.animation.back.FlingOnBackAnimationCallback;
-import com.android.systemui.biometrics.domain.interactor.UdfpsOverlayInteractor;
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor;
import com.android.systemui.bouncer.domain.interactor.BouncerInteractor;
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerCallbackInteractor;
@@ -158,7 +156,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
private final ConfigurationController mConfigurationController;
private final NavigationModeController mNavigationModeController;
private final NotificationShadeWindowController mNotificationShadeWindowController;
- private final KeyguardMessageAreaController.Factory mKeyguardMessageAreaFactory;
private final DreamOverlayStateController mDreamOverlayStateController;
@Nullable
private final FoldAodAnimationController mFoldAodAnimationController;
@@ -328,7 +325,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
private float mQsExpansion;
final Set<KeyguardViewManagerCallback> mCallbacks = new HashSet<>();
- private final UdfpsOverlayInteractor mUdfpsOverlayInteractor;
private final ActivityStarter mActivityStarter;
private OnDismissAction mAfterKeyguardGoneAction;
@@ -386,7 +382,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
DockManager dockManager,
NotificationShadeWindowController notificationShadeWindowController,
KeyguardStateController keyguardStateController,
- KeyguardMessageAreaController.Factory keyguardMessageAreaFactory,
Optional<SysUIUnfoldComponent> sysUIUnfoldComponent,
Lazy<ShadeController> shadeController,
LatencyTracker latencyTracker,
@@ -395,7 +390,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
PrimaryBouncerInteractor primaryBouncerInteractor,
BouncerView primaryBouncerView,
AlternateBouncerInteractor alternateBouncerInteractor,
- UdfpsOverlayInteractor udfpsOverlayInteractor,
ActivityStarter activityStarter,
KeyguardTransitionInteractor keyguardTransitionInteractor,
KeyguardDismissTransitionInteractor keyguardDismissTransitionInteractor,
@@ -423,7 +417,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
mKeyguardUpdateManager = keyguardUpdateMonitor;
mStatusBarStateController = sysuiStatusBarStateController;
mDockManager = dockManager;
- mKeyguardMessageAreaFactory = keyguardMessageAreaFactory;
mShadeController = shadeController;
mLatencyTracker = latencyTracker;
mKeyguardSecurityModel = keyguardSecurityModel;
@@ -434,7 +427,6 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
.map(SysUIUnfoldComponent::getFoldAodAnimationController).orElse(null);
mAlternateBouncerInteractor = alternateBouncerInteractor;
mBouncerInteractor = bouncerInteractor;
- mUdfpsOverlayInteractor = udfpsOverlayInteractor;
mActivityStarter = activityStarter;
mKeyguardTransitionInteractor = keyguardTransitionInteractor;
mKeyguardDismissTransitionInteractor = keyguardDismissTransitionInteractor;
@@ -1581,6 +1573,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
&& mPrimaryBouncerView.getDelegate().dispatchBackKeyEventPreIme();
}
+ @Override
public void readyForKeyguardDone() {
mViewMediatorCallback.readyForKeyguardDone();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
index ded964d8a1cc..6c8e1825ea0a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarNotificationActivityStarter.java
@@ -57,6 +57,7 @@ import com.android.systemui.animation.ActivityTransitionAnimator;
import com.android.systemui.assist.AssistManager;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
+import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.power.domain.interactor.PowerInteractor;
import com.android.systemui.settings.UserTracker;
@@ -155,7 +156,7 @@ public class StatusBarNotificationActivityStarter implements NotificationActivit
@Inject
StatusBarNotificationActivityStarter(
@ShadeDisplayAware Context context,
- Handler mainThreadHandler,
+ @Main Handler mainThreadHandler,
@Background Executor uiBgExecutor,
NotificationVisibilityProvider visibilityProvider,
HeadsUpManager headsUpManager,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt
index 76f10b1c2a8b..0d43789e95a8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/UnlockedScreenOffAnimationController.kt
@@ -20,6 +20,7 @@ import com.android.internal.jank.InteractionJankMonitor.CUJ_SCREEN_OFF_SHOW_AOD
import com.android.systemui.DejankUtils
import com.android.systemui.Flags.lightRevealMigration
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.KeyguardViewMediator
import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.shade.ShadeViewController
@@ -71,7 +72,7 @@ constructor(
private val powerManager: PowerManager,
private val shadeLockscreenInteractorLazy: Lazy<ShadeLockscreenInteractor>,
private val panelExpansionInteractorLazy: Lazy<PanelExpansionInteractor>,
- private val handler: Handler = Handler(),
+ @Main private val handler: Handler,
) : WakefulnessLifecycle.Observer, ScreenOffAnimation {
private lateinit var centralSurfaces: CentralSurfaces
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/battery/domain/interactor/BatteryInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/battery/domain/interactor/BatteryInteractor.kt
index 8fdb6ee57587..d53cbabb1d19 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/battery/domain/interactor/BatteryInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/battery/domain/interactor/BatteryInteractor.kt
@@ -29,7 +29,7 @@ class BatteryInteractor @Inject constructor(repo: BatteryRepository) {
val level = repo.level.filterNotNull()
/** Whether the battery has been fully charged */
- val isFull = level.map { it >= 100 }
+ val isFull = level.map { isBatteryFull(it) }
/**
* For the sake of battery views, consider it to be "charging" if plugged in. This allows users
@@ -82,6 +82,8 @@ class BatteryInteractor @Inject constructor(repo: BatteryRepository) {
companion object {
/** Level below which we consider to be critically low */
private const val CRITICAL_LEVEL = 20
+
+ fun isBatteryFull(level: Int) = level >= 100
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/icons/shared/BindableIconsRegistry.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/icons/shared/BindableIconsRegistry.kt
index 8400fb08e147..701dae1594f5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/icons/shared/BindableIconsRegistry.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/icons/shared/BindableIconsRegistry.kt
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.pipeline.icons.shared
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.pipeline.icons.shared.model.BindableIcon
+import com.android.systemui.statusbar.pipeline.mobile.ui.StackedMobileBindableIcon
import com.android.systemui.statusbar.pipeline.satellite.ui.DeviceBasedSatelliteBindableIcon
import javax.inject.Inject
@@ -40,11 +41,12 @@ class BindableIconsRegistryImpl
@Inject
constructor(
/** Bindables go here */
- oemSatellite: DeviceBasedSatelliteBindableIcon
+ oemSatellite: DeviceBasedSatelliteBindableIcon,
+ stackedMobile: StackedMobileBindableIcon,
) : BindableIconsRegistry {
/**
* Adding the injected bindables to this list will get them registered with
* StatusBarIconController
*/
- override val bindableIcons: List<BindableIcon> = listOf(oemSatellite)
+ override val bindableIcons: List<BindableIcon> = listOf(oemSatellite, stackedMobile)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt
index ac3728d9dcaf..c52536d2b312 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/MobileIconsInteractor.kt
@@ -21,6 +21,7 @@ import android.telephony.CarrierConfigManager
import android.telephony.SubscriptionManager
import android.telephony.SubscriptionManager.PROFILE_CLASS_PROVISIONING
import com.android.settingslib.SignalIcon.MobileIconGroup
+import com.android.settingslib.flags.Flags
import com.android.settingslib.mobile.TelephonyIcons
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
@@ -28,6 +29,7 @@ import com.android.systemui.flags.FeatureFlagsClassic
import com.android.systemui.flags.Flags.FILTER_PROVISIONING_NETWORK_SUBSCRIPTIONS
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.logDiffsForTable
+import com.android.systemui.statusbar.core.StatusBarRootModernization
import com.android.systemui.statusbar.pipeline.dagger.MobileSummaryLog
import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository
@@ -39,6 +41,7 @@ import com.android.systemui.util.CarrierConfigTracker
import java.lang.ref.WeakReference
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
@@ -79,6 +82,9 @@ interface MobileIconsInteractor {
*/
val icons: StateFlow<List<MobileIconInteractor>>
+ /** Whether the mobile icons can be stacked vertically. */
+ val isStackable: StateFlow<Boolean>
+
/** True if the active mobile data subscription has data enabled */
val activeDataConnectionHasDataEnabled: StateFlow<Boolean>
@@ -126,6 +132,7 @@ interface MobileIconsInteractor {
fun getMobileConnectionInteractorForSubId(subId: Int): MobileIconInteractor
}
+@OptIn(ExperimentalCoroutinesApi::class)
@Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
@SysUISingleton
class MobileIconsInteractorImpl
@@ -290,6 +297,18 @@ constructor(
}
.stateIn(scope, SharingStarted.WhileSubscribed(), emptyList())
+ override val isStackable =
+ if (Flags.newStatusBarIcons() && StatusBarRootModernization.isEnabled) {
+ icons.flatMapLatest { icons ->
+ combine(icons.map { it.isNonTerrestrial }) {
+ it.size == 2 && it.none { isNonTerrestrial -> isNonTerrestrial }
+ }
+ }
+ } else {
+ flowOf(false)
+ }
+ .stateIn(scope, SharingStarted.WhileSubscribed(), false)
+
/**
* Copied from the old pipeline. We maintain a 2s period of time where we will keep the
* validated bit from the old active network (A) while data is changing to the new one (B).
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt
index 30cc2c5da994..abd543d78687 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileUiAdapter.kt
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.pipeline.mobile.ui
+import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.systemui.CoreStartable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
@@ -27,7 +28,7 @@ import java.io.PrintWriter
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.collectLatest
-import com.android.app.tracing.coroutines.launchTraced as launch
+import kotlinx.coroutines.flow.combine
/**
* This class is intended to provide a context to collect on the
@@ -56,12 +57,23 @@ constructor(
// Start notifying the icon controller of subscriptions
scope.launch {
isCollecting = true
- mobileIconsViewModel.subscriptionIdsFlow.collectLatest {
- logger.logUiAdapterSubIdsSentToIconController(it)
- lastValue = it
- iconController.setNewMobileIconSubIds(it)
- shadeCarrierGroupController?.updateModernMobileIcons(it)
- }
+ combine(
+ mobileIconsViewModel.subscriptionIdsFlow,
+ mobileIconsViewModel.isStackable,
+ ::Pair,
+ )
+ .collectLatest { (subIds, isStackable) ->
+ logger.logUiAdapterSubIdsSentToIconController(subIds, isStackable)
+ lastValue = subIds
+ if (isStackable) {
+ // Passing an empty list to remove pre-existing mobile icons.
+ // StackedMobileBindableIcon will show the stacked icon instead.
+ iconController.setNewMobileIconSubIds(emptyList())
+ } else {
+ iconController.setNewMobileIconSubIds(subIds)
+ }
+ shadeCarrierGroupController?.updateModernMobileIcons(subIds)
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileViewLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileViewLogger.kt
index 2af6795b39c4..4c2849de34ee 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileViewLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/MobileViewLogger.kt
@@ -31,22 +31,24 @@ import javax.inject.Inject
@SysUISingleton
class MobileViewLogger
@Inject
-constructor(
- @MobileViewLog private val buffer: LogBuffer,
- dumpManager: DumpManager,
-) : Dumpable {
+constructor(@MobileViewLog private val buffer: LogBuffer, dumpManager: DumpManager) : Dumpable {
init {
dumpManager.registerNormalDumpable(this)
}
private val collectionStatuses = mutableMapOf<String, Boolean>()
- fun logUiAdapterSubIdsSentToIconController(subs: List<Int>) {
+ fun logUiAdapterSubIdsSentToIconController(subs: List<Int>, isStackable: Boolean) {
buffer.log(
TAG,
LogLevel.INFO,
- { str1 = subs.toString() },
- { "Sub IDs in MobileUiAdapter being sent to icon controller: $str1" },
+ {
+ str1 = subs.toString()
+ bool1 = isStackable
+ },
+ {
+ "Sub IDs in MobileUiAdapter being sent to icon controller: $str1, isStackable=$bool1"
+ },
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/StackedMobileBindableIcon.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/StackedMobileBindableIcon.kt
new file mode 100644
index 000000000000..fa9fa4c1366f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/StackedMobileBindableIcon.kt
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.pipeline.mobile.ui
+
+import android.content.Context
+import com.android.settingslib.flags.Flags
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.statusbar.core.StatusBarRootModernization
+import com.android.systemui.statusbar.pipeline.icons.shared.model.BindableIcon
+import com.android.systemui.statusbar.pipeline.icons.shared.model.ModernStatusBarViewCreator
+import com.android.systemui.statusbar.pipeline.mobile.ui.binder.StackedMobileIconBinder
+import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel
+import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.StackedMobileIconViewModel
+import com.android.systemui.statusbar.pipeline.shared.ui.view.SingleBindableStatusBarComposeIconView
+import javax.inject.Inject
+
+@SysUISingleton
+class StackedMobileBindableIcon
+@Inject
+constructor(
+ context: Context,
+ mobileIconsViewModel: MobileIconsViewModel,
+ viewModelFactory: StackedMobileIconViewModel.Factory,
+) : BindableIcon {
+ override val slot: String =
+ context.getString(com.android.internal.R.string.status_bar_stacked_mobile)
+
+ override val initializer = ModernStatusBarViewCreator { context ->
+ SingleBindableStatusBarComposeIconView.createView(context).also { view ->
+ view.initView(slot) {
+ StackedMobileIconBinder.bind(view, mobileIconsViewModel, viewModelFactory)
+ }
+ }
+ }
+
+ override val shouldBindIcon: Boolean =
+ Flags.newStatusBarIcons() && StatusBarRootModernization.isEnabled
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/StackedMobileIconBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/StackedMobileIconBinder.kt
new file mode 100644
index 000000000000..c9fc53ecadc0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/StackedMobileIconBinder.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.pipeline.mobile.ui.binder
+
+import androidx.compose.material3.LocalContentColor
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.ViewCompositionStrategy
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.repeatOnLifecycle
+import com.android.systemui.lifecycle.rememberViewModel
+import com.android.systemui.lifecycle.repeatWhenAttached
+import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel
+import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.StackedMobileIconViewModel
+import com.android.systemui.statusbar.pipeline.shared.ui.binder.ModernStatusBarViewBinding
+import com.android.systemui.statusbar.pipeline.shared.ui.composable.StackedMobileIcon
+import com.android.systemui.statusbar.pipeline.shared.ui.view.SingleBindableStatusBarComposeIconView
+
+object StackedMobileIconBinder {
+ fun bind(
+ view: SingleBindableStatusBarComposeIconView,
+ mobileIconsViewModel: MobileIconsViewModel,
+ viewModelFactory: StackedMobileIconViewModel.Factory,
+ ): ModernStatusBarViewBinding {
+ return SingleBindableStatusBarComposeIconView.withDefaultBinding(
+ view = view,
+ shouldBeVisible = { mobileIconsViewModel.isStackable.value },
+ ) { _, tint ->
+ view.repeatWhenAttached {
+ repeatOnLifecycle(Lifecycle.State.STARTED) {
+ view.composeView.apply {
+ setViewCompositionStrategy(
+ ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
+ )
+ setContent {
+ val viewModel =
+ rememberViewModel("StackedMobileIconBinder") {
+ viewModelFactory.create()
+ }
+ if (viewModel.isIconVisible) {
+ CompositionLocalProvider(LocalContentColor provides Color(tint())) {
+ StackedMobileIcon(viewModel)
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt
index 22feb7ce77c8..6176a3e9e281 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconsViewModel.kt
@@ -70,15 +70,20 @@ constructor(
}
.stateIn(scope, SharingStarted.WhileSubscribed(), listOf())
- private val firstMobileSubViewModel: StateFlow<MobileIconViewModelCommon?> =
+ val mobileSubViewModels: StateFlow<List<MobileIconViewModelCommon>> =
subscriptionIdsFlow
+ .map { ids -> ids.map { commonViewModelForSub(it) } }
+ .stateIn(scope, SharingStarted.WhileSubscribed(), emptyList())
+
+ private val firstMobileSubViewModel: StateFlow<MobileIconViewModelCommon?> =
+ mobileSubViewModels
.map {
if (it.isEmpty()) {
null
} else {
// Mobile icons get reversed by [StatusBarIconController], so the last element
// in this list will show up visually first.
- commonViewModelForSub(it.last())
+ it.last()
}
}
.stateIn(scope, SharingStarted.WhileSubscribed(), null)
@@ -94,6 +99,8 @@ constructor(
}
.stateIn(scope, SharingStarted.WhileSubscribed(), false)
+ val isStackable: StateFlow<Boolean> = interactor.isStackable
+
init {
scope.launch { subscriptionIdsFlow.collect { invalidateCaches(it) } }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/StackedMobileIconViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/StackedMobileIconViewModel.kt
new file mode 100644
index 000000000000..a2c2a3cd1507
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/StackedMobileIconViewModel.kt
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.pipeline.mobile.ui.viewmodel
+
+import androidx.compose.runtime.derivedStateOf
+import androidx.compose.runtime.getValue
+import com.android.systemui.common.shared.model.Icon
+import com.android.systemui.lifecycle.ExclusiveActivatable
+import com.android.systemui.lifecycle.Hydrator
+import com.android.systemui.statusbar.pipeline.mobile.domain.model.SignalIconModel
+import dagger.assisted.AssistedFactory
+import dagger.assisted.AssistedInject
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.flatMapLatest
+import kotlinx.coroutines.flow.flowOf
+
+@OptIn(ExperimentalCoroutinesApi::class)
+class StackedMobileIconViewModel
+@AssistedInject
+constructor(mobileIconsViewModel: MobileIconsViewModel) : ExclusiveActivatable() {
+ private val hydrator = Hydrator("StackedMobileIconViewModel")
+
+ private val isStackable: Boolean by
+ hydrator.hydratedStateOf(
+ traceName = "isStackable",
+ source = mobileIconsViewModel.isStackable,
+ initialValue = false,
+ )
+
+ private val iconViewModelFlow: StateFlow<List<MobileIconViewModelCommon>> =
+ mobileIconsViewModel.mobileSubViewModels
+
+ val dualSim: DualSim? by
+ hydrator.hydratedStateOf(
+ traceName = "dualSim",
+ source =
+ iconViewModelFlow.flatMapLatest { viewModels ->
+ combine(viewModels.map { it.icon }) { icons ->
+ icons
+ .toList()
+ .filterIsInstance<SignalIconModel.Cellular>()
+ .takeIf { it.size == 2 }
+ ?.let { DualSim(it[0], it[1]) }
+ }
+ },
+ initialValue = null,
+ )
+
+ val networkTypeIcon: Icon.Resource? by
+ hydrator.hydratedStateOf(
+ traceName = "networkTypeIcon",
+ source =
+ iconViewModelFlow.flatMapLatest { viewModels ->
+ viewModels.firstOrNull()?.networkTypeIcon ?: flowOf(null)
+ },
+ initialValue = null,
+ )
+
+ val isIconVisible: Boolean by derivedStateOf { isStackable && dualSim != null }
+
+ override suspend fun onActivated(): Nothing {
+ hydrator.activate()
+ }
+
+ @AssistedFactory
+ interface Factory {
+ fun create(): StackedMobileIconViewModel
+ }
+
+ data class DualSim(
+ val primary: SignalIconModel.Cellular,
+ val secondary: SignalIconModel.Cellular,
+ )
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt
index 9c9d41e975e3..cd320a12d577 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/binder/HomeStatusBarViewBinder.kt
@@ -93,10 +93,11 @@ constructor(
// CollapsedStatusBarFragment doesn't need this
if (StatusBarRootModernization.isEnabled) {
- primaryChipView.isVisible = false
- systemInfoView.isVisible = false
- clockView.isVisible = false
- notificationIconsArea.isVisible = false
+ // GONE because this shouldn't take space in the layout
+ primaryChipView.hideInitially(state = View.GONE)
+ systemInfoView.hideInitially()
+ clockView.hideInitially()
+ notificationIconsArea.hideInitially()
}
view.repeatWhenAttached {
@@ -365,6 +366,17 @@ constructor(
}
}
+ /**
+ * Hide the view for initialization, but skip if it's already hidden and does not cancel
+ * animations.
+ */
+ private fun View.hideInitially(state: Int = View.INVISIBLE) {
+ if (visibility == View.INVISIBLE || visibility == View.GONE) {
+ return
+ }
+ visibility = state
+ }
+
// See CollapsedStatusBarFragment#hide.
private fun View.hide(state: Int = View.INVISIBLE, shouldAnimateChange: Boolean) {
if (visibility == View.INVISIBLE || visibility == View.GONE) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StackedMobileIcon.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StackedMobileIcon.kt
new file mode 100644
index 000000000000..465a43fbfb9e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StackedMobileIcon.kt
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.pipeline.shared.ui.composable
+
+import androidx.compose.foundation.Canvas
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.LocalContentColor
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.geometry.CornerRadius
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.drawscope.DrawScope
+import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.android.compose.modifiers.height
+import com.android.compose.modifiers.width
+import com.android.systemui.common.ui.compose.Icon
+import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.StackedMobileIconViewModel
+import com.android.systemui.statusbar.pipeline.shared.ui.composable.StackedMobileIconDimensions.BarBaseHeightFiveBarsSp
+import com.android.systemui.statusbar.pipeline.shared.ui.composable.StackedMobileIconDimensions.BarBaseHeightFourBarsSp
+import com.android.systemui.statusbar.pipeline.shared.ui.composable.StackedMobileIconDimensions.BarsLevelIncrementSp
+import com.android.systemui.statusbar.pipeline.shared.ui.composable.StackedMobileIconDimensions.BarsVerticalPaddingSp
+import com.android.systemui.statusbar.pipeline.shared.ui.composable.StackedMobileIconDimensions.HorizontalPaddingFiveBarsSp
+import com.android.systemui.statusbar.pipeline.shared.ui.composable.StackedMobileIconDimensions.HorizontalPaddingFourBarsSp
+import com.android.systemui.statusbar.pipeline.shared.ui.composable.StackedMobileIconDimensions.IconHeightSp
+import com.android.systemui.statusbar.pipeline.shared.ui.composable.StackedMobileIconDimensions.IconWidthFiveBarsSp
+import com.android.systemui.statusbar.pipeline.shared.ui.composable.StackedMobileIconDimensions.IconWidthFourBarsSp
+import com.android.systemui.statusbar.pipeline.shared.ui.composable.StackedMobileIconDimensions.SecondaryBarHeightSp
+import kotlin.math.max
+
+/**
+ * The dual sim icon that shows both connections stacked vertically with the active connection on
+ * top
+ */
+@Composable
+fun StackedMobileIcon(viewModel: StackedMobileIconViewModel, modifier: Modifier = Modifier) {
+ val dualSim = viewModel.dualSim ?: return
+
+ val contentColor = LocalContentColor.current
+
+ Row(verticalAlignment = Alignment.CenterVertically, modifier = modifier) {
+ viewModel.networkTypeIcon?.let {
+ Icon(
+ it,
+ tint = contentColor,
+ modifier =
+ Modifier.height { IconHeightSp.roundToPx() }.padding(start = 1.dp, end = 2.dp),
+ )
+ }
+
+ StackedMobileIcon(dualSim, contentColor)
+ }
+}
+
+@Composable
+private fun StackedMobileIcon(
+ viewModel: StackedMobileIconViewModel.DualSim,
+ color: Color,
+ modifier: Modifier = Modifier,
+) {
+ val maxNumberOfLevels =
+ max(viewModel.primary.numberOfLevels, viewModel.secondary.numberOfLevels)
+ val dimensions = if (maxNumberOfLevels == 6) FiveBarsDimensions else FourBarsDimensions
+ val iconSize =
+ with(LocalDensity.current) { dimensions.totalWidth.toDp() to IconHeightSp.toDp() }
+
+ Canvas(modifier.size(width = iconSize.first, height = iconSize.second)) {
+ val verticalPaddingPx = BarsVerticalPaddingSp.roundToPx()
+ val horizontalPaddingPx = dimensions.barsHorizontalPadding.roundToPx()
+ val totalPaddingWidthPx = horizontalPaddingPx * (maxNumberOfLevels - 1)
+
+ val barWidthPx = (size.width - totalPaddingWidthPx) / maxNumberOfLevels
+ val dotHeightPx = SecondaryBarHeightSp.toPx()
+ val baseBarHeightPx = dimensions.barBaseHeight.toPx()
+
+ var xOffsetPx = 0f
+ for (bar in 1..maxNumberOfLevels) {
+ // Bottom dots representing secondary sim
+ val dotYOffsetPx = size.height - dotHeightPx
+ if (bar <= viewModel.secondary.numberOfLevels) {
+ drawMobileIconBar(
+ level = viewModel.secondary.level,
+ bar = bar,
+ topLeft = Offset(xOffsetPx, dotYOffsetPx),
+ size = Size(barWidthPx, dotHeightPx),
+ activeColor = color,
+ )
+ }
+
+ // Top bars representing primary sim
+ if (bar <= viewModel.primary.numberOfLevels) {
+ val barHeightPx = baseBarHeightPx + (BarsLevelIncrementSp.toPx() * (bar - 1))
+ val barYOffsetPx = dotYOffsetPx - verticalPaddingPx - barHeightPx
+ drawMobileIconBar(
+ level = viewModel.primary.level,
+ bar = bar,
+ topLeft = Offset(xOffsetPx, barYOffsetPx),
+ size = Size(barWidthPx, barHeightPx),
+ activeColor = color,
+ )
+ }
+
+ xOffsetPx += barWidthPx + horizontalPaddingPx
+ }
+ }
+}
+
+private fun DrawScope.drawMobileIconBar(
+ level: Int,
+ bar: Int,
+ topLeft: Offset,
+ size: Size,
+ activeColor: Color,
+ inactiveColor: Color = activeColor.copy(alpha = .3f),
+ cornerRadius: CornerRadius = CornerRadius(size.width / 2),
+) {
+ drawRoundRect(
+ color = if (level >= bar) activeColor else inactiveColor,
+ topLeft = topLeft,
+ size = size,
+ cornerRadius = cornerRadius,
+ )
+}
+
+private abstract class BarsDependentDimensions(
+ val totalWidth: TextUnit,
+ val barsHorizontalPadding: TextUnit,
+ val barBaseHeight: TextUnit,
+)
+
+private object FourBarsDimensions :
+ BarsDependentDimensions(
+ IconWidthFourBarsSp,
+ HorizontalPaddingFourBarsSp,
+ BarBaseHeightFourBarsSp,
+ )
+
+private object FiveBarsDimensions :
+ BarsDependentDimensions(
+ IconWidthFiveBarsSp,
+ HorizontalPaddingFiveBarsSp,
+ BarBaseHeightFiveBarsSp,
+ )
+
+private object StackedMobileIconDimensions {
+ // Common dimensions
+ val IconHeightSp = 12.sp
+ val BarsVerticalPaddingSp = 1.5.sp
+ val BarsLevelIncrementSp = 1.sp
+ val SecondaryBarHeightSp = 3.sp
+
+ // Dimensions dependant on the number of total bars
+ val IconWidthFiveBarsSp = 18.5.sp
+ val IconWidthFourBarsSp = 16.sp
+ val HorizontalPaddingFiveBarsSp = 1.5.sp
+ val HorizontalPaddingFourBarsSp = 2.sp
+ val BarBaseHeightFiveBarsSp = 3.5.sp
+ val BarBaseHeightFourBarsSp = 4.5.sp
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt
index c34fa464cc3a..a961713230c8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt
@@ -41,12 +41,15 @@ import com.android.systemui.plugins.DarkIconDispatcher
import com.android.systemui.res.R
import com.android.systemui.statusbar.chips.ui.compose.OngoingActivityChips
import com.android.systemui.statusbar.core.NewStatusBarIcons
+import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
import com.android.systemui.statusbar.core.StatusBarRootModernization
import com.android.systemui.statusbar.data.repository.DarkIconDispatcherStore
import com.android.systemui.statusbar.events.domain.interactor.SystemStatusEventAnimationInteractor
import com.android.systemui.statusbar.featurepods.popups.StatusBarPopupChips
import com.android.systemui.statusbar.featurepods.popups.ui.compose.StatusBarPopupChipsContainer
+import com.android.systemui.statusbar.notification.icon.ui.viewbinder.ConnectedDisplaysStatusBarNotificationIconViewStore
import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerStatusBarViewBinder
+import com.android.systemui.statusbar.notification.icon.ui.viewbinder.NotificationIconContainerViewBinder
import com.android.systemui.statusbar.phone.NotificationIconContainer
import com.android.systemui.statusbar.phone.PhoneStatusBarView
import com.android.systemui.statusbar.phone.StatusBarLocation
@@ -72,6 +75,7 @@ constructor(
private val homeStatusBarViewModelFactory: HomeStatusBarViewModelFactory,
private val homeStatusBarViewBinder: HomeStatusBarViewBinder,
private val notificationIconsBinder: NotificationIconContainerStatusBarViewBinder,
+ private val iconViewStoreFactory: ConnectedDisplaysStatusBarNotificationIconViewStore.Factory,
private val darkIconManagerFactory: DarkIconManager.Factory,
private val iconController: StatusBarIconController,
private val ongoingCallController: OngoingCallController,
@@ -89,6 +93,7 @@ constructor(
statusBarViewModelFactory = homeStatusBarViewModelFactory,
statusBarViewBinder = homeStatusBarViewBinder,
notificationIconsBinder = notificationIconsBinder,
+ iconViewStoreFactory = iconViewStoreFactory,
darkIconManagerFactory = darkIconManagerFactory,
iconController = iconController,
ongoingCallController = ongoingCallController,
@@ -119,6 +124,7 @@ fun StatusBarRoot(
statusBarViewModelFactory: HomeStatusBarViewModelFactory,
statusBarViewBinder: HomeStatusBarViewBinder,
notificationIconsBinder: NotificationIconContainerStatusBarViewBinder,
+ iconViewStoreFactory: ConnectedDisplaysStatusBarNotificationIconViewStore.Factory,
darkIconManagerFactory: DarkIconManager.Factory,
iconController: StatusBarIconController,
ongoingCallController: OngoingCallController,
@@ -129,6 +135,14 @@ fun StatusBarRoot(
val displayId = parent.context.displayId
val statusBarViewModel =
rememberViewModel("HomeStatusBar") { statusBarViewModelFactory.create(displayId) }
+ val iconViewStore: NotificationIconContainerViewBinder.IconViewStore? =
+ if (StatusBarConnectedDisplays.isEnabled) {
+ rememberViewModel("HomeStatusBar.IconViewStore[$displayId]") {
+ iconViewStoreFactory.create(displayId)
+ }
+ } else {
+ null
+ }
Box(Modifier.fillMaxSize()) {
// TODO(b/364360986): remove this before rolling the flag forward
@@ -174,7 +188,10 @@ fun StatusBarRoot(
val chips by
statusBarViewModel.ongoingActivityChips
.collectAsStateWithLifecycle()
- OngoingActivityChips(chips = chips)
+ OngoingActivityChips(
+ chips = chips,
+ iconViewStore = iconViewStore,
+ )
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/view/SingleBindableStatusBarComposeIconView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/view/SingleBindableStatusBarComposeIconView.kt
new file mode 100644
index 000000000000..8076040564fb
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/view/SingleBindableStatusBarComposeIconView.kt
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.pipeline.shared.ui.view
+
+import android.content.Context
+import android.graphics.Color
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import androidx.compose.ui.platform.ComposeView
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
+import com.android.app.tracing.coroutines.launchTraced as launch
+import com.android.systemui.lifecycle.repeatWhenAttached
+import com.android.systemui.res.R
+import com.android.systemui.statusbar.StatusBarIconView
+import com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN
+import com.android.systemui.statusbar.pipeline.shared.ui.binder.ModernStatusBarViewBinding
+import com.android.systemui.statusbar.pipeline.shared.ui.binder.ModernStatusBarViewVisibilityHelper
+import kotlinx.coroutines.awaitCancellation
+import kotlinx.coroutines.flow.MutableStateFlow
+
+/** Compose view that is bound to bindable_status_bar_compose_icon.xml */
+class SingleBindableStatusBarComposeIconView(context: Context, attrs: AttributeSet?) :
+ ModernStatusBarView(context, attrs) {
+
+ internal lateinit var composeView: ComposeView
+ internal lateinit var dotView: StatusBarIconView
+
+ override fun toString(): String {
+ return "SingleBindableStatusBarComposeIcon(" +
+ "slot='$slot', " +
+ "isCollecting=${binding.isCollecting()}, " +
+ "visibleState=${StatusBarIconView.getVisibleStateString(visibleState)}); " +
+ "viewString=${super.toString()}"
+ }
+
+ override fun initView(slot: String, bindingCreator: () -> ModernStatusBarViewBinding) {
+ super.initView(slot, bindingCreator)
+
+ composeView = requireViewById(R.id.compose_view)
+ dotView = requireViewById(R.id.status_bar_dot)
+ }
+
+ companion object {
+ fun createView(context: Context): SingleBindableStatusBarComposeIconView {
+ return LayoutInflater.from(context)
+ .inflate(R.layout.bindable_status_bar_compose_icon, null)
+ as SingleBindableStatusBarComposeIconView
+ }
+
+ /**
+ * Using a given binding [block], create the necessary scaffolding to handle the general
+ * case of a single status bar icon. This includes eliding into a dot view when there is not
+ * enough space, and handling tint.
+ *
+ * [block] should be a simple [launch] call that handles updating the single icon view with
+ * its new view. Currently there is no simple way to e.g., extend to handle multiple tints
+ * for dual-layered icons, and any more complex logic should probably find a way to return
+ * its own version of [ModernStatusBarViewBinding].
+ */
+ fun withDefaultBinding(
+ view: SingleBindableStatusBarComposeIconView,
+ shouldBeVisible: () -> Boolean,
+ block: suspend LifecycleOwner.(View, () -> Int) -> Unit,
+ ): ModernStatusBarViewBinding {
+ @StatusBarIconView.VisibleState
+ val visibilityState: MutableStateFlow<Int> = MutableStateFlow(STATE_HIDDEN)
+
+ val iconTint: MutableStateFlow<Int> = MutableStateFlow(Color.WHITE)
+ val decorTint: MutableStateFlow<Int> = MutableStateFlow(Color.WHITE)
+
+ var isCollecting: Boolean = false
+
+ view.repeatWhenAttached {
+ // Child binding
+ block(view) { iconTint.value }
+
+ lifecycleScope.launch {
+ repeatOnLifecycle(Lifecycle.State.STARTED) {
+ // isVisible controls the visibility state of the outer group, and thus it
+ // needs to run in the CREATED lifecycle so it can continue to watch while
+ // invisible. See (b/291031862) for details
+ launch {
+ visibilityState.collect { visibilityState ->
+ // for b/296864006, we can not hide all the child views if
+ // visibilityState is STATE_HIDDEN. Because hiding all child views
+ // would cause the getWidth() of this view return 0, and that would
+ // cause the translation calculation fails in StatusIconContainer.
+ // Therefore, like class MobileIconBinder, instead of set the child
+ // views visibility to View.GONE, we set their visibility to
+ // View.INVISIBLE to make them invisible but keep the width.
+ ModernStatusBarViewVisibilityHelper.setVisibilityState(
+ visibilityState,
+ view.composeView,
+ view.dotView,
+ )
+ }
+ }
+
+ launch { iconTint.collect { tint -> view.dotView.setDecorColor(tint) } }
+
+ launch {
+ decorTint.collect { decorTint -> view.dotView.setDecorColor(decorTint) }
+ }
+
+ try {
+ awaitCancellation()
+ } finally {
+ isCollecting = false
+ }
+ }
+ }
+ }
+
+ return object : ModernStatusBarViewBinding {
+ override fun getShouldIconBeVisible(): Boolean {
+ return shouldBeVisible()
+ }
+
+ override fun onVisibilityStateChanged(state: Int) {
+ visibilityState.value = state
+ }
+
+ override fun onIconTintChanged(newTint: Int, contrastTint: Int) {
+ iconTint.value = newTint
+ }
+
+ override fun onDecorTintChanged(newTint: Int) {
+ decorTint.value = newTint
+ }
+
+ override fun isCollecting(): Boolean {
+ return isCollecting
+ }
+ }
+ }
+ }
+}
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 ccd75602aa13..dd742ff8f1cc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
@@ -55,6 +55,7 @@ import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.res.R;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.core.StatusBarRootModernization;
import com.android.systemui.statusbar.phone.ui.StatusBarIconController;
import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener;
import com.android.systemui.tuner.TunerService;
@@ -216,7 +217,9 @@ public class Clock extends TextView implements
// Make sure we update to the current time
updateClock();
- updateClockVisibility();
+ if (!StatusBarRootModernization.isEnabled()) {
+ updateClockVisibility();
+ }
updateShowSeconds();
}
@@ -275,19 +278,25 @@ public class Clock extends TextView implements
@Override
public void setVisibility(int visibility) {
- if (visibility == View.VISIBLE && !shouldBeVisible()) {
- return;
+ if (!StatusBarRootModernization.isEnabled()) {
+ if (visibility == View.VISIBLE && !shouldBeVisible()) {
+ return;
+ }
}
super.setVisibility(visibility);
}
- public void setClockVisibleByUser(boolean visible) {
+ private void setClockVisibleByUser(boolean visible) {
+ StatusBarRootModernization.assertInLegacyMode();
+
mClockVisibleByUser = visible;
updateClockVisibility();
}
- public void setClockVisibilityByPolicy(boolean visible) {
+ private void setClockVisibilityByPolicy(boolean visible) {
+ StatusBarRootModernization.assertInLegacyMode();
+
mClockVisibleByPolicy = visible;
updateClockVisibility();
}
@@ -297,6 +306,8 @@ public class Clock extends TextView implements
}
private void updateClockVisibility() {
+ StatusBarRootModernization.assertInLegacyMode();
+
boolean visible = shouldBeVisible();
int visibility = visible ? View.VISIBLE : View.GONE;
super.setVisibility(visibility);
@@ -346,15 +357,23 @@ public class Clock extends TextView implements
if (CLOCK_SECONDS.equals(key)) {
mShowSeconds = TunerService.parseIntegerSwitch(newValue, false);
updateShowSeconds();
- } else if (StatusBarIconController.ICON_HIDE_LIST.equals(key)) {
- setClockVisibleByUser(!StatusBarIconController.getIconHideList(getContext(), newValue)
- .contains("clock"));
- updateClockVisibility();
+ } else if (!StatusBarRootModernization.isEnabled()) {
+ if (StatusBarIconController.ICON_HIDE_LIST.equals(key)) {
+ setClockVisibleByUser(
+ !StatusBarIconController
+ .getIconHideList(getContext(), newValue)
+ .contains("clock"));
+ updateClockVisibility();
+ }
}
}
@Override
public void disable(int displayId, int state1, int state2, boolean animate) {
+ if (StatusBarRootModernization.isEnabled()) {
+ return;
+ }
+
if (displayId != getDisplay().getDisplayId()) {
return;
}
diff --git a/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java b/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java
index 70774f13fe6b..c43e7637998c 100644
--- a/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java
+++ b/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java
@@ -65,15 +65,6 @@ public abstract class GlobalConcurrencyModule {
}
/**
- * @deprecated Use @Main Handler.
- */
- @Deprecated
- @Provides
- public static Handler provideHandler() {
- return new Handler();
- }
-
- /**
* Provide an Executor specifically for running UI operations on a separate thread.
*
* Keep submitted runnables short and to the point, just as with any other UI code.
diff --git a/packages/SystemUI/src/com/android/systemui/util/concurrency/SysUIConcurrencyModule.kt b/packages/SystemUI/src/com/android/systemui/util/concurrency/SysUIConcurrencyModule.kt
index a7abb6b5f1d3..5b5f85c12efc 100644
--- a/packages/SystemUI/src/com/android/systemui/util/concurrency/SysUIConcurrencyModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/util/concurrency/SysUIConcurrencyModule.kt
@@ -53,6 +53,14 @@ object SysUIConcurrencyModule {
private const val NOTIFICATION_INFLATION_SLOW_DISPATCH_THRESHOLD = 1000L
private const val NOTIFICATION_INFLATION_SLOW_DELIVERY_THRESHOLD = 1000L
+ /**
+ * Choreographer instance for the main thread.
+ * TODO(b/395887935): Lets move this to @Main and provide thread-local references
+ */
+ @Provides
+ @SysUISingleton
+ fun providesChoreographer(): Choreographer = Choreographer.getInstance()
+
/** Background Looper */
@Provides
@SysUISingleton
@@ -99,10 +107,7 @@ object SysUIConcurrencyModule {
@Provides
@SysUISingleton
@NotifInflation
- fun provideNotifInflationLooper(@Background bgLooper: Looper): Looper {
- if (!Flags.dedicatedNotifInflationThread()) {
- return bgLooper
- }
+ fun provideNotifInflationLooper(): Looper {
val thread = HandlerThread("NotifInflation", Process.THREAD_PRIORITY_BACKGROUND)
thread.start()
val looper = thread.getLooper()
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogModule.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogModule.kt
index 025e269b70b6..7b08317d5265 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/dagger/module/VolumeDialogModule.kt
@@ -18,8 +18,13 @@ package com.android.systemui.volume.dialog.dagger.module
import com.android.systemui.volume.dialog.ringer.data.repository.VolumeDialogRingerFeedbackRepository
import com.android.systemui.volume.dialog.ringer.data.repository.VolumeDialogRingerFeedbackRepositoryImpl
+import com.android.systemui.volume.dialog.ringer.ui.binder.VolumeDialogRingerViewBinder
+import com.android.systemui.volume.dialog.settings.ui.binder.VolumeDialogSettingsButtonViewBinder
+import com.android.systemui.volume.dialog.sliders.ui.VolumeDialogSlidersViewBinder
+import com.android.systemui.volume.dialog.ui.binder.ViewBinder
import dagger.Binds
import dagger.Module
+import dagger.Provides
/** Dagger module for volume dialog code in the volume package */
@Module
@@ -29,4 +34,14 @@ interface VolumeDialogModule {
fun bindVolumeDialogRingerFeedbackRepository(
ringerFeedbackRepository: VolumeDialogRingerFeedbackRepositoryImpl
): VolumeDialogRingerFeedbackRepository
+
+ companion object {
+
+ @Provides
+ fun provideViewBinders(
+ slidersViewBinder: VolumeDialogSlidersViewBinder,
+ ringerViewBinder: VolumeDialogRingerViewBinder,
+ settingsButtonViewBinder: VolumeDialogSettingsButtonViewBinder,
+ ): List<ViewBinder> = listOf(slidersViewBinder, ringerViewBinder, settingsButtonViewBinder)
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt
index eb2b2f68a6e2..ef750574830a 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt
@@ -39,6 +39,7 @@ import com.android.systemui.volume.dialog.ringer.ui.viewmodel.RingerDrawerState
import com.android.systemui.volume.dialog.ringer.ui.viewmodel.RingerViewModel
import com.android.systemui.volume.dialog.ringer.ui.viewmodel.RingerViewModelState
import com.android.systemui.volume.dialog.ringer.ui.viewmodel.VolumeDialogRingerDrawerViewModel
+import com.android.systemui.volume.dialog.ui.binder.ViewBinder
import com.android.systemui.volume.dialog.ui.utils.suspendAnimate
import com.android.systemui.volume.dialog.ui.viewmodel.VolumeDialogViewModel
import javax.inject.Inject
@@ -60,7 +61,7 @@ class VolumeDialogRingerViewBinder
constructor(
private val viewModel: VolumeDialogRingerDrawerViewModel,
private val dialogViewModel: VolumeDialogViewModel,
-) {
+) : ViewBinder {
private val roundnessSpringForce =
SpringForce(1F).apply {
stiffness = 800F
@@ -73,10 +74,11 @@ constructor(
}
private val rgbEvaluator = ArgbEvaluator()
- fun CoroutineScope.bind(view: View) {
+ override fun CoroutineScope.bind(view: View) {
val volumeDialogBackgroundView = view.requireViewById<View>(R.id.volume_dialog_background)
val ringerBackgroundView = view.requireViewById<View>(R.id.ringer_buttons_background)
val drawerContainer = view.requireViewById<MotionLayout>(R.id.volume_ringer_drawer)
+
val unselectedButtonUiModel = RingerButtonUiModel.getUnselectedButton(view.context)
val selectedButtonUiModel = RingerButtonUiModel.getSelectedButton(view.context)
val volumeDialogBgSmallRadius =
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/binder/VolumeDialogSettingsButtonViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/binder/VolumeDialogSettingsButtonViewBinder.kt
index a330685fc6bb..54f04e274c03 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/binder/VolumeDialogSettingsButtonViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/binder/VolumeDialogSettingsButtonViewBinder.kt
@@ -21,6 +21,7 @@ import android.widget.ImageButton
import com.android.systemui.res.R
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogScope
import com.android.systemui.volume.dialog.settings.ui.viewmodel.VolumeDialogSettingsButtonViewModel
+import com.android.systemui.volume.dialog.ui.binder.ViewBinder
import com.android.systemui.volume.dialog.ui.viewmodel.VolumeDialogViewModel
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
@@ -34,9 +35,9 @@ class VolumeDialogSettingsButtonViewBinder
constructor(
private val viewModel: VolumeDialogSettingsButtonViewModel,
private val dialogViewModel: VolumeDialogViewModel,
-) {
+) : ViewBinder {
- fun CoroutineScope.bind(view: View) {
+ override fun CoroutineScope.bind(view: View) {
val button = view.requireViewById<ImageButton>(R.id.volume_dialog_settings)
launch { dialogViewModel.addTouchableBounds(button) }
viewModel.isVisible
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSlidersViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSlidersViewBinder.kt
index 7f58c835094f..0d970e5117c2 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSlidersViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSlidersViewBinder.kt
@@ -25,6 +25,7 @@ import com.android.systemui.res.R
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogScope
import com.android.systemui.volume.dialog.sliders.dagger.VolumeDialogSliderComponent
import com.android.systemui.volume.dialog.sliders.ui.viewmodel.VolumeDialogSlidersViewModel
+import com.android.systemui.volume.dialog.ui.binder.ViewBinder
import com.android.systemui.volume.dialog.ui.viewmodel.VolumeDialogViewModel
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
@@ -38,16 +39,16 @@ class VolumeDialogSlidersViewBinder
constructor(
private val viewModel: VolumeDialogSlidersViewModel,
private val dialogViewModel: VolumeDialogViewModel,
-) {
+) : ViewBinder {
- fun CoroutineScope.bind(view: View) {
+ override fun CoroutineScope.bind(view: View) {
val floatingSlidersContainer: ViewGroup =
view.requireViewById(R.id.volume_dialog_floating_sliders_container)
val mainSliderContainer: View =
view.requireViewById(R.id.volume_dialog_main_slider_container)
val background: View = view.requireViewById(R.id.volume_dialog_background)
- val settingsButton: View = view.requireViewById(R.id.volume_dialog_settings)
- val ringerDrawer: View = view.requireViewById(R.id.volume_ringer_drawer)
+ val bottomSection: View = view.requireViewById(R.id.volume_dialog_bottom_section_container)
+ val topSection: View = view.requireViewById(R.id.volume_dialog_top_section_container)
launch { dialogViewModel.addTouchableBounds(mainSliderContainer, floatingSlidersContainer) }
viewModel.sliders
@@ -55,7 +56,7 @@ constructor(
bindSlider(
uiModel.sliderComponent,
mainSliderContainer,
- arrayOf(mainSliderContainer, background, settingsButton, ringerDrawer),
+ arrayOf(mainSliderContainer, background, bottomSection, topSection),
)
val floatingSliderViewBinders = uiModel.floatingSliderComponent
diff --git a/packages/SystemUI/src/com/android/systemui/common/shared/colors/ShadeColors.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/ViewBinder.kt
index 70ace6a6d038..4d1af0d71108 100644
--- a/packages/SystemUI/src/com/android/systemui/common/shared/colors/ShadeColors.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/ViewBinder.kt
@@ -14,19 +14,12 @@
* limitations under the License.
*/
-package com.android.systemui.common.shared.colors
+package com.android.systemui.volume.dialog.ui.binder
-import android.content.res.Resources
-import android.graphics.Color
-import com.android.internal.graphics.ColorUtils
-import com.android.systemui.res.R
+import android.view.View
+import kotlinx.coroutines.CoroutineScope
-object ShadeColors {
- @JvmStatic
- fun Resources.shadeBasePanel(): Int {
- val layerAbove =
- ColorUtils.setAlphaComponent(getColor(R.color.shade_panel), (0.4f * 255).toInt())
- val layerBelow = ColorUtils.setAlphaComponent(Color.WHITE, (0.1f * 255).toInt())
- return ColorUtils.compositeColors(layerAbove, layerBelow)
- }
+interface ViewBinder {
+
+ fun CoroutineScope.bind(view: View)
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt
index 7cc4bcc4e11c..98042d5022f9 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinder.kt
@@ -17,28 +17,28 @@
package com.android.systemui.volume.dialog.ui.binder
import android.app.Dialog
-import android.content.res.Resources
import android.view.View
import android.view.ViewTreeObserver
import android.view.WindowInsets
+import androidx.compose.ui.util.lerp
import androidx.constraintlayout.motion.widget.MotionLayout
import androidx.core.view.updatePadding
+import androidx.dynamicanimation.animation.DynamicAnimation
+import androidx.dynamicanimation.animation.FloatValueHolder
+import androidx.dynamicanimation.animation.SpringAnimation
+import androidx.dynamicanimation.animation.SpringForce
import com.android.internal.view.RotationPolicy
import com.android.systemui.common.ui.view.onApplyWindowInsets
-import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.res.R
import com.android.systemui.util.kotlin.awaitCancellationThenDispose
-import com.android.systemui.volume.SystemUIInterpolators
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogScope
-import com.android.systemui.volume.dialog.ringer.ui.binder.VolumeDialogRingerViewBinder
-import com.android.systemui.volume.dialog.settings.ui.binder.VolumeDialogSettingsButtonViewBinder
import com.android.systemui.volume.dialog.shared.model.VolumeDialogVisibilityModel
-import com.android.systemui.volume.dialog.sliders.ui.VolumeDialogSlidersViewBinder
import com.android.systemui.volume.dialog.ui.utils.JankListenerFactory
import com.android.systemui.volume.dialog.ui.utils.suspendAnimate
import com.android.systemui.volume.dialog.ui.viewmodel.VolumeDialogViewModel
import com.android.systemui.volume.dialog.utils.VolumeTracer
import javax.inject.Inject
+import kotlin.math.ceil
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
@@ -50,26 +50,25 @@ import kotlinx.coroutines.flow.scan
import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine
+private const val SPRING_STIFFNESS = 700f
+private const val SPRING_DAMPING_RATIO = 0.9f
+
+private const val FRACTION_HIDE = 0f
+private const val FRACTION_SHOW = 1f
+private const val ANIMATION_MINIMUM_VISIBLE_CHANGE = 0.01f
+
/** Binds the root view of the Volume Dialog. */
@OptIn(ExperimentalCoroutinesApi::class)
@VolumeDialogScope
class VolumeDialogViewBinder
@Inject
constructor(
- @Main resources: Resources,
private val viewModel: VolumeDialogViewModel,
private val jankListenerFactory: JankListenerFactory,
private val tracer: VolumeTracer,
- private val volumeDialogRingerViewBinder: VolumeDialogRingerViewBinder,
- private val slidersViewBinder: VolumeDialogSlidersViewBinder,
- private val settingsButtonViewBinder: VolumeDialogSettingsButtonViewBinder,
+ private val viewBinders: List<@JvmSuppressWildcards ViewBinder>,
) {
- private val dialogShowAnimationDurationMs =
- resources.getInteger(R.integer.config_dialogShowAnimationDurationMs).toLong()
- private val dialogHideAnimationDurationMs =
- resources.getInteger(R.integer.config_dialogHideAnimationDurationMs).toLong()
-
fun CoroutineScope.bind(dialog: Dialog) {
val insets: MutableStateFlow<WindowInsets> =
MutableStateFlow(WindowInsets.Builder().build())
@@ -105,9 +104,9 @@ constructor(
.awaitCancellationThenDispose()
}
- with(volumeDialogRingerViewBinder) { bind(root) }
- with(slidersViewBinder) { bind(root) }
- with(settingsButtonViewBinder) { bind(root) }
+ for (viewBinder in viewBinders) {
+ with(viewBinder) { bind(root) }
+ }
}
private fun CoroutineScope.animateVisibility(
@@ -115,22 +114,35 @@ constructor(
dialog: Dialog,
visibilityModel: Flow<VolumeDialogVisibilityModel>,
) {
+ view.applyAnimationProgress(FRACTION_HIDE)
+ val animationValueHolder = FloatValueHolder(FRACTION_HIDE)
+ val animation: SpringAnimation =
+ SpringAnimation(animationValueHolder)
+ .setSpring(
+ SpringForce()
+ .setStiffness(SPRING_STIFFNESS)
+ .setDampingRatio(SPRING_DAMPING_RATIO)
+ )
+ .setMinimumVisibleChange(ANIMATION_MINIMUM_VISIBLE_CHANGE)
+ .addUpdateListener { _, value, _ -> view.applyAnimationProgress(value) }
+ var junkListener: DynamicAnimation.OnAnimationUpdateListener? = null
+
visibilityModel
.mapLatest {
when (it) {
is VolumeDialogVisibilityModel.Visible -> {
tracer.traceVisibilityEnd(it)
- view.animateShow(
- duration = dialogShowAnimationDurationMs,
- translationX = calculateTranslationX(view),
- )
+ junkListener?.let(animation::removeUpdateListener)
+ junkListener =
+ jankListenerFactory.show(view).also(animation::addUpdateListener)
+ animation.suspendAnimate(FRACTION_SHOW)
}
is VolumeDialogVisibilityModel.Dismissed -> {
tracer.traceVisibilityEnd(it)
- view.animateHide(
- duration = dialogHideAnimationDurationMs,
- translationX = calculateTranslationX(view),
- )
+ junkListener?.let(animation::removeUpdateListener)
+ junkListener =
+ jankListenerFactory.dismiss(view).also(animation::addUpdateListener)
+ animation.suspendAnimate(FRACTION_HIDE)
dialog.dismiss()
}
is VolumeDialogVisibilityModel.Invisible -> {
@@ -141,37 +153,21 @@ constructor(
.launchIn(this)
}
- private fun calculateTranslationX(view: View): Float? {
- return if (view.display.rotation == RotationPolicy.NATURAL_ROTATION) {
- if (view.isLayoutRtl) {
- -1
+ /**
+ * @param fraction in range [0, 1]. 0 corresponds to the dialog being hidden and 1 - visible.
+ */
+ private fun View.applyAnimationProgress(fraction: Float) {
+ alpha = ceil(fraction)
+ if (display.rotation == RotationPolicy.NATURAL_ROTATION) {
+ if (isLayoutRtl) {
+ -1
+ } else {
+ 1
+ } * width / 2f
} else {
- 1
- } * view.width / 2f
- } else {
- null
- }
- }
-
- private suspend fun View.animateShow(duration: Long, translationX: Float?) {
- translationX?.let { setTranslationX(translationX) }
- alpha = 0f
- animate()
- .alpha(1f)
- .translationX(0f)
- .setDuration(duration)
- .setInterpolator(SystemUIInterpolators.LogDecelerateInterpolator())
- .suspendAnimate(jankListenerFactory.show(this, duration))
- }
-
- private suspend fun View.animateHide(duration: Long, translationX: Float?) {
- val animator =
- animate()
- .alpha(0f)
- .setDuration(duration)
- .setInterpolator(SystemUIInterpolators.LogAccelerateInterpolator())
- translationX?.let { animator.translationX(it) }
- animator.suspendAnimate(jankListenerFactory.dismiss(this, duration))
+ null
+ }
+ ?.let { maxTranslationX -> translationX = lerp(maxTranslationX, 0f, fraction) }
}
private suspend fun ViewTreeObserver.listenToComputeInternalInsets() =
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/utils/JankListenerFactory.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/utils/JankListenerFactory.kt
index 9fcd77716fb6..803911a9cf77 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/utils/JankListenerFactory.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/utils/JankListenerFactory.kt
@@ -17,8 +17,8 @@
package com.android.systemui.volume.dialog.ui.utils
import android.animation.Animator
-import android.animation.AnimatorListenerAdapter
import android.view.View
+import androidx.dynamicanimation.animation.DynamicAnimation
import com.android.internal.jank.Cuj
import com.android.internal.jank.InteractionJankMonitor
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPluginScope
@@ -30,35 +30,36 @@ class JankListenerFactory
@Inject
constructor(private val interactionJankMonitor: InteractionJankMonitor) {
- fun show(view: View, timeout: Long) = getJunkListener(view, "show", timeout)
-
- fun update(view: View, timeout: Long) = getJunkListener(view, "update", timeout)
+ fun show(view: View): DynamicAnimation.OnAnimationUpdateListener {
+ return createJunkListener(view, "show")
+ }
- fun dismiss(view: View, timeout: Long) = getJunkListener(view, "dismiss", timeout)
+ fun dismiss(view: View): DynamicAnimation.OnAnimationUpdateListener {
+ return createJunkListener(view, "dismiss")
+ }
- private fun getJunkListener(
+ private fun createJunkListener(
view: View,
type: String,
- timeout: Long,
- ): Animator.AnimatorListener {
- return object : AnimatorListenerAdapter() {
- override fun onAnimationStart(animation: Animator) {
+ ): DynamicAnimation.OnAnimationUpdateListener {
+ var trackedStart = false
+ return DynamicAnimation.OnAnimationUpdateListener { animation, _, _ ->
+ if (!trackedStart) {
+ trackedStart = true
interactionJankMonitor.begin(
InteractionJankMonitor.Configuration.Builder.withView(
Cuj.CUJ_VOLUME_CONTROL,
view,
)
.setTag(type)
- .setTimeout(timeout)
)
- }
-
- override fun onAnimationEnd(animation: Animator) {
- interactionJankMonitor.end(Cuj.CUJ_VOLUME_CONTROL)
- }
-
- override fun onAnimationCancel(animation: Animator) {
- interactionJankMonitor.cancel(Cuj.CUJ_VOLUME_CONTROL)
+ animation.addEndListener { _, canceled, _, _ ->
+ if (canceled) {
+ interactionJankMonitor.cancel(Cuj.CUJ_VOLUME_CONTROL)
+ } else {
+ interactionJankMonitor.end(Cuj.CUJ_VOLUME_CONTROL)
+ }
+ }
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/utils/SuspendAnimators.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/utils/SuspendAnimators.kt
index 52a19e0903e2..31e596f0278d 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/utils/SuspendAnimators.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/utils/SuspendAnimators.kt
@@ -96,21 +96,23 @@ suspend fun <T> ValueAnimator.suspendAnimate(onValueChanged: (T) -> Unit) {
* Starts spring animation and suspends until it's finished. Cancels the animation if the running
* coroutine is cancelled.
*/
-suspend fun SpringAnimation.suspendAnimate(onAnimationUpdate: (Float) -> Unit) =
- suspendCancellableCoroutine { continuation ->
- val updateListener =
- DynamicAnimation.OnAnimationUpdateListener { _, value, _ -> onAnimationUpdate(value) }
- val endListener =
- DynamicAnimation.OnAnimationEndListener { _, _, _, _ -> continuation.resumeIfCan(Unit) }
- addUpdateListener(updateListener)
- addEndListener(endListener)
- animateToFinalPosition(1F)
- continuation.invokeOnCancellation {
- removeUpdateListener(updateListener)
- removeEndListener(endListener)
- cancel()
- }
+suspend fun SpringAnimation.suspendAnimate(
+ finalPosition: Float = 1f,
+ onAnimationUpdate: (Float) -> Unit = {},
+) = suspendCancellableCoroutine { continuation ->
+ val updateListener =
+ DynamicAnimation.OnAnimationUpdateListener { _, value, _ -> onAnimationUpdate(value) }
+ val endListener =
+ DynamicAnimation.OnAnimationEndListener { _, _, _, _ -> continuation.resumeIfCan(Unit) }
+ addUpdateListener(updateListener)
+ addEndListener(endListener)
+ animateToFinalPosition(finalPosition)
+ continuation.invokeOnCancellation {
+ removeUpdateListener(updateListener)
+ removeEndListener(endListener)
+ cancel()
}
+}
/**
* Starts the animation and suspends until it's finished. Cancels the animation if the running
diff --git a/packages/SystemUI/src/com/android/systemui/wallpapers/data/repository/WallpaperRepository.kt b/packages/SystemUI/src/com/android/systemui/wallpapers/data/repository/WallpaperRepository.kt
index a34a2ddb7713..a55f76b333d9 100644
--- a/packages/SystemUI/src/com/android/systemui/wallpapers/data/repository/WallpaperRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/wallpapers/data/repository/WallpaperRepository.kt
@@ -23,6 +23,7 @@ import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.os.UserHandle
+import android.provider.Settings
import android.view.View
import androidx.annotation.VisibleForTesting
import com.android.app.tracing.coroutines.launchTraced as launch
@@ -41,6 +42,8 @@ import com.android.systemui.shared.Flags.extendedWallpaperEffects
import com.android.systemui.user.data.model.SelectedUserModel
import com.android.systemui.user.data.model.SelectionStatus
import com.android.systemui.user.data.repository.UserRepository
+import com.android.systemui.util.settings.SecureSettings
+import com.android.systemui.util.settings.SettingsProxyExt.observerFlow
import com.android.systemui.utils.coroutines.flow.mapLatestConflated
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
@@ -54,7 +57,7 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.filter
-import kotlinx.coroutines.flow.flowOf
+import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.stateIn
@@ -87,6 +90,7 @@ constructor(
private val wallpaperManager: WallpaperManager,
private val context: Context,
keyguardTransitionInteractor: KeyguardTransitionInteractor,
+ private val secureSettings: SecureSettings,
) : WallpaperRepository {
private val wallpaperChanged: Flow<Unit> =
broadcastDispatcher
@@ -125,7 +129,17 @@ constructor(
}
override val wallpaperSupportsAmbientMode: Flow<Boolean> =
- flowOf(context.resources.getBoolean(R.bool.config_dozeSupportsAodWallpaper) && ambientAod())
+ secureSettings
+ .observerFlow(UserHandle.USER_ALL, Settings.Secure.DOZE_ALWAYS_ON_WALLPAPER_ENABLED)
+ .onStart { emit(Unit) }
+ .map {
+ val userEnabled =
+ secureSettings.getInt(Settings.Secure.DOZE_ALWAYS_ON_WALLPAPER_ENABLED, 1) == 1
+ userEnabled &&
+ context.resources.getBoolean(R.bool.config_dozeSupportsAodWallpaper) &&
+ ambientAod()
+ }
+ .flowOn(bgDispatcher)
override var rootView: View? = null
diff --git a/packages/SystemUI/src/com/android/systemui/window/data/repository/NoopWindowRootViewBlurRepository.kt b/packages/SystemUI/src/com/android/systemui/window/data/repository/NoopWindowRootViewBlurRepository.kt
index 80aa11a71569..f1dd374d3e1d 100644
--- a/packages/SystemUI/src/com/android/systemui/window/data/repository/NoopWindowRootViewBlurRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/window/data/repository/NoopWindowRootViewBlurRepository.kt
@@ -25,4 +25,5 @@ class NoopWindowRootViewBlurRepository @Inject constructor() : WindowRootViewBlu
override val blurRadius: MutableStateFlow<Int> = MutableStateFlow(0)
override val isBlurOpaque: MutableStateFlow<Boolean> = MutableStateFlow(true)
override val isBlurSupported: StateFlow<Boolean> = MutableStateFlow(false)
-} \ No newline at end of file
+ override var blurAppliedListener: BlurAppliedListener? = null
+}
diff --git a/packages/SystemUI/src/com/android/systemui/window/data/repository/WindowRootViewBlurRepository.kt b/packages/SystemUI/src/com/android/systemui/window/data/repository/WindowRootViewBlurRepository.kt
index 41ceda033bdf..f98efe1e3c33 100644
--- a/packages/SystemUI/src/com/android/systemui/window/data/repository/WindowRootViewBlurRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/window/data/repository/WindowRootViewBlurRepository.kt
@@ -26,6 +26,7 @@ import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
import com.android.systemui.window.data.repository.WindowRootViewBlurRepository.Companion.isDisableBlurSysPropSet
import java.util.concurrent.Executor
+import java.util.function.Consumer
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.awaitClose
@@ -34,6 +35,8 @@ import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.stateIn
+typealias BlurAppliedListener = Consumer<Int>
+
/** Repository that maintains state for the window blur effect. */
interface WindowRootViewBlurRepository {
val blurRadius: MutableStateFlow<Int>
@@ -42,6 +45,8 @@ interface WindowRootViewBlurRepository {
/** Is blur supported based on settings toggle and battery power saver mode. */
val isBlurSupported: StateFlow<Boolean>
+ var blurAppliedListener: BlurAppliedListener?
+
companion object {
/**
* Whether the `persist.sysui.disableBlur` is set, this is used to disable blur for tests.
@@ -82,6 +87,8 @@ constructor(
} // stateIn because this is backed by a binder call.
.stateIn(scope, SharingStarted.WhileSubscribed(), false)
+ override var blurAppliedListener: BlurAppliedListener? = null
+
private fun isBlurAllowed(): Boolean {
return ActivityManager.isHighEndGfx() && !isDisableBlurSysPropSet()
}
diff --git a/packages/SystemUI/src/com/android/systemui/window/domain/interactor/WindowRootViewBlurInteractor.kt b/packages/SystemUI/src/com/android/systemui/window/domain/interactor/WindowRootViewBlurInteractor.kt
index 7a88a2ef966b..5197242e8079 100644
--- a/packages/SystemUI/src/com/android/systemui/window/domain/interactor/WindowRootViewBlurInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/window/domain/interactor/WindowRootViewBlurInteractor.kt
@@ -16,7 +16,6 @@
package com.android.systemui.window.domain.interactor
-import android.annotation.SuppressLint
import android.util.Log
import com.android.systemui.Flags
import com.android.systemui.communal.domain.interactor.CommunalInteractor
@@ -25,11 +24,11 @@ import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState.PRIMARY_BOUNCER
+import com.android.systemui.window.data.repository.BlurAppliedListener
import com.android.systemui.window.data.repository.WindowRootViewBlurRepository
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
@@ -54,8 +53,6 @@ constructor(
private val communalInteractor: CommunalInteractor,
private val repository: WindowRootViewBlurRepository,
) {
- @SuppressLint("SharedFlowCreation") private val _onBlurAppliedEvent = MutableSharedFlow<Int>()
-
private var isBouncerTransitionInProgress: StateFlow<Boolean> =
if (Flags.bouncerUiRevamp()) {
keyguardTransitionInteractor
@@ -71,8 +68,16 @@ constructor(
* Invoked by the view after blur of [appliedBlurRadius] was successfully applied on the window
* root view.
*/
- suspend fun onBlurApplied(appliedBlurRadius: Int) {
- _onBlurAppliedEvent.emit(appliedBlurRadius)
+ fun onBlurApplied(appliedBlurRadius: Int) {
+ repository.blurAppliedListener?.accept(appliedBlurRadius)
+ }
+
+ /**
+ * Register a listener that gets invoked whenever blur is applied, clears the listener if the
+ * passed in value is null
+ */
+ fun registerBlurAppliedListener(listener: BlurAppliedListener?) {
+ repository.blurAppliedListener = listener
}
/**
@@ -84,11 +89,6 @@ constructor(
/** Radius of blur to be applied on the window root view. */
val blurRadius: StateFlow<Int> = repository.blurRadius.asStateFlow()
- /**
- * Emits the applied blur radius whenever blur is successfully applied to the window root view.
- */
- val onBlurAppliedEvent: Flow<Int> = _onBlurAppliedEvent
-
/** Whether the blur applied is opaque or transparent. */
val isBlurOpaque: Flow<Boolean> =
combine(
diff --git a/packages/SystemUI/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModel.kt b/packages/SystemUI/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModel.kt
index b18c39dcf5e0..e60e85335f7a 100644
--- a/packages/SystemUI/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/window/ui/viewmodel/WindowRootViewModel.kt
@@ -18,35 +18,30 @@ package com.android.systemui.window.ui.viewmodel
import android.os.Build
import android.util.Log
-import com.android.app.tracing.coroutines.launchTraced
import com.android.systemui.Flags
import com.android.systemui.keyguard.ui.transitions.GlanceableHubTransition
import com.android.systemui.keyguard.ui.transitions.PrimaryBouncerTransition
-import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
-import kotlinx.coroutines.awaitCancellation
-import kotlinx.coroutines.channels.Channel
-import kotlinx.coroutines.coroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.flatMapLatest
+import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.onEach
-typealias BlurAppliedUiEvent = Int
-
/** View model for window root view. */
+@OptIn(ExperimentalCoroutinesApi::class)
class WindowRootViewModel
@AssistedInject
constructor(
primaryBouncerTransitions: Set<@JvmSuppressWildcards PrimaryBouncerTransition>,
glanceableHubTransitions: Set<@JvmSuppressWildcards GlanceableHubTransition>,
private val blurInteractor: WindowRootViewBlurInteractor,
-) : ExclusiveActivatable() {
-
- private val blurEvents = Channel<BlurAppliedUiEvent>(Channel.BUFFERED)
+) {
private val bouncerBlurRadiusFlows =
if (Flags.bouncerUiRevamp())
@@ -58,7 +53,7 @@ constructor(
glanceableHubTransitions.map { it.windowBlurRadius.logIfPossible(it.javaClass.name) }
else emptyList()
- val blurRadius: Flow<Float> =
+ private val _blurRadius =
listOf(
*bouncerBlurRadiusFlows.toTypedArray(),
*glanceableHubBlurRadiusFlows.toTypedArray(),
@@ -66,25 +61,29 @@ constructor(
)
.merge()
- val isBlurOpaque =
- blurInteractor.isBlurOpaque.distinctUntilChanged().logIfPossible("isBlurOpaque")
+ val blurRadius: Flow<Float> =
+ blurInteractor.isBlurCurrentlySupported.flatMapLatest { blurSupported ->
+ if (blurSupported) {
+ _blurRadius
+ } else {
+ flowOf(0f)
+ }
+ }
- override suspend fun onActivated(): Nothing {
- coroutineScope {
- launchTraced("WindowRootViewModel#blurEvents") {
- for (event in blurEvents) {
- if (isLoggable) {
- Log.d(TAG, "blur applied for $event")
- }
- blurInteractor.onBlurApplied(event)
- }
+ val isBlurOpaque =
+ blurInteractor.isBlurCurrentlySupported.flatMapLatest { blurSupported ->
+ if (blurSupported) {
+ blurInteractor.isBlurOpaque.distinctUntilChanged().logIfPossible("isBlurOpaque")
+ } else {
+ flowOf(false)
}
}
- awaitCancellation()
- }
fun onBlurApplied(blurRadius: Int) {
- blurEvents.trySend(blurRadius)
+ if (isLoggable) {
+ Log.d(TAG, "blur applied for radius $blurRadius")
+ }
+ blurInteractor.onBlurApplied(blurRadius)
}
@AssistedFactory
@@ -101,9 +100,3 @@ constructor(
}
}
}
-
-/**
- * @property radius Radius of blur to be applied on the window root view.
- * @property isOpaque Whether the blur applied is opaque or transparent.
- */
-data class BlurState(val radius: Int, val isOpaque: Boolean)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentManagerTest.kt
index 6ed990d513cb..9c932695f295 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentManagerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentManagerTest.kt
@@ -87,7 +87,7 @@ class BluetoothDetailsContentManagerTest : SysuiTestCase() {
private val fakeSystemClock = FakeSystemClock()
private val uiProperties =
- BluetoothTileDialogViewModel.UiProperties.build(
+ BluetoothDetailsContentViewModel.UiProperties.build(
isBluetoothEnabled = ENABLED,
isAutoOnToggleFeatureAvailable = ENABLED,
)
@@ -314,7 +314,7 @@ class BluetoothDetailsContentManagerTest : SysuiTestCase() {
val cachedHeight = Int.MAX_VALUE
val contentManager =
BluetoothDetailsContentManager(
- BluetoothTileDialogViewModel.UiProperties.build(ENABLED, ENABLED),
+ BluetoothDetailsContentViewModel.UiProperties.build(ENABLED, ENABLED),
cachedHeight,
bluetoothTileDialogCallback,
/* isInDialog= */ true,
@@ -339,7 +339,7 @@ class BluetoothDetailsContentManagerTest : SysuiTestCase() {
testScope.runTest {
val contentManager =
BluetoothDetailsContentManager(
- BluetoothTileDialogViewModel.UiProperties.build(ENABLED, ENABLED),
+ BluetoothDetailsContentViewModel.UiProperties.build(ENABLED, ENABLED),
MATCH_PARENT,
bluetoothTileDialogCallback,
/* isInDialog= */ true,
@@ -364,7 +364,7 @@ class BluetoothDetailsContentManagerTest : SysuiTestCase() {
testScope.runTest {
val contentManager =
BluetoothDetailsContentManager(
- BluetoothTileDialogViewModel.UiProperties.build(ENABLED, ENABLED),
+ BluetoothDetailsContentViewModel.UiProperties.build(ENABLED, ENABLED),
MATCH_PARENT,
bluetoothTileDialogCallback,
/* isInDialog= */ true,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentViewModelTest.kt
index 47a834be9b9c..bfc5361b6129 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothDetailsContentViewModelTest.kt
@@ -67,14 +67,14 @@ import org.mockito.junit.MockitoRule
@RunWith(AndroidJUnit4::class)
@TestableLooper.RunWithLooper(setAsMainLooper = true)
@EnableFlags(Flags.FLAG_BLUETOOTH_QS_TILE_DIALOG_AUTO_ON_TOGGLE)
-class BluetoothTileDialogViewModelTest : SysuiTestCase() {
+class BluetoothDetailsContentViewModelTest : SysuiTestCase() {
@get:Rule val mockitoRule: MockitoRule = MockitoJUnit.rule()
private val kosmos = testKosmos()
private val fakeSystemClock = FakeSystemClock()
private val backgroundExecutor = FakeExecutor(fakeSystemClock)
- private lateinit var bluetoothTileDialogViewModel: BluetoothTileDialogViewModel
+ private lateinit var bluetoothDetailsContentViewModel: BluetoothDetailsContentViewModel
@Mock private lateinit var bluetoothDeviceMetadataInteractor: BluetoothDeviceMetadataInteractor
@@ -126,8 +126,8 @@ class BluetoothTileDialogViewModelTest : SysuiTestCase() {
testScope = kosmos.testScope
// TODO(b/364515243): use real object instead of mock
whenever(kosmos.deviceItemInteractor.deviceItemUpdate).thenReturn(MutableSharedFlow())
- bluetoothTileDialogViewModel =
- BluetoothTileDialogViewModel(
+ bluetoothDetailsContentViewModel =
+ BluetoothDetailsContentViewModel(
deviceItemInteractor,
deviceItemActionInteractor,
BluetoothStateInteractor(
@@ -194,7 +194,7 @@ class BluetoothTileDialogViewModelTest : SysuiTestCase() {
@Test
fun testShowDetailsContent_noAnimation() {
testScope.runTest {
- bluetoothTileDialogViewModel.showDetailsContent(null, null)
+ bluetoothDetailsContentViewModel.showDetailsContent(null, null)
runCurrent()
verify(mDialogTransitionAnimator, never()).show(any(), any(), any())
@@ -204,7 +204,7 @@ class BluetoothTileDialogViewModelTest : SysuiTestCase() {
@Test
fun testShowDetailsContent_animated() {
testScope.runTest {
- bluetoothTileDialogViewModel.showDetailsContent(expandable, null)
+ bluetoothDetailsContentViewModel.showDetailsContent(expandable, null)
runCurrent()
verify(mDialogTransitionAnimator).show(any(), any(), anyBoolean())
@@ -214,7 +214,7 @@ class BluetoothTileDialogViewModelTest : SysuiTestCase() {
@Test
fun testShowDetailsContent_animated_inDetailsView() {
testScope.runTest {
- bluetoothTileDialogViewModel.showDetailsContent(expandable, mockView)
+ bluetoothDetailsContentViewModel.showDetailsContent(expandable, mockView)
runCurrent()
verify(bluetoothDetailsContentManager).bind(mockView)
@@ -226,7 +226,7 @@ class BluetoothTileDialogViewModelTest : SysuiTestCase() {
fun testShowDetailsContent_animated_callInBackgroundThread() {
testScope.runTest {
backgroundExecutor.execute {
- bluetoothTileDialogViewModel.showDetailsContent(expandable, null)
+ bluetoothDetailsContentViewModel.showDetailsContent(expandable, null)
runCurrent()
verify(mDialogTransitionAnimator).show(any(), any(), anyBoolean())
@@ -238,7 +238,7 @@ class BluetoothTileDialogViewModelTest : SysuiTestCase() {
fun testShowDetailsContent_animated_callInBackgroundThread_inDetailsView() {
testScope.runTest {
backgroundExecutor.execute {
- bluetoothTileDialogViewModel.showDetailsContent(expandable, mockView)
+ bluetoothDetailsContentViewModel.showDetailsContent(expandable, mockView)
runCurrent()
verify(bluetoothDetailsContentManager).bind(mockView)
@@ -250,7 +250,7 @@ class BluetoothTileDialogViewModelTest : SysuiTestCase() {
@Test
fun testShowDetailsContent_fetchDeviceItem() {
testScope.runTest {
- bluetoothTileDialogViewModel.showDetailsContent(null, null)
+ bluetoothDetailsContentViewModel.showDetailsContent(null, null)
runCurrent()
verify(deviceItemInteractor).deviceItemUpdate
@@ -261,11 +261,11 @@ class BluetoothTileDialogViewModelTest : SysuiTestCase() {
fun testStartSettingsActivity_activityLaunched_dialogDismissed() {
testScope.runTest {
whenever(deviceItem.cachedBluetoothDevice).thenReturn(cachedBluetoothDevice)
- bluetoothTileDialogViewModel.showDetailsContent(null, null)
+ bluetoothDetailsContentViewModel.showDetailsContent(null, null)
runCurrent()
val clickedView = View(context)
- bluetoothTileDialogViewModel.onPairNewDeviceClicked(clickedView)
+ bluetoothDetailsContentViewModel.onPairNewDeviceClicked(clickedView)
verify(uiEventLogger).log(BluetoothTileDialogUiEvent.PAIR_NEW_DEVICE_CLICKED)
verify(activityStarter).postStartActivityDismissingKeyguard(any(), anyInt(), nullable())
@@ -276,7 +276,7 @@ class BluetoothTileDialogViewModelTest : SysuiTestCase() {
fun testBuildUiProperties_bluetoothOn_shouldHideAutoOn() {
testScope.runTest {
val actual =
- BluetoothTileDialogViewModel.UiProperties.build(
+ BluetoothDetailsContentViewModel.UiProperties.build(
isBluetoothEnabled = true,
isAutoOnToggleFeatureAvailable = true,
)
@@ -288,7 +288,7 @@ class BluetoothTileDialogViewModelTest : SysuiTestCase() {
fun testBuildUiProperties_bluetoothOff_shouldShowAutoOn() {
testScope.runTest {
val actual =
- BluetoothTileDialogViewModel.UiProperties.build(
+ BluetoothDetailsContentViewModel.UiProperties.build(
isBluetoothEnabled = false,
isAutoOnToggleFeatureAvailable = true,
)
@@ -300,7 +300,7 @@ class BluetoothTileDialogViewModelTest : SysuiTestCase() {
fun testBuildUiProperties_bluetoothOff_autoOnFeatureUnavailable_shouldHideAutoOn() {
testScope.runTest {
val actual =
- BluetoothTileDialogViewModel.UiProperties.build(
+ BluetoothDetailsContentViewModel.UiProperties.build(
isBluetoothEnabled = false,
isAutoOnToggleFeatureAvailable = false,
)
@@ -313,7 +313,7 @@ class BluetoothTileDialogViewModelTest : SysuiTestCase() {
testScope.runTest {
whenever(bluetoothAdapter.isAutoOnSupported).thenReturn(true)
- val actual = bluetoothTileDialogViewModel.isAutoOnToggleFeatureAvailable()
+ val actual = bluetoothDetailsContentViewModel.isAutoOnToggleFeatureAvailable()
assertThat(actual).isTrue()
}
}
@@ -323,7 +323,7 @@ class BluetoothTileDialogViewModelTest : SysuiTestCase() {
testScope.runTest {
whenever(bluetoothAdapter.isAutoOnSupported).thenReturn(false)
- val actual = bluetoothTileDialogViewModel.isAutoOnToggleFeatureAvailable()
+ val actual = bluetoothDetailsContentViewModel.isAutoOnToggleFeatureAvailable()
assertThat(actual).isFalse()
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogDelegateTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogDelegateTest.kt
index 2788f1d95382..7f75b8f03533 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogDelegateTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/bluetooth/qsdialog/BluetoothTileDialogDelegateTest.kt
@@ -80,7 +80,7 @@ class BluetoothTileDialogDelegateTest : SysuiTestCase() {
@Mock private lateinit var dialogTransitionAnimator: DialogTransitionAnimator
private val uiProperties =
- BluetoothTileDialogViewModel.UiProperties.build(
+ BluetoothDetailsContentViewModel.UiProperties.build(
isBluetoothEnabled = ENABLED,
isAutoOnToggleFeatureAvailable = ENABLED,
)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
index 4ccfa29d4ba0..e8054c07eac8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/KeyguardViewMediatorTest.java
@@ -206,6 +206,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
private @Mock ShadeInteractor mShadeInteractor;
private @Mock ShadeWindowLogger mShadeWindowLogger;
private @Mock SelectedUserInteractor mSelectedUserInteractor;
+ private @Mock UserTracker.Callback mUserTrackerCallback;
private @Mock KeyguardInteractor mKeyguardInteractor;
private @Mock KeyguardTransitionBootInteractor mKeyguardTransitionBootInteractor;
private @Captor ArgumentCaptor<KeyguardStateController.Callback>
@@ -280,7 +281,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
() -> mShadeInteractor,
mShadeWindowLogger,
() -> mSelectedUserInteractor,
- mUserTracker,
+ mock(UserTracker.class),
mKosmos.getNotificationShadeWindowModel(),
mSecureSettings,
mKosmos::getCommunalInteractor,
@@ -318,7 +319,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
} catch (Exception e) {
// Just so we don't have to add the exception signature to every test.
- fail();
+ fail(e.getMessage());
}
}
@@ -330,18 +331,156 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
/* First test the default behavior: handleUserSwitching() is not invoked */
when(mUserTracker.isUserSwitching()).thenReturn(false);
- mViewMediator.mUpdateCallback = mock(KeyguardUpdateMonitorCallback.class);
mViewMediator.onSystemReady();
TestableLooper.get(this).processAllMessages();
- verify(mViewMediator.mUpdateCallback, never()).onUserSwitching(userId);
+ verify(mUserTrackerCallback, never()).onUserChanging(eq(userId), eq(mContext),
+ any(Runnable.class));
/* Next test user switching is already in progress when started */
when(mUserTracker.isUserSwitching()).thenReturn(true);
mViewMediator.onSystemReady();
TestableLooper.get(this).processAllMessages();
- verify(mViewMediator.mUpdateCallback).onUserSwitching(userId);
+ verify(mUserTrackerCallback).onUserChanging(eq(userId), eq(mContext),
+ any(Runnable.class));
+ }
+
+ @Test
+ @TestableLooper.RunWithLooper(setAsMainLooper = true)
+ public void testGoingAwayFollowedByBeforeUserSwitchDoesNotHideKeyguard() {
+ setCurrentUser(/* userId= */1099, /* isSecure= */false);
+
+ // Setup keyguard
+ mViewMediator.onSystemReady();
+ processAllMessagesAndBgExecutorMessages();
+ mViewMediator.setShowingLocked(true, "");
+
+ // Request keyguard going away
+ when(mKeyguardStateController.isKeyguardGoingAway()).thenReturn(true);
+ mViewMediator.mKeyguardGoingAwayRunnable.run();
+
+ // After the request, begin a switch to a new secure user
+ int nextUserId = 500;
+ setCurrentUser(nextUserId, /* isSecure= */true);
+ Runnable result = mock(Runnable.class);
+ mViewMediator.handleBeforeUserSwitching(nextUserId, result);
+ processAllMessagesAndBgExecutorMessages();
+ verify(result).run();
+
+ // After that request has begun, have WM tell us to exit keyguard
+ RemoteAnimationTarget[] apps = new RemoteAnimationTarget[]{
+ mock(RemoteAnimationTarget.class)
+ };
+ RemoteAnimationTarget[] wallpapers = new RemoteAnimationTarget[]{
+ mock(RemoteAnimationTarget.class)
+ };
+ IRemoteAnimationFinishedCallback callback = mock(IRemoteAnimationFinishedCallback.class);
+ mViewMediator.startKeyguardExitAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY, apps, wallpapers,
+ null, callback);
+ processAllMessagesAndBgExecutorMessages();
+
+ // The call to exit should be rejected, and keyguard should still be visible
+ verify(mKeyguardUnlockAnimationController, never()).notifyStartSurfaceBehindRemoteAnimation(
+ any(), any(), any(), anyLong(), anyBoolean());
+ try {
+ assertATMSLockScreenShowing(true);
+ } catch (Exception e) {
+ fail(e.getMessage());
+ }
+ assertTrue(mViewMediator.isShowingAndNotOccluded());
+ }
+
+ @Test
+ @TestableLooper.RunWithLooper(setAsMainLooper = true)
+ public void testUserSwitchToSecureUserShowsBouncer() {
+ setCurrentUser(/* userId= */1099, /* isSecure= */true);
+
+ // Setup keyguard
+ mViewMediator.onSystemReady();
+ processAllMessagesAndBgExecutorMessages();
+ mViewMediator.setShowingLocked(true, "");
+
+ // After the request, begin a switch to a new secure user
+ int nextUserId = 500;
+ setCurrentUser(nextUserId, /* isSecure= */true);
+
+ Runnable beforeResult = mock(Runnable.class);
+ mViewMediator.handleBeforeUserSwitching(nextUserId, beforeResult);
+ processAllMessagesAndBgExecutorMessages();
+ verify(beforeResult).run();
+
+ // Dismiss should not be called while user switch is in progress
+ Runnable onSwitchResult = mock(Runnable.class);
+ mViewMediator.handleUserSwitching(nextUserId, onSwitchResult);
+ processAllMessagesAndBgExecutorMessages();
+ verify(onSwitchResult).run();
+ verify(mStatusBarKeyguardViewManager, never()).dismissAndCollapse();
+
+ // The attempt to dismiss only comes on user switch complete, which will trigger a call to
+ // show the bouncer in StatusBarKeyguardViewManager
+ mViewMediator.handleUserSwitchComplete(nextUserId);
+ TestableLooper.get(this).moveTimeForward(600);
+ processAllMessagesAndBgExecutorMessages();
+
+ verify(mStatusBarKeyguardViewManager).dismissAndCollapse();
+ }
+
+ @Test
+ @TestableLooper.RunWithLooper(setAsMainLooper = true)
+ public void testUserSwitchToInsecureUserDismissesKeyguard() {
+ int userId = 1099;
+ when(mUserTracker.getUserId()).thenReturn(userId);
+
+ // Setup keyguard
+ mViewMediator.onSystemReady();
+ processAllMessagesAndBgExecutorMessages();
+ mViewMediator.setShowingLocked(true, "");
+
+ // After the request, begin a switch to an insecure user
+ int nextUserId = 500;
+ when(mLockPatternUtils.isSecure(nextUserId)).thenReturn(false);
+
+ Runnable beforeResult = mock(Runnable.class);
+ mViewMediator.handleBeforeUserSwitching(nextUserId, beforeResult);
+ processAllMessagesAndBgExecutorMessages();
+ verify(beforeResult).run();
+
+ // The call to dismiss comes during the user switch
+ Runnable onSwitchResult = mock(Runnable.class);
+ mViewMediator.handleUserSwitching(nextUserId, onSwitchResult);
+ processAllMessagesAndBgExecutorMessages();
+ verify(onSwitchResult).run();
+
+ verify(mStatusBarKeyguardViewManager).dismissAndCollapse();
+ }
+
+ @Test
+ @TestableLooper.RunWithLooper(setAsMainLooper = true)
+ public void testUserSwitchToSecureUserWhileKeyguardNotVisibleShowsKeyguard() {
+ setCurrentUser(/* userId= */1099, /* isSecure= */true);
+
+ // Setup keyguard as not visible
+ mViewMediator.onSystemReady();
+ processAllMessagesAndBgExecutorMessages();
+ mViewMediator.setShowingLocked(false, "");
+ processAllMessagesAndBgExecutorMessages();
+
+ // Begin a switch to a new secure user
+ int nextUserId = 500;
+ setCurrentUser(nextUserId, /* isSecure= */true);
+
+ Runnable beforeResult = mock(Runnable.class);
+ mViewMediator.handleBeforeUserSwitching(nextUserId, beforeResult);
+ processAllMessagesAndBgExecutorMessages();
+ verify(beforeResult).run();
+
+ try {
+ assertATMSLockScreenShowing(true);
+ } catch (Exception e) {
+ fail();
+ }
+ assertTrue(mViewMediator.isShowingAndNotOccluded());
}
@Test
@@ -1105,7 +1244,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
processAllMessagesAndBgExecutorMessages();
verify(mStatusBarKeyguardViewManager, never()).reset(anyBoolean());
- assertATMSAndKeyguardViewMediatorStatesMatch();
+
}
@Test
@@ -1149,6 +1288,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
IRemoteAnimationFinishedCallback callback = mock(IRemoteAnimationFinishedCallback.class);
when(mKeyguardStateController.isKeyguardGoingAway()).thenReturn(true);
+ mViewMediator.mKeyguardGoingAwayRunnable.run();
mViewMediator.startKeyguardExitAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY, apps, wallpapers,
null, callback);
processAllMessagesAndBgExecutorMessages();
@@ -1203,13 +1343,6 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
// The captor will have the most recent setLockScreenShown call's value.
assertEquals(showing, showingCaptor.getValue());
-
- // We're now just after the last setLockScreenShown call. If we expect the lockscreen to be
- // showing, ensure that we didn't subsequently ask for it to go away.
- if (showing) {
- orderedSetLockScreenShownCalls.verify(mActivityTaskManagerService, never())
- .keyguardGoingAway(anyInt());
- }
}
/**
@@ -1371,6 +1504,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
mKeyguardTransitionBootInteractor,
mKosmos::getCommunalSceneInteractor,
mock(WindowManagerOcclusionManager.class));
+ mViewMediator.mUserChangedCallback = mUserTrackerCallback;
mViewMediator.start();
mViewMediator.registerCentralSurfaces(mCentralSurfaces, null, null, null, null);
@@ -1384,4 +1518,10 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
private void captureKeyguardUpdateMonitorCallback() {
verify(mUpdateMonitor).registerCallback(mKeyguardUpdateMonitorCallbackCaptor.capture());
}
+
+ private void setCurrentUser(int userId, boolean isSecure) {
+ when(mUserTracker.getUserId()).thenReturn(userId);
+ when(mSelectedUserInteractor.getSelectedUserId()).thenReturn(userId);
+ when(mLockPatternUtils.isSecure(userId)).thenReturn(isSecure);
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/DragAndDropTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/DragAndDropTest.kt
index 26cf4a261289..92b26ea3a8ef 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/DragAndDropTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/DragAndDropTest.kt
@@ -22,14 +22,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
-import androidx.compose.ui.semantics.SemanticsProperties
-import androidx.compose.ui.test.SemanticsMatcher
-import androidx.compose.ui.test.assert
-import androidx.compose.ui.test.filter
-import androidx.compose.ui.test.hasContentDescription
-import androidx.compose.ui.test.junit4.ComposeContentTestRule
import androidx.compose.ui.test.junit4.createComposeRule
-import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText
@@ -100,7 +93,10 @@ class DragAndDropTest : SysuiTestCase() {
composeRule.onNodeWithText("Remove").assertExists()
// Every other tile should still be in the same order
- composeRule.assertTileGridContainsExactly(listOf("tileB", "tileC", "tileD_large", "tileE"))
+ composeRule.assertGridContainsExactly(
+ CURRENT_TILES_GRID_TEST_TAG,
+ listOf("tileB", "tileC", "tileD_large", "tileE"),
+ )
}
@Test
@@ -125,8 +121,9 @@ class DragAndDropTest : SysuiTestCase() {
composeRule.onNodeWithText("Remove").assertDoesNotExist()
// Tile A and B should swap places
- composeRule.assertTileGridContainsExactly(
- listOf("tileB", "tileA", "tileC", "tileD_large", "tileE")
+ composeRule.assertGridContainsExactly(
+ CURRENT_TILES_GRID_TEST_TAG,
+ listOf("tileB", "tileA", "tileC", "tileD_large", "tileE"),
)
}
@@ -152,7 +149,10 @@ class DragAndDropTest : SysuiTestCase() {
composeRule.onNodeWithText("Remove").assertDoesNotExist()
// Tile A is gone
- composeRule.assertTileGridContainsExactly(listOf("tileB", "tileC", "tileD_large", "tileE"))
+ composeRule.assertGridContainsExactly(
+ CURRENT_TILES_GRID_TEST_TAG,
+ listOf("tileB", "tileC", "tileD_large", "tileE"),
+ )
}
@Test
@@ -166,7 +166,7 @@ class DragAndDropTest : SysuiTestCase() {
}
composeRule.waitForIdle()
- listState.onStarted(createEditTile("newTile"), DragType.Add)
+ listState.onStarted(createEditTile("tile_new"), DragType.Add)
// Insert after tileD, which is at index 4
// [ a ] [ b ] [ c ] [ empty ]
// [ tile d ] [ e ]
@@ -179,23 +179,13 @@ class DragAndDropTest : SysuiTestCase() {
// Remove drop zone should disappear
composeRule.onNodeWithText("Remove").assertDoesNotExist()
- // newTile is added after tileD
- composeRule.assertTileGridContainsExactly(
- listOf("tileA", "tileB", "tileC", "tileD_large", "newTile", "tileE")
+ // tile_new is added after tileD
+ composeRule.assertGridContainsExactly(
+ CURRENT_TILES_GRID_TEST_TAG,
+ listOf("tileA", "tileB", "tileC", "tileD_large", "tile_new", "tileE"),
)
}
- private fun ComposeContentTestRule.assertTileGridContainsExactly(specs: List<String>) {
- onNodeWithTag(CURRENT_TILES_GRID_TEST_TAG)
- .onChildren()
- .filter(SemanticsMatcher.keyIsDefined(SemanticsProperties.ContentDescription))
- .apply {
- fetchSemanticsNodes().forEachIndexed { index, _ ->
- get(index).assert(hasContentDescription(specs[index]))
- }
- }
- }
-
companion object {
private const val CURRENT_TILES_GRID_TEST_TAG = "CurrentTilesGrid"
private const val AVAILABLE_TILES_GRID_TEST_TAG = "AvailableTilesGrid"
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/EditModeTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/EditModeTest.kt
index 4e8b0bcd374c..8c09b81744d7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/EditModeTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/EditModeTest.kt
@@ -23,16 +23,9 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
-import androidx.compose.ui.semantics.SemanticsProperties
-import androidx.compose.ui.test.SemanticsMatcher
-import androidx.compose.ui.test.assert
-import androidx.compose.ui.test.filter
-import androidx.compose.ui.test.hasContentDescription
import androidx.compose.ui.test.junit4.ComposeContentTestRule
import androidx.compose.ui.test.junit4.createComposeRule
-import androidx.compose.ui.test.onChildren
import androidx.compose.ui.test.onNodeWithContentDescription
-import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.text.AnnotatedString
@@ -113,20 +106,6 @@ class EditModeTest : SysuiTestCase() {
specs: List<String>
) = assertGridContainsExactly(AVAILABLE_TILES_GRID_TEST_TAG, specs)
- private fun ComposeContentTestRule.assertGridContainsExactly(
- testTag: String,
- specs: List<String>,
- ) {
- onNodeWithTag(testTag)
- .onChildren()
- .filter(SemanticsMatcher.keyIsDefined(SemanticsProperties.ContentDescription))
- .apply {
- fetchSemanticsNodes().forEachIndexed { index, _ ->
- get(index).assert(hasContentDescription(specs[index]))
- }
- }
- }
-
companion object {
private const val CURRENT_TILES_GRID_TEST_TAG = "CurrentTilesGrid"
private const val AVAILABLE_TILES_GRID_TEST_TAG = "AvailableTilesGrid"
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/TestMatchers.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/TestMatchers.kt
new file mode 100644
index 000000000000..dbccf864fc26
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/compose/TestMatchers.kt
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES 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.qs.panels.ui.compose
+
+import androidx.compose.ui.semantics.SemanticsProperties
+import androidx.compose.ui.semantics.getOrNull
+import androidx.compose.ui.test.SemanticsMatcher
+import androidx.compose.ui.test.assert
+import androidx.compose.ui.test.filter
+import androidx.compose.ui.test.hasContentDescription
+import androidx.compose.ui.test.junit4.ComposeContentTestRule
+import androidx.compose.ui.test.onChildren
+import androidx.compose.ui.test.onNodeWithTag
+
+/** Asserts that the tile grid with [testTag] contains exactly [specs] */
+fun ComposeContentTestRule.assertGridContainsExactly(testTag: String, specs: List<String>) {
+ onNodeWithTag(testTag)
+ .onChildren()
+ .filter(SemanticsMatcher.contentDescriptionStartsWith("tile"))
+ .apply {
+ fetchSemanticsNodes().forEachIndexed { index, _ ->
+ get(index).assert(hasContentDescription(specs[index]))
+ }
+ }
+}
+
+/**
+ * A [SemanticsMatcher] that matches anything with a content description starting with the given
+ * [prefix]
+ */
+fun SemanticsMatcher.Companion.contentDescriptionStartsWith(prefix: String): SemanticsMatcher {
+ return SemanticsMatcher("${SemanticsProperties.ContentDescription.name} starts with $prefix") {
+ semanticsNode ->
+ semanticsNode.config.getOrNull(SemanticsProperties.ContentDescription)?.any {
+ it.startsWith(prefix)
+ } ?: false
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt
index 1305b0c4c499..cfe34f446f36 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt
@@ -16,7 +16,7 @@ import com.android.internal.telephony.flags.Flags
import com.android.settingslib.Utils
import com.android.settingslib.bluetooth.CachedBluetoothDevice
import com.android.systemui.SysuiTestCase
-import com.android.systemui.bluetooth.qsdialog.BluetoothTileDialogViewModel
+import com.android.systemui.bluetooth.qsdialog.BluetoothDetailsContentViewModel
import com.android.systemui.classifier.FalsingManagerFake
import com.android.systemui.flags.FeatureFlagsClassic
import com.android.systemui.plugins.ActivityStarter
@@ -71,7 +71,7 @@ class BluetoothTileTest(flags: FlagsParameterization) : SysuiTestCase() {
@Mock private lateinit var bluetoothController: BluetoothController
@Mock private lateinit var uiEventLogger: QsEventLogger
@Mock private lateinit var featureFlags: FeatureFlagsClassic
- @Mock private lateinit var bluetoothTileDialogViewModel: BluetoothTileDialogViewModel
+ @Mock private lateinit var bluetoothDetailsContentViewModel: BluetoothDetailsContentViewModel
@Mock private lateinit var clickJob: Job
private lateinit var testableLooper: TestableLooper
private lateinit var tile: FakeBluetoothTile
@@ -96,7 +96,7 @@ class BluetoothTileTest(flags: FlagsParameterization) : SysuiTestCase() {
qsLogger,
bluetoothController,
featureFlags,
- bluetoothTileDialogViewModel,
+ bluetoothDetailsContentViewModel,
)
tile.initialize()
@@ -238,7 +238,7 @@ class BluetoothTileTest(flags: FlagsParameterization) : SysuiTestCase() {
tile.handleClick(null)
- verify(bluetoothTileDialogViewModel)
+ verify(bluetoothDetailsContentViewModel)
.showDetailsContent(/* expandable= */ null, /* view= */ null)
}
@@ -308,7 +308,7 @@ class BluetoothTileTest(flags: FlagsParameterization) : SysuiTestCase() {
qsLogger: QSLogger,
bluetoothController: BluetoothController,
featureFlags: FeatureFlagsClassic,
- bluetoothTileDialogViewModel: BluetoothTileDialogViewModel,
+ bluetoothDetailsContentViewModel: BluetoothDetailsContentViewModel,
) :
BluetoothTile(
qsHost,
@@ -322,7 +322,7 @@ class BluetoothTileTest(flags: FlagsParameterization) : SysuiTestCase() {
qsLogger,
bluetoothController,
featureFlags,
- bluetoothTileDialogViewModel,
+ bluetoothDetailsContentViewModel,
) {
var restrictionChecked: String? = null
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
index 9137215f8c61..14a1233045bb 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java
@@ -63,7 +63,6 @@ import com.android.systemui.SysuiTestCase;
import com.android.systemui.animation.ShadeInterpolation;
import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants;
import com.android.systemui.dock.DockManager;
-import com.android.systemui.flags.DisableSceneContainer;
import com.android.systemui.flags.EnableSceneContainer;
import com.android.systemui.keyguard.KeyguardUnlockAnimationController;
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository;
@@ -119,8 +118,10 @@ public class ScrimControllerTest extends SysuiTestCase {
@Rule public Expect mExpect = Expect.create();
private final KosmosJavaAdapter mKosmos = new KosmosJavaAdapter(this);
- private FakeConfigurationController mConfigurationController;
- private LargeScreenShadeInterpolator mLinearLargeScreenShadeInterpolator;
+ private final FakeConfigurationController mConfigurationController =
+ new FakeConfigurationController();
+ private final LargeScreenShadeInterpolator
+ mLinearLargeScreenShadeInterpolator = new LinearLargeScreenShadeInterpolator();
private final TestScope mTestScope = mKosmos.getTestScope();
private final JavaAdapter mJavaAdapter = new JavaAdapter(mTestScope.getBackgroundScope());
@@ -136,7 +137,6 @@ public class ScrimControllerTest extends SysuiTestCase {
private boolean mAlwaysOnEnabled;
private TestableLooper mLooper;
private Context mContext;
-
@Mock private DozeParameters mDozeParameters;
@Mock private LightBarController mLightBarController;
@Mock private DelayedWakeLock.Factory mDelayedWakeLockFactory;
@@ -149,11 +149,12 @@ public class ScrimControllerTest extends SysuiTestCase {
@Mock private PrimaryBouncerToGoneTransitionViewModel mPrimaryBouncerToGoneTransitionViewModel;
@Mock private AlternateBouncerToGoneTransitionViewModel
mAlternateBouncerToGoneTransitionViewModel;
+ private final KeyguardTransitionInteractor mKeyguardTransitionInteractor =
+ mKosmos.getKeyguardTransitionInteractor();
+ private final FakeKeyguardTransitionRepository mKeyguardTransitionRepository =
+ mKosmos.getKeyguardTransitionRepository();
@Mock private KeyguardInteractor mKeyguardInteractor;
- private KeyguardTransitionInteractor mKeyguardTransitionInteractor;
- private FakeKeyguardTransitionRepository mKeyguardTransitionRepository;
-
// TODO(b/204991468): Use a real PanelExpansionStateManager object once this bug is fixed. (The
// event-dispatch-on-registration pattern caused some of these unit tests to fail.)
@Mock private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
@@ -237,9 +238,6 @@ public class ScrimControllerTest extends SysuiTestCase {
when(mContext.getColor(com.android.internal.R.color.materialColorSurface))
.thenAnswer(invocation -> mSurfaceColor);
- mConfigurationController = new FakeConfigurationController();
- mLinearLargeScreenShadeInterpolator = new LinearLargeScreenShadeInterpolator();
-
mScrimBehind = spy(new ScrimView(mContext));
mScrimInFront = new ScrimView(mContext);
mNotificationsScrim = new ScrimView(mContext);
@@ -272,9 +270,6 @@ public class ScrimControllerTest extends SysuiTestCase {
when(mAlternateBouncerToGoneTransitionViewModel.getScrimAlpha())
.thenReturn(emptyFlow());
- mKeyguardTransitionRepository = mKosmos.getKeyguardTransitionRepository();
- mKeyguardTransitionInteractor = mKosmos.getKeyguardTransitionInteractor();
-
mScrimController = new ScrimController(
mLightBarController,
mDozeParameters,
@@ -327,7 +322,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToKeyguard() {
mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
finishAnimationsImmediately();
@@ -343,7 +337,7 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
-@DisableSceneContainer void transitionToShadeLocked() {
+ public void transitionToShadeLocked() {
mScrimController.legacyTransitionTo(SHADE_LOCKED);
mScrimController.setQsPosition(1f, 0);
finishAnimationsImmediately();
@@ -379,7 +373,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToShadeLocked_clippingQs() {
mScrimController.setClipsQsScrim(true);
mScrimController.legacyTransitionTo(SHADE_LOCKED);
@@ -398,7 +391,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToOff() {
mScrimController.legacyTransitionTo(ScrimState.OFF);
finishAnimationsImmediately();
@@ -414,7 +406,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToAod_withRegularWallpaper() {
mScrimController.legacyTransitionTo(ScrimState.AOD);
finishAnimationsImmediately();
@@ -430,7 +421,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToAod_withFrontAlphaUpdates() {
// Assert that setting the AOD front scrim alpha doesn't take effect in a non-AOD state.
mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
@@ -475,7 +465,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToAod_afterDocked_ignoresAlwaysOnAndUpdatesFrontAlpha() {
// Assert that setting the AOD front scrim alpha doesn't take effect in a non-AOD state.
mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
@@ -517,7 +506,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToPulsing_withFrontAlphaUpdates() {
// Pre-condition
// Need to go to AoD first because PULSING doesn't change
@@ -563,7 +551,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToKeyguardBouncer() {
mScrimController.legacyTransitionTo(BOUNCER);
finishAnimationsImmediately();
@@ -584,7 +571,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void lockscreenToHubTransition_setsBehindScrimAlpha() {
// Start on lockscreen.
mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
@@ -631,7 +617,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void hubToLockscreenTransition_setsViewAlpha() {
// Start on glanceable hub.
mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB);
@@ -678,7 +663,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToHub() {
mScrimController.setRawPanelExpansionFraction(0f);
mScrimController.setBouncerHiddenFraction(KeyguardBouncerConstants.EXPANSION_HIDDEN);
@@ -693,7 +677,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void openBouncerOnHub() {
mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB);
@@ -723,7 +706,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void openShadeOnHub() {
mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB);
@@ -752,7 +734,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToHubOverDream() {
mScrimController.setRawPanelExpansionFraction(0f);
mScrimController.setBouncerHiddenFraction(KeyguardBouncerConstants.EXPANSION_HIDDEN);
@@ -767,7 +748,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void openBouncerOnHubOverDream() {
mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM);
@@ -797,7 +777,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void openShadeOnHubOverDream() {
mScrimController.legacyTransitionTo(ScrimState.GLANCEABLE_HUB_OVER_DREAM);
@@ -826,7 +805,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void onThemeChange_bouncerBehindTint_isUpdatedToSurfaceColor() {
assertEquals(BOUNCER.getBehindTint(), 0x112233);
mSurfaceColor = 0x223344;
@@ -835,7 +813,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void onThemeChangeWhileClipQsScrim_bouncerBehindTint_remainsBlack() {
mScrimController.setClipsQsScrim(true);
mScrimController.legacyTransitionTo(BOUNCER);
@@ -848,7 +825,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToKeyguardBouncer_clippingQs() {
mScrimController.setClipsQsScrim(true);
mScrimController.legacyTransitionTo(BOUNCER);
@@ -869,7 +845,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void disableClipQsScrimWithoutStateTransition_updatesTintAndAlpha() {
mScrimController.setClipsQsScrim(true);
mScrimController.legacyTransitionTo(BOUNCER);
@@ -892,7 +867,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void enableClipQsScrimWithoutStateTransition_updatesTintAndAlpha() {
mScrimController.setClipsQsScrim(false);
mScrimController.legacyTransitionTo(BOUNCER);
@@ -915,7 +889,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToBouncer() {
mScrimController.legacyTransitionTo(ScrimState.BOUNCER_SCRIMMED);
finishAnimationsImmediately();
@@ -929,7 +902,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToUnlocked_clippedQs() {
mScrimController.setClipsQsScrim(true);
mScrimController.setRawPanelExpansionFraction(0f);
@@ -988,7 +960,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToUnlocked_nonClippedQs_followsLargeScreensInterpolator() {
mScrimController.setClipsQsScrim(false);
mScrimController.setRawPanelExpansionFraction(0f);
@@ -1028,7 +999,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void scrimStateCallback() {
mScrimController.legacyTransitionTo(ScrimState.UNLOCKED);
finishAnimationsImmediately();
@@ -1044,7 +1014,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void panelExpansion() {
mScrimController.setRawPanelExpansionFraction(0f);
mScrimController.setRawPanelExpansionFraction(0.5f);
@@ -1067,7 +1036,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void qsExpansion() {
reset(mScrimBehind);
mScrimController.setQsPosition(1f, 999 /* value doesn't matter */);
@@ -1080,7 +1048,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void qsExpansion_clippingQs() {
reset(mScrimBehind);
mScrimController.setClipsQsScrim(true);
@@ -1094,7 +1061,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void qsExpansion_half_clippingQs() {
reset(mScrimBehind);
mScrimController.setClipsQsScrim(true);
@@ -1108,7 +1074,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void panelExpansionAffectsAlpha() {
mScrimController.setRawPanelExpansionFraction(0f);
mScrimController.setRawPanelExpansionFraction(0.5f);
@@ -1131,7 +1096,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToUnlockedFromOff() {
// Simulate unlock with fingerprint without AOD
mScrimController.legacyTransitionTo(ScrimState.OFF);
@@ -1154,7 +1118,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToUnlockedFromAod() {
// Simulate unlock with fingerprint
mScrimController.legacyTransitionTo(ScrimState.AOD);
@@ -1177,7 +1140,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void scrimBlanksBeforeLeavingAod() {
// Simulate unlock with fingerprint
mScrimController.legacyTransitionTo(ScrimState.AOD);
@@ -1201,7 +1163,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void scrimBlankCallbackWhenUnlockingFromPulse() {
boolean[] blanked = {false};
// Simulate unlock with fingerprint
@@ -1220,7 +1181,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void blankingNotRequired_leavingAoD() {
// GIVEN display does NOT need blanking
when(mDozeParameters.getDisplayNeedsBlanking()).thenReturn(false);
@@ -1276,7 +1236,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testScrimCallback() {
int[] callOrder = {0, 0, 0};
int[] currentCall = {0};
@@ -1303,14 +1262,12 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testScrimCallbacksWithoutAmbientDisplay() {
mAlwaysOnEnabled = false;
testScrimCallback();
}
@Test
- @DisableSceneContainer
public void testScrimCallbackCancelled() {
boolean[] cancelledCalled = {false};
mScrimController.legacyTransitionTo(ScrimState.AOD, new ScrimController.Callback() {
@@ -1324,7 +1281,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testHoldsWakeLock_whenAOD() {
mScrimController.legacyTransitionTo(ScrimState.AOD);
verify(mWakeLock).acquire(anyString());
@@ -1334,7 +1290,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testDoesNotHoldWakeLock_whenUnlocking() {
mScrimController.legacyTransitionTo(ScrimState.UNLOCKED);
finishAnimationsImmediately();
@@ -1342,7 +1297,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testCallbackInvokedOnSameStateTransition() {
mScrimController.legacyTransitionTo(ScrimState.UNLOCKED);
finishAnimationsImmediately();
@@ -1352,7 +1306,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testConservesExpansionOpacityAfterTransition() {
mScrimController.legacyTransitionTo(ScrimState.UNLOCKED);
mScrimController.setRawPanelExpansionFraction(0.5f);
@@ -1370,7 +1323,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testCancelsOldAnimationBeforeBlanking() {
mScrimController.legacyTransitionTo(ScrimState.AOD);
finishAnimationsImmediately();
@@ -1383,7 +1335,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testScrimsAreNotFocusable() {
assertFalse("Behind scrim should not be focusable", mScrimBehind.isFocusable());
assertFalse("Front scrim should not be focusable", mScrimInFront.isFocusable());
@@ -1392,7 +1343,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testEatsTouchEvent() {
HashSet<ScrimState> eatsTouches =
new HashSet<>(Collections.singletonList(ScrimState.AOD));
@@ -1409,7 +1359,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testAnimatesTransitionToAod() {
when(mDozeParameters.shouldControlScreenOff()).thenReturn(false);
ScrimState.AOD.prepare(ScrimState.KEYGUARD);
@@ -1424,7 +1373,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testIsLowPowerMode() {
HashSet<ScrimState> lowPowerModeStates = new HashSet<>(Arrays.asList(
ScrimState.OFF, ScrimState.AOD, ScrimState.PULSING));
@@ -1442,7 +1390,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testScrimsOpaque_whenShadeFullyExpanded() {
mScrimController.legacyTransitionTo(ScrimState.UNLOCKED);
mScrimController.setRawPanelExpansionFraction(1);
@@ -1457,7 +1404,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testScrimsVisible_whenShadeVisible() {
mScrimController.setClipsQsScrim(true);
mScrimController.legacyTransitionTo(ScrimState.UNLOCKED);
@@ -1473,7 +1419,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testDoesntAnimate_whenUnlocking() {
// LightRevealScrim will animate the transition, we should only hide the keyguard scrims.
ScrimState.UNLOCKED.prepare(ScrimState.KEYGUARD);
@@ -1494,7 +1439,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testScrimsVisible_whenShadeVisible_clippingQs() {
mScrimController.setClipsQsScrim(true);
mScrimController.legacyTransitionTo(ScrimState.UNLOCKED);
@@ -1510,7 +1454,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testScrimsVisible_whenShadeVisibleOnLockscreen() {
mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
mScrimController.setQsPosition(0.25f, 300);
@@ -1522,7 +1465,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testNotificationScrimTransparent_whenOnLockscreen() {
mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
// even if shade is not pulled down, panel has expansion of 1 on the lockscreen
@@ -1535,7 +1477,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testNotificationScrimVisible_afterOpeningShadeFromLockscreen() {
mScrimController.setRawPanelExpansionFraction(1);
mScrimController.legacyTransitionTo(SHADE_LOCKED);
@@ -1547,7 +1488,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void qsExpansion_BehindTint_shadeLocked_bouncerActive_usesBouncerProgress() {
when(mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(true);
// clipping doesn't change tested logic but allows to assert scrims more in line with
@@ -1564,7 +1504,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void expansionNotificationAlpha_shadeLocked_bouncerActive_usesBouncerInterpolator() {
when(mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(true);
@@ -1581,7 +1520,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void expansionNotificationAlpha_shadeLocked_bouncerNotActive_usesShadeInterpolator() {
when(mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(false);
@@ -1597,7 +1535,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void notificationAlpha_unnocclusionAnimating_bouncerNotActive_usesKeyguardNotifAlpha() {
when(mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(false);
@@ -1617,7 +1554,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void notificationAlpha_inKeyguardState_bouncerActive_usesInvertedBouncerInterpolator() {
when(mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(true);
mScrimController.setClipsQsScrim(true);
@@ -1638,7 +1574,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void notificationAlpha_inKeyguardState_bouncerNotActive_usesInvertedShadeInterpolator() {
when(mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(false);
mScrimController.setClipsQsScrim(true);
@@ -1659,7 +1594,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void behindTint_inKeyguardState_bouncerNotActive_usesKeyguardBehindTint() {
when(mStatusBarKeyguardViewManager.isPrimaryBouncerInTransit()).thenReturn(false);
mScrimController.setClipsQsScrim(false);
@@ -1671,7 +1605,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testNotificationTransparency_followsTransitionToFullShade() {
mScrimController.setClipsQsScrim(true);
@@ -1713,7 +1646,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void notificationTransparency_followsNotificationScrimProgress() {
mScrimController.legacyTransitionTo(SHADE_LOCKED);
mScrimController.setRawPanelExpansionFraction(1.0f);
@@ -1730,7 +1662,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void notificationAlpha_qsNotClipped_alphaMatchesNotificationExpansionProgress() {
mScrimController.setClipsQsScrim(false);
mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
@@ -1766,7 +1697,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void setNotificationsOverScrollAmount_setsTranslationYOnNotificationsScrim() {
int overScrollAmount = 10;
@@ -1776,7 +1706,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void setNotificationsOverScrollAmount_doesNotSetTranslationYOnBehindScrim() {
int overScrollAmount = 10;
@@ -1786,7 +1715,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void setNotificationsOverScrollAmount_doesNotSetTranslationYOnFrontScrim() {
int overScrollAmount = 10;
@@ -1796,7 +1724,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void notificationBoundsTopGetsPassedToKeyguard() {
mScrimController.legacyTransitionTo(SHADE_LOCKED);
mScrimController.setQsPosition(1f, 0);
@@ -1807,7 +1734,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void notificationBoundsTopDoesNotGetPassedToKeyguardWhenNotifScrimIsNotVisible() {
mScrimController.setKeyguardOccluded(true);
mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
@@ -1818,7 +1744,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void transitionToDreaming() {
mScrimController.setRawPanelExpansionFraction(0f);
mScrimController.setBouncerHiddenFraction(KeyguardBouncerConstants.EXPANSION_HIDDEN);
@@ -1838,7 +1763,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void keyguardGoingAwayUpdateScrims() {
when(mKeyguardStateController.isKeyguardGoingAway()).thenReturn(true);
mScrimController.updateScrims();
@@ -1848,7 +1772,6 @@ public class ScrimControllerTest extends SysuiTestCase {
@Test
- @DisableSceneContainer
public void setUnOccludingAnimationKeyguard() {
mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
finishAnimationsImmediately();
@@ -1863,7 +1786,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testHidesScrimFlickerInActivity() {
mScrimController.setKeyguardOccluded(true);
mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
@@ -1882,7 +1804,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void notificationAlpha_inKeyguardState_bouncerNotActive_clipsQsScrimFalse() {
mScrimController.setClipsQsScrim(false);
mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
@@ -1892,7 +1813,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void aodStateSetsFrontScrimToNotBlend() {
mScrimController.legacyTransitionTo(ScrimState.AOD);
assertFalse("Front scrim should not blend with main color",
@@ -1900,7 +1820,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void applyState_unlocked_bouncerShowing() {
mScrimController.legacyTransitionTo(ScrimState.UNLOCKED);
mScrimController.setBouncerHiddenFraction(0.99f);
@@ -1910,7 +1829,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void ignoreTransitionRequestWhileKeyguardTransitionRunning() {
mScrimController.legacyTransitionTo(ScrimState.UNLOCKED);
mScrimController.mBouncerToGoneTransition.accept(
@@ -1923,7 +1841,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void primaryBouncerToGoneOnFinishCallsKeyguardFadedAway() {
when(mKeyguardStateController.isKeyguardFadingAway()).thenReturn(true);
mScrimController.mBouncerToGoneTransition.accept(
@@ -1934,7 +1851,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void primaryBouncerToGoneOnFinishCallsLightBarController() {
reset(mLightBarController);
mScrimController.mBouncerToGoneTransition.accept(
@@ -1946,7 +1862,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testDoNotAnimateChangeIfOccludeAnimationPlaying() {
mScrimController.setOccludeAnimationPlaying(true);
mScrimController.legacyTransitionTo(ScrimState.UNLOCKED);
@@ -1955,7 +1870,6 @@ public class ScrimControllerTest extends SysuiTestCase {
}
@Test
- @DisableSceneContainer
public void testNotifScrimAlpha_1f_afterUnlockFinishedAndExpanded() {
mScrimController.legacyTransitionTo(ScrimState.KEYGUARD);
when(mKeyguardUnlockAnimationController.isPlayingCannedUnlockAnimation()).thenReturn(true);
diff --git a/packages/SystemUI/tests/utils/src/com/android/app/WallpaperManagerKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/app/WallpaperManagerKosmos.kt
index f893aba240fc..d6e6ea8f9a29 100644
--- a/packages/SystemUI/tests/utils/src/com/android/app/WallpaperManagerKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/app/WallpaperManagerKosmos.kt
@@ -20,6 +20,6 @@ import android.content.applicationContext
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
-val Kosmos.wallpaperManager: WallpaperManager by Fixture {
+var Kosmos.wallpaperManager: WallpaperManager by Fixture {
WallpaperManager.getInstance(applicationContext)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/domain/interactor/CommunalSceneTransitionInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/domain/interactor/CommunalSceneTransitionInteractorKosmos.kt
index e6e59e1a523e..75c4b6f5366b 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/domain/interactor/CommunalSceneTransitionInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/domain/interactor/CommunalSceneTransitionInteractorKosmos.kt
@@ -22,6 +22,7 @@ import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
+import com.android.systemui.power.domain.interactor.powerInteractor
val Kosmos.communalSceneTransitionInteractor: CommunalSceneTransitionInteractor by
Kosmos.Fixture {
@@ -33,5 +34,6 @@ val Kosmos.communalSceneTransitionInteractor: CommunalSceneTransitionInteractor
sceneInteractor = communalSceneInteractor,
repository = communalSceneTransitionRepository,
keyguardInteractor = keyguardInteractor,
+ powerInteractor = powerInteractor,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorKosmos.kt
index 7b0d208298d0..38372acff113 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorKosmos.kt
@@ -18,6 +18,8 @@ package com.android.systemui.keyguard.domain.interactor
import com.android.systemui.bouncer.domain.interactor.primaryBouncerInteractor
import com.android.systemui.communal.domain.interactor.communalInteractor
+import com.android.systemui.communal.domain.interactor.communalSceneInteractor
+import com.android.systemui.communal.domain.interactor.communalSettingsInteractor
import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
@@ -39,5 +41,7 @@ val Kosmos.fromAlternateBouncerTransitionInteractor by
powerInteractor = powerInteractor,
keyguardOcclusionInteractor = keyguardOcclusionInteractor,
primaryBouncerInteractor = primaryBouncerInteractor,
+ communalSceneInteractor = communalSceneInteractor,
+ communalSettingsInteractor = communalSettingsInteractor,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorKosmos.kt
index 3c369d7d954f..6b240b5f36ac 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractorKosmos.kt
@@ -18,6 +18,7 @@ package com.android.systemui.keyguard.domain.interactor
import com.android.keyguard.keyguardSecurityModel
import com.android.systemui.communal.domain.interactor.communalSceneInteractor
+import com.android.systemui.communal.domain.interactor.communalSettingsInteractor
import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
@@ -37,6 +38,7 @@ var Kosmos.fromPrimaryBouncerTransitionInteractor by
mainDispatcher = testDispatcher,
keyguardInteractor = keyguardInteractor,
communalSceneInteractor = communalSceneInteractor,
+ communalSettingsInteractor = communalSettingsInteractor,
keyguardSecurityModel = keyguardSecurityModel,
selectedUserInteractor = selectedUserInteractor,
powerInteractor = powerInteractor,
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractorKosmos.kt
index 8844eb040f02..4068a2290559 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractorKosmos.kt
@@ -22,6 +22,7 @@ import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.statusbar.notification.domain.interactor.activeNotificationsInteractor
+import com.android.systemui.statusbar.notification.promoted.domain.interactor.aodPromotedNotificationInteractor
import com.android.systemui.statusbar.notification.stack.domain.interactor.headsUpNotificationInteractor
import com.android.systemui.wallpapers.domain.interactor.wallpaperFocalAreaInteractor
@@ -30,6 +31,7 @@ val Kosmos.keyguardClockInteractor by
KeyguardClockInteractor(
mediaCarouselInteractor = mediaCarouselInteractor,
activeNotificationsInteractor = activeNotificationsInteractor,
+ aodPromotedNotificationInteractor = aodPromotedNotificationInteractor,
shadeInteractor = shadeInteractor,
keyguardInteractor = keyguardInteractor,
keyguardTransitionInteractor = keyguardTransitionInteractor,
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelKosmos.kt
index ea3feeaf0854..78356318cbb4 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelKosmos.kt
@@ -17,6 +17,7 @@ package com.android.systemui.keyguard.ui.viewmodel
import com.android.systemui.communal.domain.interactor.communalInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
+import com.android.systemui.dump.dumpManager
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.keyguard.domain.interactor.pulseExpansionInteractor
@@ -26,6 +27,7 @@ import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.shade.ui.viewmodel.notificationShadeWindowModel
import com.android.systemui.statusbar.notification.icon.ui.viewmodel.notificationIconContainerAlwaysOnDisplayViewModel
+import com.android.systemui.statusbar.notification.promoted.domain.interactor.aodPromotedNotificationInteractor
import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationsKeyguardInteractor
import com.android.systemui.statusbar.phone.dozeParameters
import com.android.systemui.statusbar.phone.screenOffAnimationController
@@ -41,6 +43,7 @@ val Kosmos.keyguardRootViewModel by Fixture {
keyguardTransitionInteractor = keyguardTransitionInteractor,
notificationsKeyguardInteractor = notificationsKeyguardInteractor,
pulseExpansionInteractor = pulseExpansionInteractor,
+ aodPromotedNotificationInteractor = aodPromotedNotificationInteractor,
aodNotificationIconViewModel = notificationIconContainerAlwaysOnDisplayViewModel,
notificationShadeWindowModel = notificationShadeWindowModel,
alternateBouncerToAodTransitionViewModel = alternateBouncerToAodTransitionViewModel,
@@ -90,5 +93,6 @@ val Kosmos.keyguardRootViewModel by Fixture {
aodBurnInViewModel = aodBurnInViewModel,
shadeInteractor = shadeInteractor,
wallpaperFocalAreaInteractor = wallpaperFocalAreaInteractor,
+ dumpManager = dumpManager,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt
index 8b4de2bcc26f..05f1c0bac982 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/EntryUtil.kt
@@ -33,3 +33,6 @@ inline fun NotificationEntry.modifyEntry(
fun getAttachState(entry: ListEntry): ListAttachState {
return entry.attachState
}
+
+fun buildEntry(block: NotificationEntryBuilder.() -> Unit) =
+ NotificationEntryBuilder().apply(block).build()
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/domain/interactor/CommunalBackActionInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/promoted/domain/interactor/AODPromotedNotificationInteractorKosmos.kt
index 57c8fd066ea8..df1c82278bc2 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/domain/interactor/CommunalBackActionInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/promoted/domain/interactor/AODPromotedNotificationInteractorKosmos.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2024 The Android Open Source Project
+ * Copyright (C) 2025 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package com.android.systemui.communal.domain.interactor
+package com.android.systemui.statusbar.notification.promoted.domain.interactor
+import com.android.systemui.dump.dumpManager
import com.android.systemui.kosmos.Kosmos
-import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.statusbar.notification.domain.interactor.activeNotificationsInteractor
-val Kosmos.communalBackActionInteractor by
+val Kosmos.aodPromotedNotificationInteractor by
Kosmos.Fixture {
- CommunalBackActionInteractor(
- communalInteractor = communalInteractor,
- communalSceneInteractor = communalSceneInteractor,
- sceneInteractor = sceneInteractor,
+ AODPromotedNotificationInteractor(
+ activeNotificationsInteractor = activeNotificationsInteractor,
+ dumpManager = dumpManager,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelKosmos.kt
index 7a2b7c24252b..047bd13f0c27 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelKosmos.kt
@@ -29,6 +29,7 @@ import com.android.systemui.keyguard.ui.viewmodel.aodToGoneTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.aodToLockscreenTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.aodToOccludedTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.aodToPrimaryBouncerTransitionViewModel
+import com.android.systemui.keyguard.ui.viewmodel.dozingToDreamingTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.dozingToGlanceableHubTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.dozingToLockscreenTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.dozingToOccludedTransitionViewModel
@@ -81,6 +82,7 @@ val Kosmos.sharedNotificationContainerViewModel by Fixture {
aodToLockscreenTransitionViewModel = aodToLockscreenTransitionViewModel,
aodToOccludedTransitionViewModel = aodToOccludedTransitionViewModel,
aodToPrimaryBouncerTransitionViewModel = aodToPrimaryBouncerTransitionViewModel,
+ dozingToDreamingTransitionViewModel = dozingToDreamingTransitionViewModel,
dozingToGlanceableHubTransitionViewModel = dozingToGlanceableHubTransitionViewModel,
dozingToLockscreenTransitionViewModel = dozingToLockscreenTransitionViewModel,
dozingToOccludedTransitionViewModel = dozingToOccludedTransitionViewModel,
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/FakeMobileIconsInteractor.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/FakeMobileIconsInteractor.kt
index 352f6cf011e1..9b6f205fba72 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/FakeMobileIconsInteractor.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/pipeline/mobile/domain/interactor/FakeMobileIconsInteractor.kt
@@ -26,6 +26,7 @@ import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel
import com.android.systemui.statusbar.pipeline.mobile.util.MobileMappingsProxy
import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
class FakeMobileIconsInteractor(
mobileMappings: MobileMappingsProxy,
@@ -73,6 +74,8 @@ class FakeMobileIconsInteractor(
override val icons: MutableStateFlow<List<MobileIconInteractor>> = MutableStateFlow(emptyList())
+ override val isStackable: StateFlow<Boolean> = MutableStateFlow(false)
+
private val _defaultMobileIconMapping = MutableStateFlow(TEST_MAPPING)
override val defaultMobileIconMapping = _defaultMobileIconMapping
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinderKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinderKosmos.kt
index dc09e3233b1e..386e0feb3b3a 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinderKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ui/binder/VolumeDialogViewBinderKosmos.kt
@@ -16,7 +16,6 @@
package com.android.systemui.volume.dialog.ui.binder
-import android.content.applicationContext
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.volume.dialog.ringer.volumeDialogRingerViewBinder
import com.android.systemui.volume.dialog.settings.ui.binder.volumeDialogSettingsButtonViewBinder
@@ -28,12 +27,13 @@ import com.android.systemui.volume.dialog.utils.volumeTracer
val Kosmos.volumeDialogViewBinder by
Kosmos.Fixture {
VolumeDialogViewBinder(
- applicationContext.resources,
volumeDialogViewModel,
jankListenerFactory,
volumeTracer,
- volumeDialogRingerViewBinder,
- volumeDialogSlidersViewBinder,
- volumeDialogSettingsButtonViewBinder,
+ listOf(
+ volumeDialogSlidersViewBinder,
+ volumeDialogRingerViewBinder,
+ volumeDialogSettingsButtonViewBinder,
+ ),
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/wallpapers/data/repository/WallpaperRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/wallpapers/data/repository/WallpaperRepositoryKosmos.kt
index 6b955ffb0b68..7ebec6c3a7b9 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/wallpapers/data/repository/WallpaperRepositoryKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/wallpapers/data/repository/WallpaperRepositoryKosmos.kt
@@ -16,9 +16,27 @@
package com.android.systemui.wallpapers.data.repository
+import android.content.applicationContext
+import com.android.app.wallpaperManager
+import com.android.systemui.broadcast.broadcastDispatcher
+import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.kosmos.testDispatcher
+import com.android.systemui.kosmos.testScope
+import com.android.systemui.user.data.repository.userRepository
+import com.android.systemui.util.settings.fakeSettings
-var Kosmos.fakeWallpaperRepository by Kosmos.Fixture { FakeWallpaperRepository() }
-
-var Kosmos.wallpaperRepository: WallpaperRepository by Kosmos.Fixture { fakeWallpaperRepository }
+val Kosmos.wallpaperRepository by Fixture {
+ WallpaperRepositoryImpl(
+ context = applicationContext,
+ scope = testScope.backgroundScope,
+ bgDispatcher = testDispatcher,
+ broadcastDispatcher = broadcastDispatcher,
+ userRepository = userRepository,
+ keyguardTransitionInteractor = keyguardTransitionInteractor,
+ wallpaperFocalAreaRepository = wallpaperFocalAreaRepository,
+ wallpaperManager = wallpaperManager,
+ secureSettings = fakeSettings,
+ )
+}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/window/data/repository/WindowRootViewBlurRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/window/data/repository/WindowRootViewBlurRepositoryKosmos.kt
index 96992233375d..b619e2d70724 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/window/data/repository/WindowRootViewBlurRepositoryKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/window/data/repository/WindowRootViewBlurRepositoryKosmos.kt
@@ -29,4 +29,5 @@ class FakeWindowRootViewBlurRepository : WindowRootViewBlurRepository {
override val blurRadius: MutableStateFlow<Int> = MutableStateFlow(0)
override val isBlurOpaque: MutableStateFlow<Boolean> = MutableStateFlow(false)
override val isBlurSupported: MutableStateFlow<Boolean> = MutableStateFlow(false)
+ override var blurAppliedListener: BlurAppliedListener? = null
}
diff --git a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java
index 5283df5ca7e1..4fa0d506f09e 100644
--- a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java
+++ b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickController.java
@@ -538,6 +538,11 @@ public class AutoclickController extends BaseEventStreamTransformation {
return mActive;
}
+ @VisibleForTesting
+ long getScheduledClickTimeForTesting() {
+ return mScheduledClickTime;
+ }
+
/**
* Updates delay that should be used when scheduling clicks. The delay will be used only for
* clicks scheduled after this point (pending click tasks are not affected).
diff --git a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java
index cf928e2f3fa4..614b2285d6e0 100644
--- a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java
+++ b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java
@@ -168,6 +168,10 @@ public class AutoclickTypePanel {
}
public void hide() {
+ // Sets the button background to unselected styling, this is necessary to make sure the
+ // button background styling is correct when the panel shows up next time.
+ toggleSelectedButtonStyle(mSelectedButton, /* isSelected= */ false);
+
mWindowManager.removeView(mContentView);
}
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index d47aab061788..e0f2939a2083 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -16,7 +16,6 @@
package com.android.server.appwidget;
-import static android.appwidget.flags.Flags.checkRemoteViewsUriPermission;
import static android.appwidget.flags.Flags.remoteAdapterConversion;
import static android.appwidget.flags.Flags.remoteViewsProto;
import static android.appwidget.flags.Flags.removeAppWidgetServiceIoFromCriticalPath;
@@ -2560,9 +2559,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
// Make sure the package runs under the caller uid.
mSecurityPolicy.enforceCallFromPackage(callingPackage);
// Make sure RemoteViews do not contain URIs that the caller cannot access.
- if (checkRemoteViewsUriPermission()) {
- checkRemoteViewsUris(views);
- }
+ checkRemoteViewsUris(views);
synchronized (mLock) {
ensureGroupStateLoadedLocked(userId);
diff --git a/services/core/Android.bp b/services/core/Android.bp
index 00db11e72dd9..2aaf6a9c2391 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -300,10 +300,7 @@ java_genrule_combiner {
java_library {
name: "services.core",
- static_libs: select(release_flag("RELEASE_SERVICES_JAVA_GENRULE_COMBINER"), {
- true: ["services.core.combined"],
- default: ["services.core.priorityboosted"],
- }),
+ static_libs: ["services.core.combined"],
}
java_library_host {
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index f34016905502..6e3d7bd19b41 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -8315,14 +8315,6 @@ public class ActivityManagerService extends IActivityManager.Stub
setThreadScheduler(proc.getRenderThreadTid(),
SCHED_FIFO | SCHED_RESET_ON_FORK, 1);
} else {
- if (Flags.resetOnForkEnabled()) {
- if (Process.getThreadScheduler(proc.getRenderThreadTid())
- == Process.SCHED_OTHER) {
- Process.setThreadScheduler(proc.getRenderThreadTid(),
- Process.SCHED_OTHER | Process.SCHED_RESET_ON_FORK,
- 0);
- }
- }
setThreadPriority(proc.getRenderThreadTid(),
THREAD_PRIORITY_TOP_APP_BOOST);
}
diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java
index cd40905b01da..61c5501a7b5a 100644
--- a/services/core/java/com/android/server/am/OomAdjuster.java
+++ b/services/core/java/com/android/server/am/OomAdjuster.java
@@ -471,13 +471,6 @@ public class OomAdjuster {
}
void setThreadPriority(int tid, int priority) {
- if (Flags.resetOnForkEnabled()) {
- if (Process.getThreadScheduler(tid) == Process.SCHED_OTHER) {
- Process.setThreadScheduler(tid,
- Process.SCHED_OTHER | Process.SCHED_RESET_ON_FORK,
- 0);
- }
- }
Process.setThreadPriority(tid, priority);
}
}
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index 27e9e44f1090..e0fbaf43ea43 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -31,6 +31,7 @@ import static android.app.ActivityManagerInternal.ALLOW_FULL_ONLY;
import static android.app.ActivityManagerInternal.ALLOW_NON_FULL;
import static android.app.ActivityManagerInternal.ALLOW_NON_FULL_IN_PROFILE;
import static android.app.ActivityManagerInternal.ALLOW_PROFILES_OR_NON_FULL;
+import static android.app.KeyguardManager.LOCK_ON_USER_SWITCH_CALLBACK;
import static android.os.PowerWhitelistManager.REASON_BOOT_COMPLETED;
import static android.os.PowerWhitelistManager.REASON_LOCKED_BOOT_COMPLETED;
import static android.os.PowerWhitelistManager.TEMPORARY_ALLOWLIST_TYPE_FOREGROUND_SERVICE_ALLOWED;
@@ -3904,10 +3905,6 @@ class UserController implements Handler.Callback {
return mService.mWindowManager;
}
- ActivityTaskManagerInternal getActivityTaskManagerInternal() {
- return mService.mAtmInternal;
- }
-
void activityManagerOnUserStopped(@UserIdInt int userId) {
LocalServices.getService(ActivityTaskManagerInternal.class).onUserStopped(userId);
}
@@ -4122,40 +4119,25 @@ class UserController implements Handler.Callback {
}
void lockDeviceNowAndWaitForKeyguardShown() {
- if (getWindowManager().isKeyguardLocked()) {
- Slogf.w(TAG, "Not locking the device since the keyguard is already locked");
- return;
- }
-
final TimingsTraceAndSlog t = new TimingsTraceAndSlog();
t.traceBegin("lockDeviceNowAndWaitForKeyguardShown");
final CountDownLatch latch = new CountDownLatch(1);
- ActivityTaskManagerInternal.ScreenObserver screenObserver =
- new ActivityTaskManagerInternal.ScreenObserver() {
- @Override
- public void onAwakeStateChanged(boolean isAwake) {
-
- }
-
- @Override
- public void onKeyguardStateChanged(boolean isShowing) {
- if (isShowing) {
- latch.countDown();
- }
- }
- };
-
- getActivityTaskManagerInternal().registerScreenObserver(screenObserver);
- getWindowManager().lockDeviceNow();
+ Bundle bundle = new Bundle();
+ bundle.putBinder(LOCK_ON_USER_SWITCH_CALLBACK, new IRemoteCallback.Stub() {
+ public void sendResult(Bundle data) {
+ latch.countDown();
+ }
+ });
+ getWindowManager().lockNow(bundle);
try {
if (!latch.await(20, TimeUnit.SECONDS)) {
- throw new RuntimeException("Keyguard is not shown in 20 seconds");
+ throw new RuntimeException("User controller expected a callback while waiting "
+ + "to show the keyguard. Timed out after 20 seconds.");
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
- getActivityTaskManagerInternal().unregisterScreenObserver(screenObserver);
t.traceEnd();
}
}
diff --git a/services/core/java/com/android/server/am/flags.aconfig b/services/core/java/com/android/server/am/flags.aconfig
index e89889e794ba..27c384a22fb6 100644
--- a/services/core/java/com/android/server/am/flags.aconfig
+++ b/services/core/java/com/android/server/am/flags.aconfig
@@ -205,13 +205,6 @@ flag {
}
flag {
- name: "reset_on_fork_enabled"
- namespace: "system_performance"
- description: "Set reset_on_fork flag."
- bug: "370988407"
-}
-
-flag {
name: "push_global_state_to_oomadjuster"
namespace: "backstage_power"
description: "Migrate OomAdjuster pulled device state to a push model"
@@ -319,3 +312,14 @@ flag {
purpose: PURPOSE_BUGFIX
}
}
+
+flag {
+ name: "lower_sms_oom_importance"
+ namespace: "backstage_power"
+ description: "Lower messaging app process oom importance to PERCEPTIBLE_APP_ADJ + 1."
+ bug: "372511805"
+ is_fixed_read_only: true
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
diff --git a/services/core/java/com/android/server/appbinding/AppBindingConstants.java b/services/core/java/com/android/server/appbinding/AppBindingConstants.java
index 71847694b1d8..561cc0ef0a3b 100644
--- a/services/core/java/com/android/server/appbinding/AppBindingConstants.java
+++ b/services/core/java/com/android/server/appbinding/AppBindingConstants.java
@@ -102,9 +102,16 @@ public class AppBindingConstants {
boolean smsServiceEnabled = parser.getBoolean(SMS_SERVICE_ENABLED_KEY, true);
- int smsAppBindFlags = parser.getInt(
- SMS_APP_BIND_FLAGS_KEY,
- Context.BIND_NOT_VISIBLE | Context.BIND_FOREGROUND_SERVICE);
+ int smsAppBindFlags;
+ if (com.android.server.am.Flags.lowerSmsOomImportance()) {
+ smsAppBindFlags = parser.getInt(
+ SMS_APP_BIND_FLAGS_KEY,
+ Context.BIND_ALMOST_PERCEPTIBLE | Context.BIND_FOREGROUND_SERVICE);
+ } else {
+ smsAppBindFlags = parser.getInt(
+ SMS_APP_BIND_FLAGS_KEY,
+ Context.BIND_NOT_VISIBLE | Context.BIND_FOREGROUND_SERVICE);
+ }
long serviceStableConnectionThresholdSec = parser.getLong(
SERVICE_STABLE_CONNECTION_THRESHOLD_SEC_KEY, TimeUnit.MINUTES.toSeconds(2));
diff --git a/services/core/java/com/android/server/audio/AudioDeviceBroker.java b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
index 4ec813827cbc..6d6e1fb6bfb3 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceBroker.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceBroker.java
@@ -1030,38 +1030,10 @@ public class AudioDeviceBroker {
}
}
- BtDeviceInfo createBtDeviceInfo(@NonNull BtDeviceChangedData d, @NonNull BluetoothDevice device,
- int state) {
- int audioDevice;
- int codec = AudioSystem.AUDIO_FORMAT_DEFAULT;
- switch (d.mInfo.getProfile()) {
- case BluetoothProfile.A2DP_SINK:
- audioDevice = AudioSystem.DEVICE_IN_BLUETOOTH_A2DP;
- break;
- case BluetoothProfile.A2DP:
- audioDevice = AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP;
- break;
- case BluetoothProfile.HEARING_AID:
- audioDevice = AudioSystem.DEVICE_OUT_HEARING_AID;
- break;
- case BluetoothProfile.LE_AUDIO:
- if (d.mInfo.isLeOutput()) {
- audioDevice = AudioSystem.DEVICE_OUT_BLE_HEADSET;
- } else {
- audioDevice = AudioSystem.DEVICE_IN_BLE_HEADSET;
- }
- break;
- case BluetoothProfile.LE_AUDIO_BROADCAST:
- audioDevice = AudioSystem.DEVICE_OUT_BLE_BROADCAST;
- break;
- case BluetoothProfile.HEADSET:
- // the actual device type is not important at this point and
- // will be set by BtHelper.handleBtScoActiveDeviceChange()
- audioDevice = AudioSystem.DEVICE_OUT_BLUETOOTH_SCO;
- break;
- default: throw new IllegalArgumentException("Invalid profile " + d.mInfo.getProfile());
- }
- return new BtDeviceInfo(d, device, state, audioDevice, codec);
+ /*package*/ static BtDeviceInfo createBtDeviceInfo(@NonNull BtDeviceChangedData d,
+ @NonNull BluetoothDevice device, int state) {
+ int audioDevice = BtHelper.getTypeFromProfile(d.mInfo.getProfile(), d.mInfo.isLeOutput());
+ return new BtDeviceInfo(d, device, state, audioDevice, AudioSystem.AUDIO_FORMAT_DEFAULT);
}
private void btMediaMetricRecord(@NonNull BluetoothDevice device, String state,
@@ -1728,8 +1700,8 @@ public class AudioDeviceBroker {
}
// must be called synchronized on mConnectedDevices
- /*package*/ boolean hasScheduledA2dpConnection(BluetoothDevice btDevice) {
- final BtDeviceInfo devInfoToCheck = new BtDeviceInfo(btDevice, BluetoothProfile.A2DP);
+ /*package*/ boolean hasScheduledA2dpConnection(BluetoothDevice btDevice, int profile) {
+ final BtDeviceInfo devInfoToCheck = new BtDeviceInfo(btDevice, profile);
return mBrokerHandler.hasEqualMessages(MSG_L_SET_BT_ACTIVE_DEVICE, devInfoToCheck);
}
diff --git a/services/core/java/com/android/server/audio/AudioDeviceInventory.java b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
index 37ef9a0648a6..ef10793fd955 100644
--- a/services/core/java/com/android/server/audio/AudioDeviceInventory.java
+++ b/services/core/java/com/android/server/audio/AudioDeviceInventory.java
@@ -987,8 +987,10 @@ public class AudioDeviceInventory {
"onBluetoothDeviceConfigChange addr=" + address
+ " event=" + BtHelper.deviceEventToString(event)));
+ int deviceType = BtHelper.getTypeFromProfile(btInfo.mProfile, btInfo.mIsLeOutput);
+
synchronized (mDevicesLock) {
- if (mDeviceBroker.hasScheduledA2dpConnection(btDevice)) {
+ if (mDeviceBroker.hasScheduledA2dpConnection(btDevice, btInfo.mProfile)) {
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
"A2dp config change ignored (scheduled connection change)")
.printSlog(EventLogger.Event.ALOGI, TAG));
@@ -996,8 +998,7 @@ public class AudioDeviceInventory {
.record();
return delayMs;
}
- final String key = DeviceInfo.makeDeviceListKey(
- AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address);
+ final String key = DeviceInfo.makeDeviceListKey(deviceType, address);
final DeviceInfo di = mConnectedDevices.get(key);
if (di == null) {
Log.e(TAG, "invalid null DeviceInfo in onBluetoothDeviceConfigChange");
@@ -1022,7 +1023,7 @@ public class AudioDeviceInventory {
BtHelper.getName(btDevice), codec);
if (res != AudioSystem.AUDIO_STATUS_OK) {
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
- "APM handleDeviceConfigChange failed for A2DP device addr="
+ "APM handleDeviceConfigChange failed for device addr="
+ address + " codec="
+ AudioSystem.audioFormatToString(codec))
.printSlog(EventLogger.Event.ALOGE, TAG));
@@ -1033,7 +1034,7 @@ public class AudioDeviceInventory {
BluetoothProfile.STATE_DISCONNECTED));
} else {
AudioService.sDeviceLogger.enqueue(new EventLogger.StringEvent(
- "APM handleDeviceConfigChange success for A2DP device addr="
+ "APM handleDeviceConfigChange success for device addr="
+ address
+ " codec=" + AudioSystem.audioFormatToString(codec))
.printSlog(EventLogger.Event.ALOGI, TAG));
diff --git a/services/core/java/com/android/server/audio/BtHelper.java b/services/core/java/com/android/server/audio/BtHelper.java
index 0479c70656b7..922116999bc7 100644
--- a/services/core/java/com/android/server/audio/BtHelper.java
+++ b/services/core/java/com/android/server/audio/BtHelper.java
@@ -1291,6 +1291,29 @@ public class BtHelper {
return 0; // 0 is not a valid profile
}
+ /*package */ static int getTypeFromProfile(int profile, boolean isLeOutput) {
+ switch (profile) {
+ case BluetoothProfile.A2DP_SINK:
+ return AudioSystem.DEVICE_IN_BLUETOOTH_A2DP;
+ case BluetoothProfile.A2DP:
+ return AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP;
+ case BluetoothProfile.HEARING_AID:
+ return AudioSystem.DEVICE_OUT_HEARING_AID;
+ case BluetoothProfile.LE_AUDIO:
+ if (isLeOutput) {
+ return AudioSystem.DEVICE_OUT_BLE_HEADSET;
+ } else {
+ return AudioSystem.DEVICE_IN_BLE_HEADSET;
+ }
+ case BluetoothProfile.LE_AUDIO_BROADCAST:
+ return AudioSystem.DEVICE_OUT_BLE_BROADCAST;
+ case BluetoothProfile.HEADSET:
+ return AudioSystem.DEVICE_OUT_BLUETOOTH_SCO;
+ default:
+ throw new IllegalArgumentException("Invalid profile " + profile);
+ }
+ }
+
/*package */ static Bundle getPreferredAudioProfiles(String address) {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
return adapter.getPreferredAudioProfiles(adapter.getRemoteDevice(address));
diff --git a/services/core/java/com/android/server/display/DisplayDevice.java b/services/core/java/com/android/server/display/DisplayDevice.java
index 2bdb5c25d0d5..a749a4013cdc 100644
--- a/services/core/java/com/android/server/display/DisplayDevice.java
+++ b/services/core/java/com/android/server/display/DisplayDevice.java
@@ -68,6 +68,8 @@ abstract class DisplayDevice {
private int mCurrentLayerStack = -1;
private int mCurrentFlags = 0;
private int mCurrentOrientation = -1;
+ private int mLastDisplayWidth;
+ private int mLastDisplayHeight;
private Rect mCurrentLayerStackRect;
private Rect mCurrentDisplayRect;
private final Context mContext;
@@ -216,9 +218,9 @@ abstract class DisplayDevice {
}
/**
- * Gives the display device a chance to update its properties while in a transaction.
+ * Updates the surface for the display.
*/
- public void performTraversalLocked(SurfaceControl.Transaction t) {
+ public void configureSurfaceLocked(SurfaceControl.Transaction t) {
}
/**
@@ -374,6 +376,29 @@ abstract class DisplayDevice {
}
/**
+ * Configure transaction with the display size.
+ */
+ public void configureDisplaySizeLocked(SurfaceControl.Transaction t) {
+ DisplayDeviceInfo info = getDisplayDeviceInfoLocked();
+ boolean isInstalledRotated = info.installOrientation == ROTATION_90
+ || info.installOrientation == ROTATION_270;
+ int displayWidth = isInstalledRotated ? info.height : info.width;
+ int displayHeight = isInstalledRotated ? info.width : info.height;
+ setDisplaySizeLocked(t, displayWidth, displayHeight);
+ }
+
+ /**
+ * Sets display size while in a transaction.
+ */
+ public final void setDisplaySizeLocked(SurfaceControl.Transaction t, int width, int height) {
+ if (width != mLastDisplayWidth && height != mLastDisplayHeight) {
+ mLastDisplayWidth = width;
+ mLastDisplayHeight = height;
+ t.setDisplaySize(mDisplayToken, width, height);
+ }
+ }
+
+ /**
* Sets the display surface while in a transaction.
*/
public final void setSurfaceLocked(SurfaceControl.Transaction t, Surface surface) {
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 854b0dd7676b..b6a3f4041b13 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -3122,7 +3122,6 @@ public final class DisplayManagerService extends SystemService {
displayTransactions.get(display.getDisplayIdLocked(), t);
if (device != null) {
configureDisplayLocked(displayTransaction, device);
- device.performTraversalLocked(displayTransaction);
}
});
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index 83ca563e0534..324f95a5974b 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -35,6 +35,7 @@ import android.os.Looper;
import android.os.PowerManager;
import android.os.SystemProperties;
import android.os.Trace;
+import android.util.DisplayMetrics;
import android.util.DisplayUtils;
import android.util.LongSparseArray;
import android.util.Slog;
@@ -84,6 +85,10 @@ final class LocalDisplayAdapter extends DisplayAdapter {
private static final String PROPERTY_EMULATOR_CIRCULAR = "ro.boot.emulator.circular";
private static final double DEFAULT_DISPLAY_SIZE = 24.0;
+ // Touch target size 10.4mm in inches (divided by mm per inch 25.4)
+ private static final double EXTERNAL_DISPLAY_BASE_TOUCH_TARGET_SIZE_IN_INCHES = 10.4 / 25.4;
+
+ private static final double BASE_TOUCH_TARGET_SIZE_DP = 48.0;
private final LongSparseArray<LocalDisplayDevice> mDevices = new LongSparseArray<>();
@@ -530,17 +535,20 @@ final class LocalDisplayAdapter extends DisplayAdapter {
if (densityMapping == null) {
if (getFeatureFlags().isBaseDensityForExternalDisplaysEnabled()
&& !mStaticDisplayInfo.isInternal) {
- double dpi;
+ double ppi;
if (mActiveSfDisplayMode.xDpi > 0 && mActiveSfDisplayMode.yDpi > 0) {
- dpi = Math.sqrt((Math.pow(mActiveSfDisplayMode.xDpi, 2)
+ ppi = Math.sqrt((Math.pow(mActiveSfDisplayMode.xDpi, 2)
+ Math.pow(mActiveSfDisplayMode.yDpi, 2)) / 2);
} else {
// xDPI and yDPI is missing, calculate DPI from display resolution and
// default display size
- dpi = Math.sqrt(Math.pow(mInfo.width, 2) + Math.pow(mInfo.height, 2))
+ ppi = Math.sqrt(Math.pow(mInfo.width, 2) + Math.pow(mInfo.height, 2))
/ DEFAULT_DISPLAY_SIZE;
}
+ double pixels = ppi * EXTERNAL_DISPLAY_BASE_TOUCH_TARGET_SIZE_IN_INCHES;
+ double dpi =
+ pixels * DisplayMetrics.DENSITY_DEFAULT / BASE_TOUCH_TARGET_SIZE_DP;
return (int) (dpi + 0.5);
}
return (int) (mStaticDisplayInfo.density * 160 + 0.5);
diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java
index f9d413732e3e..b2b9ef17ec8d 100644
--- a/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -228,14 +228,17 @@ final class LogicalDisplay {
*/
private final boolean mIsAnisotropyCorrectionEnabled;
+ private final boolean mSyncedResolutionSwitchEnabled;
+
private boolean mCanHostTasks;
LogicalDisplay(int displayId, int layerStack, DisplayDevice primaryDisplayDevice) {
- this(displayId, layerStack, primaryDisplayDevice, false, false);
+ this(displayId, layerStack, primaryDisplayDevice, false, false, false);
}
LogicalDisplay(int displayId, int layerStack, DisplayDevice primaryDisplayDevice,
- boolean isAnisotropyCorrectionEnabled, boolean isAlwaysRotateDisplayDeviceEnabled) {
+ boolean isAnisotropyCorrectionEnabled, boolean isAlwaysRotateDisplayDeviceEnabled,
+ boolean isSyncedResolutionSwitchEnabled) {
mDisplayId = displayId;
mLayerStack = layerStack;
mPrimaryDisplayDevice = primaryDisplayDevice;
@@ -248,6 +251,7 @@ final class LogicalDisplay {
mBaseDisplayInfo.thermalBrightnessThrottlingDataId = mThermalBrightnessThrottlingDataId;
mIsAnisotropyCorrectionEnabled = isAnisotropyCorrectionEnabled;
mAlwaysRotateDisplayDeviceEnabled = isAlwaysRotateDisplayDeviceEnabled;
+ mSyncedResolutionSwitchEnabled = isSyncedResolutionSwitchEnabled;
mCanHostTasks = (mDisplayId == Display.DEFAULT_DISPLAY);
}
@@ -791,7 +795,12 @@ final class LogicalDisplay {
}
mDisplayPosition.set(mTempDisplayRect.left, mTempDisplayRect.top);
+
+ if (mSyncedResolutionSwitchEnabled || displayDeviceInfo.type == Display.TYPE_VIRTUAL) {
+ device.configureDisplaySizeLocked(t);
+ }
device.setProjectionLocked(t, orientation, mTempLayerStackRect, mTempDisplayRect);
+ device.configureSurfaceLocked(t);
}
/**
diff --git a/services/core/java/com/android/server/display/LogicalDisplayMapper.java b/services/core/java/com/android/server/display/LogicalDisplayMapper.java
index ecc8896b69c6..02db051dff57 100644
--- a/services/core/java/com/android/server/display/LogicalDisplayMapper.java
+++ b/services/core/java/com/android/server/display/LogicalDisplayMapper.java
@@ -1248,7 +1248,8 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener {
final int layerStack = assignLayerStackLocked(displayId);
final LogicalDisplay display = new LogicalDisplay(displayId, layerStack, device,
mFlags.isPixelAnisotropyCorrectionInLogicalDisplayEnabled(),
- mFlags.isAlwaysRotateDisplayDeviceEnabled());
+ mFlags.isAlwaysRotateDisplayDeviceEnabled(),
+ mFlags.isSyncedResolutionSwitchEnabled());
display.updateLocked(mDisplayDeviceRepo, mSyntheticModeManager);
final DisplayInfo info = display.getDisplayInfoLocked();
diff --git a/services/core/java/com/android/server/display/OverlayDisplayAdapter.java b/services/core/java/com/android/server/display/OverlayDisplayAdapter.java
index 382c88327523..b5a9b19bc5c5 100644
--- a/services/core/java/com/android/server/display/OverlayDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/OverlayDisplayAdapter.java
@@ -341,7 +341,7 @@ final class OverlayDisplayAdapter extends DisplayAdapter {
}
@Override
- public void performTraversalLocked(SurfaceControl.Transaction t) {
+ public void configureSurfaceLocked(SurfaceControl.Transaction t) {
if (mSurfaceTexture != null) {
if (mSurface == null) {
mSurface = new Surface(mSurfaceTexture);
diff --git a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
index abbdeb9da364..4779b690adfb 100644
--- a/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/VirtualDisplayAdapter.java
@@ -484,14 +484,19 @@ public class VirtualDisplayAdapter extends DisplayAdapter {
}
@Override
- public void performTraversalLocked(SurfaceControl.Transaction t) {
- if ((mPendingChanges & PENDING_RESIZE) != 0) {
- t.setDisplaySize(getDisplayTokenLocked(), mWidth, mHeight);
- }
+ public void configureSurfaceLocked(SurfaceControl.Transaction t) {
if ((mPendingChanges & PENDING_SURFACE_CHANGE) != 0) {
setSurfaceLocked(t, mSurface);
+ mPendingChanges &= ~PENDING_SURFACE_CHANGE;
+ }
+ }
+
+ @Override
+ public void configureDisplaySizeLocked(SurfaceControl.Transaction t) {
+ if ((mPendingChanges & PENDING_RESIZE) != 0) {
+ setDisplaySizeLocked(t, mWidth, mHeight);
+ mPendingChanges &= ~PENDING_RESIZE;
}
- mPendingChanges = 0;
}
@Override
diff --git a/services/core/java/com/android/server/display/WifiDisplayAdapter.java b/services/core/java/com/android/server/display/WifiDisplayAdapter.java
index 607c5d6a88bc..902eefa824b5 100644
--- a/services/core/java/com/android/server/display/WifiDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/WifiDisplayAdapter.java
@@ -640,7 +640,7 @@ final class WifiDisplayAdapter extends DisplayAdapter {
}
@Override
- public void performTraversalLocked(SurfaceControl.Transaction t) {
+ public void configureSurfaceLocked(SurfaceControl.Transaction t) {
if (mSurface != null) {
setSurfaceLocked(t, mSurface);
}
diff --git a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
index aab2760dbc66..bc5d90599b41 100644
--- a/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
+++ b/services/core/java/com/android/server/display/feature/DisplayManagerFlags.java
@@ -86,6 +86,11 @@ public class DisplayManagerFlags {
com.android.graphics.surfaceflinger.flags.Flags.FLAG_DISPLAY_CONFIG_ERROR_HAL,
com.android.graphics.surfaceflinger.flags.Flags::displayConfigErrorHal);
+ private final FlagState mSyncedResolutionSwitch = new FlagState(
+ com.android.graphics.surfaceflinger.flags.Flags.FLAG_SYNCED_RESOLUTION_SWITCH,
+ com.android.graphics.surfaceflinger.flags.Flags::syncedResolutionSwitch
+ );
+
private final FlagState mBrightnessIntRangeUserPerceptionFlagState = new FlagState(
Flags.FLAG_BRIGHTNESS_INT_RANGE_USER_PERCEPTION,
Flags::brightnessIntRangeUserPerception);
@@ -359,6 +364,10 @@ public class DisplayManagerFlags {
return mDisplayConfigErrorHalFlagState.isEnabled();
}
+ public boolean isSyncedResolutionSwitchEnabled() {
+ return mSyncedResolutionSwitch.isEnabled();
+ }
+
public boolean isBrightnessIntRangeUserPerceptionEnabled() {
return mBrightnessIntRangeUserPerceptionFlagState.isEnabled();
}
@@ -611,6 +620,7 @@ public class DisplayManagerFlags {
pw.println(" " + mEvenDimmerFlagState);
pw.println(" " + mSmallAreaDetectionFlagState);
pw.println(" " + mDisplayConfigErrorHalFlagState);
+ pw.println(" " + mSyncedResolutionSwitch);
pw.println(" " + mBrightnessIntRangeUserPerceptionFlagState);
pw.println(" " + mRestrictDisplayModes);
pw.println(" " + mBrightnessWearBedtimeModeClamperFlagState);
diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java
index 7e8bb28b6a37..2af74f620c95 100644
--- a/services/core/java/com/android/server/dreams/DreamManagerService.java
+++ b/services/core/java/com/android/server/dreams/DreamManagerService.java
@@ -569,7 +569,8 @@ public final class DreamManagerService extends SystemService {
}
private void requestDreamInternal() {
- if (isDreamingInternal() && !dreamIsFrontmost() && mController.bringDreamToFront()) {
+ if (isDreamingInternal() && !dreamIsFrontmost() && mController.bringDreamToFront()
+ && !isDozingInternal()) {
return;
}
diff --git a/services/core/java/com/android/server/flags/people.aconfig b/services/core/java/com/android/server/flags/people.aconfig
new file mode 100644
index 000000000000..532e95848a06
--- /dev/null
+++ b/services/core/java/com/android/server/flags/people.aconfig
@@ -0,0 +1,12 @@
+package: "com.android.server.flags"
+container: "system"
+
+flag {
+ name: "early_data_manager_init"
+ namespace: "system_performance"
+ description: "Initialize DataManager earlier in boot"
+ bug: "394601872"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 3a3deb00562e..340afb776405 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -5244,6 +5244,21 @@ public class NotificationManagerService extends SystemService {
}
@Override
+ @FlaggedApi(android.app.Flags.FLAG_NM_BINDER_PERF_GET_APPS_WITH_CHANNELS)
+ public List<String> getPackagesWithAnyChannels(int userId) throws RemoteException {
+ checkCallerIsSystem();
+ UserHandle user = UserHandle.of(userId);
+ List<String> packages = mPreferencesHelper.getPackagesWithAnyChannels(userId);
+ for (int i = packages.size() - 1; i >= 0; i--) {
+ String pkg = packages.get(i);
+ if (!areNotificationsEnabledForPackage(pkg, getUidForPackageAndUser(pkg, user))) {
+ packages.remove(i);
+ }
+ }
+ return packages;
+ }
+
+ @Override
public void clearData(String packageName, int uid, boolean fromApp) throws RemoteException {
boolean packagesChanged = false;
checkCallerIsSystem();
diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java
index a171ffc2ed98..3974c839fd38 100644
--- a/services/core/java/com/android/server/notification/PreferencesHelper.java
+++ b/services/core/java/com/android/server/notification/PreferencesHelper.java
@@ -2006,6 +2006,29 @@ public class PreferencesHelper implements RankingConfig {
}
/**
+ * Gets all apps for this user that have a nonzero number of channels. This count does not
+ * include deleted channels.
+ */
+ @FlaggedApi(android.app.Flags.FLAG_NM_BINDER_PERF_GET_APPS_WITH_CHANNELS)
+ public @NonNull List<String> getPackagesWithAnyChannels(@UserIdInt int userId) {
+ List<String> pkgs = new ArrayList<>();
+ synchronized (mLock) {
+ for (PackagePreferences p : mPackagePreferences.values()) {
+ if (UserHandle.getUserId(p.uid) != userId) {
+ continue;
+ }
+ for (NotificationChannel c : p.channels.values()) {
+ if (!c.isDeleted()) {
+ pkgs.add(p.pkg);
+ break;
+ }
+ }
+ }
+ }
+ return pkgs;
+ }
+
+ /**
* True for pre-O apps that only have the default channel, or pre O apps that have no
* channels yet. This method will create the default channel for pre-O apps that don't have it.
* Should never be true for O+ targeting apps, but that's enforced on boot/when an app
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index 55d2508d085e..15688c0f7366 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -1021,7 +1021,7 @@ final class InstallPackageHelper {
*
* Failure at any phase will result in a full failure to install all packages.
*/
- void installPackagesTraced(List<InstallRequest> requests) {
+ void installPackagesTraced(List<InstallRequest> requests, MoveInfo moveInfo) {
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "installPackages");
boolean success = false;
final Map<String, Boolean> createdAppId = new ArrayMap<>(requests.size());
@@ -1049,10 +1049,37 @@ final class InstallPackageHelper {
} finally {
completeInstallProcess(requests, createdAppId, success);
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
+ doPostInstall(requests, moveInfo);
releaseWakeLock(acquireTime, requests.size());
}
}
+ private void doPostInstall(List<InstallRequest> requests, MoveInfo moveInfo) {
+ for (InstallRequest request : requests) {
+ doPostInstallCleanUp(request, moveInfo);
+ }
+
+ for (InstallRequest request : requests) {
+ restoreAndPostInstall(request);
+ }
+ }
+
+ private void doPostInstallCleanUp(InstallRequest request, MoveInfo moveInfo) {
+ if (moveInfo != null) {
+ if (request.getReturnCode() == PackageManager.INSTALL_SUCCEEDED) {
+ mRemovePackageHelper.cleanUpForMoveInstall(moveInfo.mFromUuid,
+ moveInfo.mPackageName, moveInfo.mFromCodePath);
+ } else {
+ mRemovePackageHelper.cleanUpForMoveInstall(moveInfo.mToUuid,
+ moveInfo.mPackageName, moveInfo.mFromCodePath);
+ }
+ } else {
+ if (request.getReturnCode() != PackageManager.INSTALL_SUCCEEDED) {
+ mRemovePackageHelper.removeCodePath(request.getCodeFile());
+ }
+ }
+ }
+
private long acquireWakeLock(int count) {
if (!mPm.isSystemReady()) {
return -1;
diff --git a/services/core/java/com/android/server/pm/InstallingSession.java b/services/core/java/com/android/server/pm/InstallingSession.java
index 6a2bf83ba368..3d8f2bbf4e7f 100644
--- a/services/core/java/com/android/server/pm/InstallingSession.java
+++ b/services/core/java/com/android/server/pm/InstallingSession.java
@@ -550,31 +550,11 @@ class InstallingSession {
cleanUpForFailedInstall(request);
}
}
- } else {
- mPm.installPackagesTraced(installRequests);
-
for (InstallRequest request : installRequests) {
- doPostInstall(request);
- }
- }
- for (InstallRequest request : installRequests) {
- mPm.restoreAndPostInstall(request);
- }
- }
-
- private void doPostInstall(InstallRequest request) {
- if (mMoveInfo != null) {
- if (request.getReturnCode() == PackageManager.INSTALL_SUCCEEDED) {
- mPm.cleanUpForMoveInstall(mMoveInfo.mFromUuid,
- mMoveInfo.mPackageName, mMoveInfo.mFromCodePath);
- } else {
- mPm.cleanUpForMoveInstall(mMoveInfo.mToUuid,
- mMoveInfo.mPackageName, mMoveInfo.mFromCodePath);
+ mPm.restoreAndPostInstall(request);
}
} else {
- if (request.getReturnCode() != PackageManager.INSTALL_SUCCEEDED) {
- mPm.removeCodePath(request.getCodeFile());
- }
+ mPm.installPackagesTraced(installRequests, mMoveInfo);
}
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 8343935425cd..2464a291b4dd 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -8214,8 +8214,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
return mInstallPackageHelper.enableCompressedPackage(stubPkg, stubPs);
}
- void installPackagesTraced(List<InstallRequest> requests) {
- mInstallPackageHelper.installPackagesTraced(requests);
+ void installPackagesTraced(List<InstallRequest> requests, MoveInfo moveInfo) {
+ mInstallPackageHelper.installPackagesTraced(requests, moveInfo);
}
void restoreAndPostInstall(InstallRequest request) {
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 76c5240ab623..4153cd1be0a6 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -1163,6 +1163,15 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}
+ private boolean shouldShowHub() {
+ final boolean hubEnabled = Settings.Secure.getIntForUser(
+ mContext.getContentResolver(), Settings.Secure.GLANCEABLE_HUB_ENABLED,
+ 1, mCurrentUserId) == 1;
+
+ return mUserManagerInternal.isUserUnlocked(mCurrentUserId) && hubEnabled
+ && mDreamManagerInternal.dreamConditionActive();
+ }
+
@VisibleForTesting
void powerPress(long eventTime, int count, int displayId) {
// SideFPS still needs to know about suppressed power buttons, in case it needs to block
@@ -1261,9 +1270,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// show hub.
boolean keyguardAvailable = !mLockPatternUtils.isLockScreenDisabled(
mCurrentUserId);
- if (mUserManagerInternal.isUserUnlocked(mCurrentUserId) && hubEnabled
- && keyguardAvailable && mDreamManagerInternal.dreamConditionActive()) {
- // If the hub can be launched, send a message to keyguard.
+ if (shouldShowHub() && keyguardAvailable) {
+ // If the hub can be launched, send a message to keyguard. We do not know if
+ // the hub is already running or not, keyguard handles turning screen off if
+ // it is.
Bundle options = new Bundle();
options.putBoolean(EXTRA_TRIGGER_HUB, true);
lockNow(options);
@@ -1324,14 +1334,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
* @param isScreenOn Whether the screen is currently on.
* @param noDreamAction The action to perform if dreaming is not possible.
*/
- private void attemptToDreamFromShortPowerButtonPress(
+ private boolean attemptToDreamFromShortPowerButtonPress(
boolean isScreenOn, Runnable noDreamAction) {
if (mShortPressOnPowerBehavior != SHORT_PRESS_POWER_DREAM_OR_SLEEP
&& mShortPressOnPowerBehavior != SHORT_PRESS_POWER_HUB_OR_DREAM_OR_SLEEP) {
// If the power button behavior isn't one that should be able to trigger the dream, give
// up.
noDreamAction.run();
- return;
+ return false;
}
final DreamManagerInternal dreamManagerInternal = getDreamManagerInternal();
@@ -1339,7 +1349,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
Slog.d(TAG, "Can't start dreaming when attempting to dream from short power"
+ " press (isScreenOn=" + isScreenOn + ")");
noDreamAction.run();
- return;
+ return false;
}
synchronized (mLock) {
@@ -1350,6 +1360,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
dreamManagerInternal.requestDream();
+
+ return true;
}
/**
@@ -6398,6 +6410,17 @@ public class PhoneWindowManager implements WindowManagerPolicy {
event.getDisplayId(), event.getKeyCode(), "wakeUpFromWakeKey")) {
return;
}
+
+ if (!shouldShowHub()
+ && mShortPressOnPowerBehavior == SHORT_PRESS_POWER_HUB_OR_DREAM_OR_SLEEP
+ && event.getKeyCode() == KEYCODE_POWER
+ && attemptToDreamFromShortPowerButtonPress(false, () -> {})) {
+ // In the case that we should wake to dream and successfully initiate dreaming, do not
+ // continue waking up. Doing so will exit the dream state and cause UI to react
+ // accordingly.
+ return;
+ }
+
wakeUpFromWakeKey(
event.getEventTime(),
event.getKeyCode(),
diff --git a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java
index 587447b8af26..9d7e9f53a1aa 100644
--- a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java
+++ b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java
@@ -92,6 +92,8 @@ public class KeyguardServiceDelegate {
public boolean bootCompleted;
public int screenState;
public int interactiveState;
+ boolean doKeyguardTimeoutRequested;
+ Bundle doKeyguardTimeoutRequestedOptions;
private void reset() {
// Assume keyguard is showing and secure until we know for sure. This is here in
@@ -225,6 +227,12 @@ public class KeyguardServiceDelegate {
if (mKeyguardState.dreaming) {
mKeyguardService.onDreamingStarted();
}
+ if (mKeyguardState.doKeyguardTimeoutRequested) {
+ mKeyguardService.doKeyguardTimeout(
+ mKeyguardState.doKeyguardTimeoutRequestedOptions);
+ mKeyguardState.doKeyguardTimeoutRequested = false;
+ mKeyguardState.doKeyguardTimeoutRequestedOptions = null;
+ }
}
@Override
@@ -410,6 +418,11 @@ public class KeyguardServiceDelegate {
public void doKeyguardTimeout(Bundle options) {
if (mKeyguardService != null) {
mKeyguardService.doKeyguardTimeout(options);
+ } else {
+ mKeyguardState.doKeyguardTimeoutRequested = true;
+ if (options != null) {
+ mKeyguardState.doKeyguardTimeoutRequestedOptions = options;
+ }
}
}
diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
index 7f2c68ff60b1..889b494ef538 100644
--- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
+++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java
@@ -3661,16 +3661,17 @@ public class StatsPullAtomService extends SystemService {
if (!packageNames.isEmpty()) {
for (String packageName : packageNames) {
- PackageInfo pkg;
+ int uid = INVALID_UID;
try {
- pkg = pm.getPackageInfoAsUser(packageName, 0, userId);
+ PackageInfo pkg = pm.getPackageInfoAsUser(packageName, 0, userId);
+ uid = pkg.applicationInfo.uid;
} catch (PackageManager.NameNotFoundException e) {
- Slog.w(TAG, "Role holder " + packageName + " not found");
- return StatsManager.PULL_SKIP;
+ Slog.w(TAG, "Role holder " + packageName + " not found for user "
+ + userId);
}
pulledData.add(FrameworkStatsLog.buildStatsEvent(
- atomTag, pkg.applicationInfo.uid, packageName, roleName));
+ atomTag, uid, packageName, roleName));
}
} else {
// Ensure that roles set to None are logged with an empty state.
@@ -3679,6 +3680,9 @@ public class StatsPullAtomService extends SystemService {
}
}
}
+ } catch (Throwable t) {
+ Log.e(TAG, "Could not read role holders", t);
+ return StatsManager.PULL_SKIP;
} finally {
Binder.restoreCallingIdentity(callingToken);
}
diff --git a/services/core/java/com/android/server/updates/CertPinInstallReceiver.java b/services/core/java/com/android/server/updates/CertPinInstallReceiver.java
index c03fbc3d0aed..250e99b47b1a 100644
--- a/services/core/java/com/android/server/updates/CertPinInstallReceiver.java
+++ b/services/core/java/com/android/server/updates/CertPinInstallReceiver.java
@@ -16,9 +16,19 @@
package com.android.server.updates;
+import android.content.Context;
+import android.content.Intent;
+
public class CertPinInstallReceiver extends ConfigUpdateInstallReceiver {
public CertPinInstallReceiver() {
super("/data/misc/keychain/", "pins", "metadata/", "version");
}
+
+ @Override
+ public void onReceive(final Context context, final Intent intent) {
+ if (!com.android.server.flags.Flags.certpininstallerRemoval()) {
+ super.onReceive(context, intent);
+ }
+ }
}
diff --git a/services/core/java/com/android/server/wearable/WearableSensingManagerPerUserService.java b/services/core/java/com/android/server/wearable/WearableSensingManagerPerUserService.java
index 395816902592..d06827ab0529 100644
--- a/services/core/java/com/android/server/wearable/WearableSensingManagerPerUserService.java
+++ b/services/core/java/com/android/server/wearable/WearableSensingManagerPerUserService.java
@@ -273,6 +273,9 @@ final class WearableSensingManagerPerUserService
@Override
public void onError() {
+ synchronized (mLock) {
+ ensureRemoteServiceInitiated();
+ }
synchronized (mSecureChannelLock) {
if (mSecureChannel != null
&& mSecureChannel
diff --git a/services/core/java/com/android/server/wearable/WearableSensingSecureChannel.java b/services/core/java/com/android/server/wearable/WearableSensingSecureChannel.java
index a16ff51e2d20..9f14ab7a70d3 100644
--- a/services/core/java/com/android/server/wearable/WearableSensingSecureChannel.java
+++ b/services/core/java/com/android/server/wearable/WearableSensingSecureChannel.java
@@ -156,6 +156,7 @@ final class WearableSensingSecureChannel {
new AssociationRequest.Builder()
.setDisplayName(CDM_ASSOCIATION_DISPLAY_NAME)
.setSelfManaged(true)
+ .setDeviceProfile(AssociationRequest.DEVICE_PROFILE_WEARABLE_SENSING)
.build(),
mLightWeightExecutor,
new CompanionDeviceManager.Callback() {
@@ -195,7 +196,8 @@ final class WearableSensingSecureChannel {
mCompanionDeviceManager.attachSystemDataTransport(
associationId,
new AutoCloseInputStream(mUnderlyingTransport),
- new AutoCloseOutputStream(mUnderlyingTransport));
+ new AutoCloseOutputStream(mUnderlyingTransport),
+ CompanionDeviceManager.TRANSPORT_FLAG_EXTEND_PATCH_DIFF);
}
}
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index cf9c57aa634a..03fe7775edb0 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -46,9 +46,6 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.app.WindowConfiguration.activityTypeToString;
-import static android.app.admin.DevicePolicyResources.Drawables.Source.PROFILE_SWITCH_ANIMATION;
-import static android.app.admin.DevicePolicyResources.Drawables.Style.OUTLINE;
-import static android.app.admin.DevicePolicyResources.Drawables.WORK_PROFILE_ICON;
import static android.content.Context.CONTEXT_RESTRICTED;
import static android.content.Intent.ACTION_MAIN;
import static android.content.Intent.CATEGORY_HOME;
@@ -189,7 +186,6 @@ import static com.android.server.wm.ActivityRecordProto.STARTING_DISPLAYED;
import static com.android.server.wm.ActivityRecordProto.STARTING_MOVED;
import static com.android.server.wm.ActivityRecordProto.STARTING_WINDOW;
import static com.android.server.wm.ActivityRecordProto.STATE;
-import static com.android.server.wm.ActivityRecordProto.THUMBNAIL;
import static com.android.server.wm.ActivityRecordProto.TRANSLUCENT;
import static com.android.server.wm.ActivityRecordProto.VISIBLE;
import static com.android.server.wm.ActivityRecordProto.VISIBLE_REQUESTED;
@@ -265,7 +261,6 @@ import android.app.PictureInPictureParams;
import android.app.ResultInfo;
import android.app.WaitResult;
import android.app.WindowConfiguration;
-import android.app.admin.DevicePolicyManager;
import android.app.assist.ActivityId;
import android.app.compat.CompatChanges;
import android.app.servertransaction.ActivityConfigurationChangeItem;
@@ -300,7 +295,6 @@ import android.graphics.Insets;
import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
import android.gui.DropInputMode;
import android.hardware.HardwareBuffer;
import android.net.Uri;
@@ -333,7 +327,6 @@ import android.view.IAppTransitionAnimationSpecsFuture;
import android.view.InputApplicationHandle;
import android.view.RemoteAnimationAdapter;
import android.view.RemoteAnimationDefinition;
-import android.view.RemoteAnimationTarget;
import android.view.SurfaceControl;
import android.view.SurfaceControl.Transaction;
import android.view.WindowInsets;
@@ -341,7 +334,6 @@ import android.view.WindowInsets.Type;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.view.WindowManager.TransitionOldType;
-import android.view.animation.Animation;
import android.window.ActivityWindowInfo;
import android.window.ITaskFragmentOrganizer;
import android.window.RemoteTransition;
@@ -380,7 +372,6 @@ import com.android.server.uri.UriPermissionOwner;
import com.android.server.wm.ActivityMetricsLogger.TransitionInfoSnapshot;
import com.android.server.wm.SurfaceAnimator.AnimationType;
import com.android.server.wm.WindowManagerService.H;
-import com.android.server.wm.utils.InsetUtils;
import com.android.window.flags.Flags;
import dalvik.annotation.optimization.NeverCompile;
@@ -4701,8 +4692,6 @@ final class ActivityRecord extends WindowToken {
return true;
}
- // TODO: Transfer thumbnail
-
return false;
}
@@ -5707,7 +5696,21 @@ final class ActivityRecord extends WindowToken {
displayContent.getInputMonitor().updateInputWindowsLw(false /*force*/);
mTransitionChangeFlags = 0;
- postApplyAnimation(visible, fromTransition);
+ // Set client visibility if:
+ // 1. The activity is becoming visible. This is usually no-op because assume that
+ // setVisibility(true) should have been called. Just in case if that was missed.
+ // 2. The activity is becoming invisible and not RESUMED state (it is usually PAUSED unless
+ // the activity is transient-hide). If the state is RESUMED, setVisibility(false) will be
+ // called until activityStopped. This is to avoid crashing apps that assume its view root
+ // won't be invisible before the activity is paused.
+ if (visible || mState != RESUMED) {
+ setClientVisible(visible);
+ }
+ // Notify the visibility change outside of transition in case onTransitionFinish is not
+ // called for updating snapshot states.
+ if (!fromTransition) {
+ mWmService.mSnapshotController.notifyAppVisibilityChanged(this, visible);
+ }
}
void commitVisibility(boolean visible, boolean performLayout) {
@@ -5726,75 +5729,6 @@ final class ActivityRecord extends WindowToken {
return mNeedsLetterboxedAnimation && isAnimating();
}
- /**
- * Post process after applying an app transition animation.
- *
- * <p class="note"><strong>Note: </strong> This function must be called after the animations
- * have been applied and {@link #commitVisibility}.</p>
- *
- * @param visible {@code true} if this {@link ActivityRecord} has become visible, otherwise
- * this has become invisible.
- * @param fromTransition {@code true} if this call is part of finishing a transition. This is
- * needed because the shell transition is no-longer active by the time
- * commitVisibility is called.
- */
- private void postApplyAnimation(boolean visible, boolean fromTransition) {
- final boolean usingShellTransitions = mTransitionController.isShellTransitionsEnabled();
- final boolean delayed = !usingShellTransitions && isAnimating(PARENTS | CHILDREN,
- ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_WINDOW_ANIMATION);
- if (!delayed && !usingShellTransitions) {
- // We aren't delayed anything, but exiting windows rely on the animation finished
- // callback being called in case the ActivityRecord was pretending to be delayed,
- // which we might have done because we were in closing/opening apps list.
- onAnimationFinished(ANIMATION_TYPE_APP_TRANSITION, null /* AnimationAdapter */);
- if (visible) {
- // The token was made immediately visible, there will be no entrance animation.
- // We need to inform the client the enter animation was finished.
- mEnteringAnimation = true;
- mWmService.mActivityManagerAppTransitionNotifier.onAppTransitionFinishedLocked(
- token);
- }
- }
-
- // If we're becoming visible, immediately change client visibility as well. there seem
- // to be some edge cases where we change our visibility but client visibility never gets
- // updated.
- // If we're becoming invisible, update the client visibility if we are not running an
- // animation and aren't in RESUMED state. Otherwise, we'll update client visibility in
- // onAnimationFinished or activityStopped.
- if (visible || (mState != RESUMED && (usingShellTransitions || !isAnimating(
- PARENTS, ANIMATION_TYPE_APP_TRANSITION)))) {
- setClientVisible(visible);
- }
-
- final DisplayContent displayContent = getDisplayContent();
- if (!displayContent.mClosingApps.contains(this)
- && !displayContent.mOpeningApps.contains(this)
- && !fromTransition) {
- // Take the screenshot before possibly hiding the WSA, otherwise the screenshot
- // will not be taken.
- mWmService.mSnapshotController.notifyAppVisibilityChanged(this, visible);
- }
-
- // If we are hidden but there is no delay needed we immediately
- // apply the Surface transaction so that the ActivityManager
- // can have some guarantee on the Surface state following
- // setting the visibility. This captures cases like dismissing
- // the docked or root pinned task where there is no app transition.
- //
- // In the case of a "Null" animation, there will be
- // no animation but there will still be a transition set.
- // We still need to delay hiding the surface such that it
- // can be synchronized with showing the next surface in the transition.
- if (!usingShellTransitions && !isVisible() && !delayed
- && !displayContent.mAppTransition.isTransitionSet()) {
- forAllWindows(win -> {
- win.mWinAnimator.hide(getPendingTransaction(), "immediately hidden");
- }, true);
- scheduleAnimation();
- }
- }
-
/** Updates draw state and shows drawn windows. */
void commitFinishDrawing(SurfaceControl.Transaction t) {
boolean committed = false;
@@ -7597,9 +7531,6 @@ final class ActivityRecord extends WindowToken {
mActivityRecordInputSink.applyChangesToSurfaceIfChanged(getPendingTransaction());
}
}
- if (mThumbnail != null) {
- mThumbnail.setShowing(getPendingTransaction(), show);
- }
mLastSurfaceShowing = show;
super.prepareSurfaces();
}
@@ -7611,84 +7542,6 @@ final class ActivityRecord extends WindowToken {
return mLastSurfaceShowing;
}
- void attachThumbnailAnimation() {
- if (!isAnimating(PARENTS, ANIMATION_TYPE_APP_TRANSITION)) {
- return;
- }
- final HardwareBuffer thumbnailHeader =
- getDisplayContent().mAppTransition.getAppTransitionThumbnailHeader(task);
- if (thumbnailHeader == null) {
- ProtoLog.d(WM_DEBUG_APP_TRANSITIONS, "No thumbnail header bitmap for: %s", task);
- return;
- }
- clearThumbnail();
- final Transaction transaction = getAnimatingContainer().getPendingTransaction();
- mThumbnail = new WindowContainerThumbnail(transaction, getAnimatingContainer(),
- thumbnailHeader);
- mThumbnail.startAnimation(transaction, loadThumbnailAnimation(thumbnailHeader));
- }
-
- /**
- * Attaches a surface with a thumbnail for the
- * {@link android.app.ActivityOptions#ANIM_OPEN_CROSS_PROFILE_APPS} animation.
- */
- void attachCrossProfileAppsThumbnailAnimation() {
- if (!isAnimating(PARENTS, ANIMATION_TYPE_APP_TRANSITION)) {
- return;
- }
- clearThumbnail();
-
- final WindowState win = findMainWindow();
- if (win == null) {
- return;
- }
- final Rect frame = win.getRelativeFrame();
- final Context context = mAtmService.getUiContext();
- final Drawable thumbnailDrawable;
- if (task.mUserId == mWmService.mCurrentUserId) {
- thumbnailDrawable = context.getDrawable(R.drawable.ic_account_circle);
- } else {
- final DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
- thumbnailDrawable = dpm.getResources().getDrawable(
- WORK_PROFILE_ICON, OUTLINE, PROFILE_SWITCH_ANIMATION,
- () -> context.getDrawable(R.drawable.ic_corp_badge));
- }
- final HardwareBuffer thumbnail = getDisplayContent().mAppTransition
- .createCrossProfileAppsThumbnail(thumbnailDrawable, frame);
- if (thumbnail == null) {
- return;
- }
- final Transaction transaction = getPendingTransaction();
- mThumbnail = new WindowContainerThumbnail(transaction, getTask(), thumbnail);
- final Animation animation =
- getDisplayContent().mAppTransition.createCrossProfileAppsThumbnailAnimationLocked(
- frame);
- mThumbnail.startAnimation(transaction, animation, new Point(frame.left, frame.top));
- }
-
- private Animation loadThumbnailAnimation(HardwareBuffer thumbnailHeader) {
- final DisplayInfo displayInfo = mDisplayContent.getDisplayInfo();
-
- // If this is a multi-window scenario, we use the windows frame as
- // destination of the thumbnail header animation. If this is a full screen
- // window scenario, we use the whole display as the target.
- WindowState win = findMainWindow();
- Rect insets;
- Rect appRect;
- if (win != null) {
- insets = win.getInsetsStateWithVisibilityOverride().calculateInsets(
- win.getFrame(), Type.systemBars(), false /* ignoreVisibility */).toRect();
- appRect = new Rect(win.getFrame());
- appRect.inset(insets);
- } else {
- insets = null;
- appRect = new Rect(0, 0, displayInfo.appWidth, displayInfo.appHeight);
- }
- final Configuration displayConfig = mDisplayContent.getConfiguration();
- return getDisplayContent().mAppTransition.createThumbnailAspectScaleAnimationLocked(
- appRect, insets, thumbnailHeader, task, displayConfig.orientation);
- }
-
@Override
public void onAnimationLeashLost(Transaction t) {
super.onAnimationLeashLost(t);
@@ -7715,7 +7568,6 @@ final class ActivityRecord extends WindowToken {
setAppLayoutChanges(FINISH_LAYOUT_REDO_ANIM | FINISH_LAYOUT_REDO_WALLPAPER,
"ActivityRecord");
- clearThumbnail();
setClientVisible(isVisible() || mVisibleRequested);
getDisplayContent().computeImeTargetIfNeeded(this);
@@ -7725,12 +7577,6 @@ final class ActivityRecord extends WindowToken {
this, reportedVisible, okToDisplay(), okToAnimate(),
isStartingWindowDisplayed());
- // clean up thumbnail window
- if (mThumbnail != null) {
- mThumbnail.destroy();
- mThumbnail = null;
- }
-
// WindowState.onExitAnimationDone might modify the children list, so make a copy and then
// traverse the copy.
final ArrayList<WindowState> children = new ArrayList<>(mChildren);
@@ -7769,20 +7615,6 @@ final class ActivityRecord extends WindowToken {
}
}
- @Override
- void cancelAnimation() {
- super.cancelAnimation();
- clearThumbnail();
- }
-
- private void clearThumbnail() {
- if (mThumbnail == null) {
- return;
- }
- mThumbnail.destroy();
- mThumbnail = null;
- }
-
public @TransitionOldType int getTransit() {
return mTransit;
}
@@ -9728,9 +9560,6 @@ final class ActivityRecord extends WindowToken {
proto.write(IS_WAITING_FOR_TRANSITION_START, isWaitingForTransitionStart());
proto.write(IS_ANIMATING, isAnimating(TRANSITION | PARENTS | CHILDREN,
ANIMATION_TYPE_APP_TRANSITION | ANIMATION_TYPE_WINDOW_ANIMATION));
- if (mThumbnail != null){
- mThumbnail.dumpDebug(proto, THUMBNAIL);
- }
proto.write(FILLS_PARENT, fillsParent());
proto.write(APP_STOPPED, mAppStopped);
proto.write(TRANSLUCENT, !occludesParent());
@@ -9834,31 +9663,6 @@ final class ActivityRecord extends WindowToken {
}
@Override
- RemoteAnimationTarget createRemoteAnimationTarget(
- RemoteAnimationController.RemoteAnimationRecord record) {
- final WindowState mainWindow = findMainWindow();
- if (task == null || mainWindow == null) {
- return null;
- }
- final Rect insets = mainWindow.getInsetsStateWithVisibilityOverride().calculateInsets(
- task.getBounds(), Type.systemBars(), false /* ignoreVisibility */).toRect();
- InsetUtils.addInsets(insets, getLetterboxInsets());
-
- final RemoteAnimationTarget target = new RemoteAnimationTarget(task.mTaskId,
- record.getMode(), record.mAdapter.mCapturedLeash, !fillsParent(),
- new Rect(), insets,
- getPrefixOrderIndex(), record.mAdapter.mPosition, record.mAdapter.mLocalBounds,
- record.mAdapter.mEndBounds, task.getWindowConfiguration(),
- false /*isNotInRecents*/,
- record.mThumbnailAdapter != null ? record.mThumbnailAdapter.mCapturedLeash : null,
- record.mStartBounds, task.getTaskInfo(), checkEnterPictureInPictureAppOpsState());
- target.setShowBackdrop(record.mShowBackdrop);
- target.setWillShowImeOnTarget(mStartingData != null && mStartingData.hasImeSurface());
- target.hasAnimatingParent = record.hasAnimatingParent();
- return target;
- }
-
- @Override
boolean canCreateRemoteAnimationTarget() {
return true;
}
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index 9c4b722feb47..d98ad8bb9e05 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -231,8 +231,6 @@ public class AppTransition implements Dump {
private final int mDefaultWindowAnimationStyleResId;
private boolean mOverrideTaskTransition;
- private RemoteAnimationController mRemoteAnimationController;
-
final Handler mHandler;
final Runnable mHandleAppTransitionTimeoutRunnable = () -> handleAppTransitionTimeout();
@@ -398,9 +396,7 @@ public class AppTransition implements Dump {
: SystemClock.uptimeMillis(),
AnimationAdapter.STATUS_BAR_TRANSITION_DURATION);
- if (mRemoteAnimationController != null) {
- mRemoteAnimationController.goodToGo(transit);
- } else if ((isTaskOpenTransitOld(transit) || transit == TRANSIT_OLD_WALLPAPER_CLOSE)
+ if ((isTaskOpenTransitOld(transit) || transit == TRANSIT_OLD_WALLPAPER_CLOSE)
&& topOpeningAnim != null) {
if (mDisplayContent.getDisplayPolicy().shouldAttachNavBarToAppDuringTransition()) {
final NavBarFadeAnimationController controller =
@@ -424,7 +420,6 @@ public class AppTransition implements Dump {
mNextAppTransitionType = NEXT_TRANSIT_TYPE_NONE;
mNextAppTransitionOverrideRequested = false;
mNextAppTransitionAnimationsSpecs.clear();
- mRemoteAnimationController = null;
mNextAppTransitionAnimationsSpecsFuture = null;
mDefaultNextAppTransitionAnimationSpec = null;
mAnimationFinishedCallback = null;
@@ -442,13 +437,6 @@ public class AppTransition implements Dump {
final boolean keyguardGoingAwayCancelled = mNextAppTransitionRequests.contains(
TRANSIT_KEYGUARD_GOING_AWAY);
- // The RemoteAnimationControl didn't register AppTransitionListener and
- // only initialized the finish and timeout callback when goodToGo().
- // So cancel the remote animation here to prevent the animation can't do
- // finish after transition state cleared.
- if (mRemoteAnimationController != null) {
- mRemoteAnimationController.cancelAnimation("freeze");
- }
mNextAppTransitionRequests.clear();
clear();
setReady();
@@ -719,10 +707,6 @@ public class AppTransition implements Dump {
&& !mNextAppTransitionRequests.contains(TRANSIT_KEYGUARD_GOING_AWAY);
}
- RemoteAnimationController getRemoteAnimationController() {
- return mRemoteAnimationController;
- }
-
/**
*
* @param frame These are the bounds of the window when it finishes the animation. This is where
@@ -1082,17 +1066,6 @@ public class AppTransition implements Dump {
void overridePendingAppTransitionRemote(RemoteAnimationAdapter remoteAnimationAdapter,
boolean sync, boolean isActivityEmbedding) {
- ProtoLog.i(WM_DEBUG_APP_TRANSITIONS, "Override pending remote transitionSet=%b adapter=%s",
- isTransitionSet(), remoteAnimationAdapter);
- if (isTransitionSet() && !mNextAppTransitionIsSync) {
- // ActivityEmbedding animation will run by the app process for which we want to respect
- // the app override for whether or not to show background color.
- clear(!isActivityEmbedding /* clearAppOverride */);
- mNextAppTransitionType = NEXT_TRANSIT_TYPE_REMOTE;
- mRemoteAnimationController = new RemoteAnimationController(mService, mDisplayContent,
- remoteAnimationAdapter, mHandler, isActivityEmbedding);
- mNextAppTransitionIsSync = sync;
- }
}
void overrideInPlaceAppTransition(String packageName, int anim) {
diff --git a/services/core/java/com/android/server/wm/NonAppWindowAnimationAdapter.java b/services/core/java/com/android/server/wm/NonAppWindowAnimationAdapter.java
deleted file mode 100644
index 91598c5cc27a..000000000000
--- a/services/core/java/com/android/server/wm/NonAppWindowAnimationAdapter.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm;
-
-import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY;
-import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER;
-import static android.view.WindowManager.TRANSIT_OLD_TASK_OPEN;
-import static android.view.WindowManager.TRANSIT_OLD_TASK_TO_FRONT;
-import static android.view.WindowManager.TRANSIT_OLD_WALLPAPER_CLOSE;
-
-import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_REMOTE_ANIMATIONS;
-import static com.android.server.wm.AnimationAdapterProto.REMOTE;
-import static com.android.server.wm.RemoteAnimationAdapterWrapperProto.TARGET;
-import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION;
-
-import android.annotation.NonNull;
-import android.graphics.Rect;
-import android.os.SystemClock;
-import android.util.proto.ProtoOutputStream;
-import android.view.RemoteAnimationTarget;
-import android.view.SurfaceControl;
-import android.view.WindowManager;
-
-import com.android.internal.protolog.ProtoLog;
-import com.android.server.policy.WindowManagerPolicy;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-
-class NonAppWindowAnimationAdapter implements AnimationAdapter {
-
- private final WindowContainer mWindowContainer;
- private RemoteAnimationTarget mTarget;
- private SurfaceControl mCapturedLeash;
- private SurfaceAnimator.OnAnimationFinishedCallback mCapturedLeashFinishCallback;
- private @SurfaceAnimator.AnimationType int mLastAnimationType;
-
- private long mDurationHint;
- private long mStatusBarTransitionDelay;
-
- @Override
- public boolean getShowWallpaper() {
- return false;
- }
-
- NonAppWindowAnimationAdapter(WindowContainer w, long durationHint,
- long statusBarTransitionDelay) {
- mWindowContainer = w;
- mDurationHint = durationHint;
- mStatusBarTransitionDelay = statusBarTransitionDelay;
- }
-
- static RemoteAnimationTarget[] startNonAppWindowAnimations(WindowManagerService service,
- DisplayContent displayContent, @WindowManager.TransitionOldType int transit,
- long durationHint, long statusBarTransitionDelay,
- ArrayList<NonAppWindowAnimationAdapter> adaptersOut) {
- final ArrayList<RemoteAnimationTarget> targets = new ArrayList<>();
- if (shouldStartNonAppWindowAnimationsForKeyguardExit(transit)) {
- startNonAppWindowAnimationsForKeyguardExit(
- service, durationHint, statusBarTransitionDelay, targets, adaptersOut);
- } else if (shouldAttachNavBarToApp(service, displayContent, transit)) {
- startNavigationBarWindowAnimation(
- displayContent, durationHint, statusBarTransitionDelay, targets,
- adaptersOut);
- }
- return targets.toArray(new RemoteAnimationTarget[targets.size()]);
- }
-
- static boolean shouldStartNonAppWindowAnimationsForKeyguardExit(
- @WindowManager.TransitionOldType int transit) {
- return transit == TRANSIT_OLD_KEYGUARD_GOING_AWAY
- || transit == TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER;
- }
-
- static boolean shouldAttachNavBarToApp(WindowManagerService service,
- DisplayContent displayContent, @WindowManager.TransitionOldType int transit) {
- return (transit == TRANSIT_OLD_TASK_OPEN || transit == TRANSIT_OLD_TASK_TO_FRONT
- || transit == TRANSIT_OLD_WALLPAPER_CLOSE)
- && displayContent.getDisplayPolicy().shouldAttachNavBarToAppDuringTransition()
- && displayContent.getAsyncRotationController() == null;
- }
-
- /**
- * Creates and starts remote animations for all the visible non app windows.
- *
- * @return RemoteAnimationTarget[] targets for all the visible non app windows
- */
- private static void startNonAppWindowAnimationsForKeyguardExit(WindowManagerService service,
- long durationHint, long statusBarTransitionDelay,
- ArrayList<RemoteAnimationTarget> targets,
- ArrayList<NonAppWindowAnimationAdapter> adaptersOut) {
-
- final WindowManagerPolicy policy = service.mPolicy;
- service.mRoot.forAllWindows(nonAppWindow -> {
- // Animation on the IME window is controlled via Insets.
- if (nonAppWindow.mActivityRecord == null && nonAppWindow.canBeHiddenByKeyguard()
- && nonAppWindow.wouldBeVisibleIfPolicyIgnored() && !nonAppWindow.isVisible()
- && nonAppWindow != service.mRoot.getCurrentInputMethodWindow()) {
- final NonAppWindowAnimationAdapter nonAppAdapter = new NonAppWindowAnimationAdapter(
- nonAppWindow, durationHint, statusBarTransitionDelay);
- adaptersOut.add(nonAppAdapter);
- nonAppWindow.startAnimation(nonAppWindow.getPendingTransaction(),
- nonAppAdapter, false /* hidden */, ANIMATION_TYPE_WINDOW_ANIMATION);
- targets.add(nonAppAdapter.createRemoteAnimationTarget());
- }
- }, true /* traverseTopToBottom */);
- }
-
- /**
- * Creates and starts remote animation for the navigation bar windows.
- *
- * @return RemoteAnimationTarget[] targets for all the visible non app windows
- */
- private static void startNavigationBarWindowAnimation(DisplayContent displayContent,
- long durationHint, long statusBarTransitionDelay,
- ArrayList<RemoteAnimationTarget> targets,
- ArrayList<NonAppWindowAnimationAdapter> adaptersOut) {
- final WindowState navWindow = displayContent.getDisplayPolicy().getNavigationBar();
- final NonAppWindowAnimationAdapter nonAppAdapter = new NonAppWindowAnimationAdapter(
- navWindow.mToken, durationHint, statusBarTransitionDelay);
- adaptersOut.add(nonAppAdapter);
- navWindow.mToken.startAnimation(navWindow.mToken.getPendingTransaction(),
- nonAppAdapter, false /* hidden */, ANIMATION_TYPE_WINDOW_ANIMATION);
- targets.add(nonAppAdapter.createRemoteAnimationTarget());
- }
-
- /**
- * Create a remote animation target for this animation adapter.
- */
- RemoteAnimationTarget createRemoteAnimationTarget() {
- mTarget = new RemoteAnimationTarget(-1, -1, getLeash(), false,
- new Rect(), null, mWindowContainer.getPrefixOrderIndex(),
- mWindowContainer.getLastSurfacePosition(), mWindowContainer.getBounds(), null,
- mWindowContainer.getWindowConfiguration(), true, null, null, null, false,
- mWindowContainer.getWindowType());
- return mTarget;
- }
-
- @Override
- public void startAnimation(SurfaceControl animationLeash, SurfaceControl.Transaction t,
- int type, @NonNull SurfaceAnimator.OnAnimationFinishedCallback finishCallback) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "startAnimation");
- mCapturedLeash = animationLeash;
- mCapturedLeashFinishCallback = finishCallback;
- mLastAnimationType = type;
- }
-
- /**
- * @return the callback to call to clean up when the animation has finished.
- */
- SurfaceAnimator.OnAnimationFinishedCallback getLeashFinishedCallback() {
- return mCapturedLeashFinishCallback;
- }
-
- /**
- * @return the type of animation.
- */
- @SurfaceAnimator.AnimationType
- int getLastAnimationType() {
- return mLastAnimationType;
- }
-
- WindowContainer getWindowContainer() {
- return mWindowContainer;
- }
-
- @Override
- public long getDurationHint() {
- return mDurationHint;
- }
-
- @Override
- public long getStatusBarTransitionsStartTime() {
- return SystemClock.uptimeMillis() + mStatusBarTransitionDelay;
- }
-
- /**
- * @return the leash for this animation (only valid after the non app window surface animation
- * has started).
- */
- SurfaceControl getLeash() {
- return mCapturedLeash;
- }
-
- @Override
- public void onAnimationCancelled(SurfaceControl animationLeash) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "onAnimationCancelled");
- }
-
- @Override
- public void dump(PrintWriter pw, String prefix) {
- pw.print(prefix);
- pw.print("windowContainer=");
- pw.println(mWindowContainer);
- if (mTarget != null) {
- pw.print(prefix);
- pw.println("Target:");
- mTarget.dump(pw, prefix + " ");
- } else {
- pw.print(prefix);
- pw.println("Target: null");
- }
- }
-
- @Override
- public void dumpDebug(ProtoOutputStream proto) {
- final long token = proto.start(REMOTE);
- if (mTarget != null) {
- mTarget.dumpDebug(proto, TARGET);
- }
- proto.end(token);
- }
-}
diff --git a/services/core/java/com/android/server/wm/RemoteAnimationController.java b/services/core/java/com/android/server/wm/RemoteAnimationController.java
deleted file mode 100644
index b3b2c57550e4..000000000000
--- a/services/core/java/com/android/server/wm/RemoteAnimationController.java
+++ /dev/null
@@ -1,636 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.server.wm;
-
-import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_UNOCCLUDE;
-
-import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_REMOTE_ANIMATIONS;
-import static com.android.server.wm.AnimationAdapterProto.REMOTE;
-import static com.android.server.wm.RemoteAnimationAdapterWrapperProto.TARGET;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-
-import android.annotation.ColorInt;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.os.Binder;
-import android.os.Handler;
-import android.os.IBinder.DeathRecipient;
-import android.os.RemoteException;
-import android.os.SystemClock;
-import android.util.Slog;
-import android.util.proto.ProtoOutputStream;
-import android.view.IRemoteAnimationFinishedCallback;
-import android.view.RemoteAnimationAdapter;
-import android.view.RemoteAnimationTarget;
-import android.view.SurfaceControl;
-import android.view.SurfaceControl.Transaction;
-import android.view.WindowManager;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.protolog.ProtoLog;
-import com.android.internal.protolog.common.LogLevel;
-import com.android.internal.util.FastPrintWriter;
-import com.android.server.wm.SurfaceAnimator.AnimationType;
-import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.function.Consumer;
-
-/**
- * Helper class to run app animations in a remote process.
- */
-class RemoteAnimationController implements DeathRecipient {
- private static final String TAG = TAG_WITH_CLASS_NAME
- ? "RemoteAnimationController" : TAG_WM;
- private static final long TIMEOUT_MS = 10000;
-
- private final WindowManagerService mService;
- private final DisplayContent mDisplayContent;
- private final RemoteAnimationAdapter mRemoteAnimationAdapter;
- private final ArrayList<RemoteAnimationRecord> mPendingAnimations = new ArrayList<>();
- private final ArrayList<WallpaperAnimationAdapter> mPendingWallpaperAnimations =
- new ArrayList<>();
- @VisibleForTesting
- final ArrayList<NonAppWindowAnimationAdapter> mPendingNonAppAnimations = new ArrayList<>();
- private final Handler mHandler;
- private final Runnable mTimeoutRunnable = () -> cancelAnimation("timeoutRunnable");
- private boolean mIsFinishing;
-
- private FinishedCallback mFinishedCallback;
- private final boolean mIsActivityEmbedding;
- private boolean mCanceled;
- private boolean mLinkedToDeathOfRunner;
- @Nullable
- private Runnable mOnRemoteAnimationReady;
-
- RemoteAnimationController(WindowManagerService service, DisplayContent displayContent,
- RemoteAnimationAdapter remoteAnimationAdapter, Handler handler,
- boolean isActivityEmbedding) {
- mService = service;
- mDisplayContent = displayContent;
- mRemoteAnimationAdapter = remoteAnimationAdapter;
- mHandler = handler;
- mIsActivityEmbedding = isActivityEmbedding;
- }
-
- /**
- * Creates an animation record for each individual {@link WindowContainer}.
- *
- * @param windowContainer The windows to animate.
- * @param position The position app bounds relative to its parent.
- * @param localBounds The bounds of the app relative to its parent.
- * @param endBounds The end bounds after the transition, in screen coordinates.
- * @param startBounds The start bounds before the transition, in screen coordinates.
- * @param showBackdrop To show background behind a window during animation.
- * @return The record representing animation(s) to run on the app.
- */
- RemoteAnimationRecord createRemoteAnimationRecord(WindowContainer windowContainer,
- Point position, Rect localBounds, Rect endBounds, Rect startBounds,
- boolean showBackdrop) {
- return createRemoteAnimationRecord(windowContainer, position, localBounds, endBounds,
- startBounds, showBackdrop, startBounds != null /* shouldCreateSnapshot */);
- }
-
- /**
- * Creates an animation record for each individual {@link WindowContainer}.
- *
- * @param windowContainer The windows to animate.
- * @param position The position app bounds relative to its parent.
- * @param localBounds The bounds of the app relative to its parent.
- * @param endBounds The end bounds after the transition, in screen coordinates.
- * @param startBounds The start bounds before the transition, in screen coordinates.
- * @param showBackdrop To show background behind a window during animation.
- * @param shouldCreateSnapshot Whether this target should create a snapshot animation.
- * @return The record representing animation(s) to run on the app.
- */
- RemoteAnimationRecord createRemoteAnimationRecord(WindowContainer windowContainer,
- Point position, Rect localBounds, Rect endBounds, Rect startBounds,
- boolean showBackdrop, boolean shouldCreateSnapshot) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "createAnimationAdapter(): container=%s",
- windowContainer);
- final RemoteAnimationRecord adapters = new RemoteAnimationRecord(windowContainer, position,
- localBounds, endBounds, startBounds, showBackdrop, shouldCreateSnapshot);
- mPendingAnimations.add(adapters);
- return adapters;
- }
-
- /** Sets callback to run before starting remote animation. */
- void setOnRemoteAnimationReady(@Nullable Runnable onRemoteAnimationReady) {
- mOnRemoteAnimationReady = onRemoteAnimationReady;
- }
-
- /**
- * We use isFromActivityEmbedding() in the server process to tell if we're running an
- * Activity Embedding type remote animation, where animations are driven by the client.
- * This is currently supporting features like showBackdrop where we need to load App XML.
- */
- public boolean isFromActivityEmbedding() {
- return mIsActivityEmbedding;
- }
-
- /**
- * Called when the transition is ready to be started, and all leashes have been set up.
- */
- void goodToGo(@WindowManager.TransitionOldType int transit) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "goodToGo()");
- if (mCanceled) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS,
- "goodToGo(): Animation canceled already");
- onAnimationFinished();
- invokeAnimationCancelled("already_cancelled");
- return;
- }
-
- // Scale the timeout with the animator scale the controlling app is using.
- mHandler.postDelayed(mTimeoutRunnable,
- (long) (TIMEOUT_MS * mService.getCurrentAnimatorScale()));
- mFinishedCallback = new FinishedCallback(this);
-
- // Create the app targets
- final RemoteAnimationTarget[] appTargets = createAppAnimations();
- if (appTargets.length == 0 && !AppTransition.isKeyguardOccludeTransitOld(transit)) {
- // Keyguard occlude transition can be executed before the occluding activity becomes
- // visible. Even in this case, KeyguardService expects to receive binder call, so we
- // don't cancel remote animation.
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS,
- "goodToGo(): No apps to animate, mPendingAnimations=%d",
- mPendingAnimations.size());
- onAnimationFinished();
- invokeAnimationCancelled("no_app_targets");
- return;
- }
-
- if (mOnRemoteAnimationReady != null) {
- mOnRemoteAnimationReady.run();
- mOnRemoteAnimationReady = null;
- }
-
- // Create the remote wallpaper animation targets (if any)
- final RemoteAnimationTarget[] wallpaperTargets = createWallpaperAnimations();
-
- // Create the remote non app animation targets (if any)
- final RemoteAnimationTarget[] nonAppTargets = createNonAppWindowAnimations(transit);
-
- mService.mAnimator.addAfterPrepareSurfacesRunnable(() -> {
- try {
- linkToDeathOfRunner();
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "goodToGo(): onAnimationStart,"
- + " transit=%s, apps=%d, wallpapers=%d, nonApps=%d",
- AppTransition.appTransitionOldToString(transit), appTargets.length,
- wallpaperTargets.length, nonAppTargets.length);
- if (AppTransition.isKeyguardOccludeTransitOld(transit)) {
- EventLogTags.writeWmSetKeyguardOccluded(
- transit == TRANSIT_OLD_KEYGUARD_UNOCCLUDE ? 0 : 1,
- 1 /* animate */,
- transit,
- "onAnimationStart");
- }
- mRemoteAnimationAdapter.getRunner().onAnimationStart(transit, appTargets,
- wallpaperTargets, nonAppTargets, mFinishedCallback);
- } catch (RemoteException e) {
- Slog.e(TAG, "Failed to start remote animation", e);
- onAnimationFinished();
- }
- if (ProtoLog.isEnabled(WM_DEBUG_REMOTE_ANIMATIONS, LogLevel.DEBUG)) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "startAnimation(): Notify animation start:");
- writeStartDebugStatement();
- }
- });
- setRunningRemoteAnimation(true);
- }
-
- void cancelAnimation(String reason) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "cancelAnimation(): reason=%s", reason);
- synchronized (mService.getWindowManagerLock()) {
- if (mCanceled) {
- return;
- }
- mCanceled = true;
- }
- onAnimationFinished();
- invokeAnimationCancelled(reason);
- }
-
- private void writeStartDebugStatement() {
- ProtoLog.i(WM_DEBUG_REMOTE_ANIMATIONS, "Starting remote animation");
- final StringWriter sw = new StringWriter();
- final FastPrintWriter pw = new FastPrintWriter(sw);
- for (int i = mPendingAnimations.size() - 1; i >= 0; i--) {
- mPendingAnimations.get(i).mAdapter.dump(pw, "");
- }
- pw.close();
- ProtoLog.i(WM_DEBUG_REMOTE_ANIMATIONS, "%s", sw.toString());
- }
-
- private RemoteAnimationTarget[] createAppAnimations() {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "createAppAnimations()");
- final ArrayList<RemoteAnimationTarget> targets = new ArrayList<>();
- for (int i = mPendingAnimations.size() - 1; i >= 0; i--) {
- final RemoteAnimationRecord wrappers = mPendingAnimations.get(i);
- final RemoteAnimationTarget target = wrappers.createRemoteAnimationTarget();
- if (target != null) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "\tAdd container=%s",
- wrappers.mWindowContainer);
- targets.add(target);
- } else {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "\tRemove container=%s",
- wrappers.mWindowContainer);
-
- // We can't really start an animation but we still need to make sure to finish the
- // pending animation that was started by SurfaceAnimator
- if (wrappers.mAdapter != null
- && wrappers.mAdapter.mCapturedFinishCallback != null) {
- wrappers.mAdapter.mCapturedFinishCallback
- .onAnimationFinished(wrappers.mAdapter.mAnimationType,
- wrappers.mAdapter);
- }
- if (wrappers.mThumbnailAdapter != null
- && wrappers.mThumbnailAdapter.mCapturedFinishCallback != null) {
- wrappers.mThumbnailAdapter.mCapturedFinishCallback
- .onAnimationFinished(wrappers.mThumbnailAdapter.mAnimationType,
- wrappers.mThumbnailAdapter);
- }
- mPendingAnimations.remove(i);
- }
- }
- return targets.toArray(new RemoteAnimationTarget[targets.size()]);
- }
-
- private RemoteAnimationTarget[] createWallpaperAnimations() {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "createWallpaperAnimations()");
- return WallpaperAnimationAdapter.startWallpaperAnimations(mDisplayContent,
- mRemoteAnimationAdapter.getDuration(),
- mRemoteAnimationAdapter.getStatusBarTransitionDelay(),
- adapter -> {
- synchronized (mService.mGlobalLock) {
- // If the wallpaper animation is canceled, continue with the app animation
- mPendingWallpaperAnimations.remove(adapter);
- }
- }, mPendingWallpaperAnimations);
- }
-
- private RemoteAnimationTarget[] createNonAppWindowAnimations(
- @WindowManager.TransitionOldType int transit) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "createNonAppWindowAnimations()");
- return NonAppWindowAnimationAdapter.startNonAppWindowAnimations(mService,
- mDisplayContent,
- transit,
- mRemoteAnimationAdapter.getDuration(),
- mRemoteAnimationAdapter.getStatusBarTransitionDelay(),
- mPendingNonAppAnimations);
- }
-
- private void onAnimationFinished() {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "onAnimationFinished(): mPendingAnimations=%d",
- mPendingAnimations.size());
- mHandler.removeCallbacks(mTimeoutRunnable);
- synchronized (mService.mGlobalLock) {
- mIsFinishing = true;
- unlinkToDeathOfRunner();
- releaseFinishedCallback();
- try {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS,
- "onAnimationFinished(): Notify animation finished:");
- for (int i = mPendingAnimations.size() - 1; i >= 0; i--) {
- final RemoteAnimationRecord adapters = mPendingAnimations.get(i);
- if (adapters.mAdapter != null) {
- adapters.mAdapter.mCapturedFinishCallback
- .onAnimationFinished(adapters.mAdapter.mAnimationType,
- adapters.mAdapter);
- }
- if (adapters.mThumbnailAdapter != null) {
- adapters.mThumbnailAdapter.mCapturedFinishCallback
- .onAnimationFinished(adapters.mThumbnailAdapter.mAnimationType,
- adapters.mThumbnailAdapter);
- }
- mPendingAnimations.remove(i);
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "\tcontainer=%s",
- adapters.mWindowContainer);
- }
-
- for (int i = mPendingWallpaperAnimations.size() - 1; i >= 0; i--) {
- final WallpaperAnimationAdapter adapter = mPendingWallpaperAnimations.get(i);
- adapter.getLeashFinishedCallback().onAnimationFinished(
- adapter.getLastAnimationType(), adapter);
- mPendingWallpaperAnimations.remove(i);
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "\twallpaper=%s", adapter.getToken());
- }
-
- for (int i = mPendingNonAppAnimations.size() - 1; i >= 0; i--) {
- final NonAppWindowAnimationAdapter adapter = mPendingNonAppAnimations.get(i);
- adapter.getLeashFinishedCallback().onAnimationFinished(
- adapter.getLastAnimationType(), adapter);
- mPendingNonAppAnimations.remove(i);
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "\tnonApp=%s",
- adapter.getWindowContainer());
- }
- } catch (Exception e) {
- Slog.e(TAG, "Failed to finish remote animation", e);
- throw e;
- } finally {
- mIsFinishing = false;
- }
- // Reset input for all activities when the remote animation is finished.
- final Consumer<ActivityRecord> updateActivities =
- activity -> activity.setDropInputForAnimation(false);
- mDisplayContent.forAllActivities(updateActivities);
- }
- setRunningRemoteAnimation(false);
- ProtoLog.i(WM_DEBUG_REMOTE_ANIMATIONS, "Finishing remote animation");
- }
-
- private void invokeAnimationCancelled(String reason) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "cancelAnimation(): reason=%s", reason);
- try {
- mRemoteAnimationAdapter.getRunner().onAnimationCancelled();
- } catch (RemoteException e) {
- Slog.e(TAG, "Failed to notify cancel", e);
- }
- mOnRemoteAnimationReady = null;
- }
-
- private void releaseFinishedCallback() {
- if (mFinishedCallback != null) {
- mFinishedCallback.release();
- mFinishedCallback = null;
- }
- }
-
- private void setRunningRemoteAnimation(boolean running) {
- final int pid = mRemoteAnimationAdapter.getCallingPid();
- final int uid = mRemoteAnimationAdapter.getCallingUid();
-
- if (pid == 0) {
- throw new RuntimeException("Calling pid of remote animation was null");
- }
- final WindowProcessController wpc = mService.mAtmService.getProcessController(pid, uid);
- if (wpc == null) {
- Slog.w(TAG, "Unable to find process with pid=" + pid + " uid=" + uid);
- return;
- }
- wpc.setRunningRemoteAnimation(running);
- }
-
- private void linkToDeathOfRunner() throws RemoteException {
- if (!mLinkedToDeathOfRunner) {
- mRemoteAnimationAdapter.getRunner().asBinder().linkToDeath(this, 0);
- mLinkedToDeathOfRunner = true;
- }
- }
-
- private void unlinkToDeathOfRunner() {
- if (mLinkedToDeathOfRunner) {
- mRemoteAnimationAdapter.getRunner().asBinder().unlinkToDeath(this, 0);
- mLinkedToDeathOfRunner = false;
- }
- }
-
- @Override
- public void binderDied() {
- cancelAnimation("binderDied");
- }
-
- private static final class FinishedCallback extends IRemoteAnimationFinishedCallback.Stub {
-
- RemoteAnimationController mOuter;
-
- FinishedCallback(RemoteAnimationController outer) {
- mOuter = outer;
- }
-
- @Override
- public void onAnimationFinished() throws RemoteException {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "app-onAnimationFinished(): mOuter=%s", mOuter);
- final long token = Binder.clearCallingIdentity();
- try {
- if (mOuter != null) {
- mOuter.onAnimationFinished();
-
- // In case the client holds on to the finish callback, make sure we don't leak
- // RemoteAnimationController which in turn would leak the runner on the client.
- mOuter = null;
- }
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
-
- /**
- * Marks this callback as not be used anymore by releasing the reference to the outer class
- * to prevent memory leak.
- */
- void release() {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "app-release(): mOuter=%s", mOuter);
- mOuter = null;
- }
- };
-
- /**
- * Contains information about a remote-animation for one WindowContainer. This keeps track of,
- * potentially, multiple animating surfaces (AdapterWrappers) associated with one
- * Window/Transition. For example, a change transition has an adapter controller for the
- * main window and an adapter controlling the start-state snapshot.
- * <p>
- * This can be thought of as a bridge between the information that the remote animator sees (via
- * {@link RemoteAnimationTarget}) and what the server sees (the
- * {@link RemoteAnimationAdapterWrapper}(s) interfacing with the moving surfaces).
- */
- public class RemoteAnimationRecord {
- RemoteAnimationAdapterWrapper mAdapter;
- RemoteAnimationAdapterWrapper mThumbnailAdapter = null;
- RemoteAnimationTarget mTarget;
- final WindowContainer mWindowContainer;
- final Rect mStartBounds;
- final boolean mShowBackdrop;
- @ColorInt int mBackdropColor = 0;
- private @RemoteAnimationTarget.Mode int mMode = RemoteAnimationTarget.MODE_CHANGING;
-
- RemoteAnimationRecord(WindowContainer windowContainer, Point endPos, Rect localBounds,
- Rect endBounds, @Nullable Rect startBounds, boolean showBackdrop,
- boolean shouldCreateSnapshot) {
- mWindowContainer = windowContainer;
- mShowBackdrop = showBackdrop;
- if (startBounds != null) {
- mStartBounds = new Rect(startBounds);
- mAdapter = new RemoteAnimationAdapterWrapper(this, endPos, localBounds, endBounds,
- mStartBounds, mShowBackdrop);
- if (shouldCreateSnapshot && mRemoteAnimationAdapter.getChangeNeedsSnapshot()) {
- final Rect thumbnailLocalBounds = new Rect(startBounds);
- thumbnailLocalBounds.offsetTo(0, 0);
- // Snapshot is located at (0,0) of the animation leash. It doesn't have size
- // change, so the startBounds is its end bounds, and no start bounds for it.
- mThumbnailAdapter = new RemoteAnimationAdapterWrapper(this, new Point(0, 0),
- thumbnailLocalBounds, startBounds, new Rect(), mShowBackdrop);
- }
- } else {
- mAdapter = new RemoteAnimationAdapterWrapper(this, endPos, localBounds, endBounds,
- new Rect(), mShowBackdrop);
- mStartBounds = null;
- }
- }
-
- void setBackDropColor(@ColorInt int backdropColor) {
- mBackdropColor = backdropColor;
- }
-
- RemoteAnimationTarget createRemoteAnimationTarget() {
- if (mAdapter == null
- || mAdapter.mCapturedFinishCallback == null
- || mAdapter.mCapturedLeash == null) {
- return null;
- }
- mTarget = mWindowContainer.createRemoteAnimationTarget(this);
- return mTarget;
- }
-
- void setMode(@RemoteAnimationTarget.Mode int mode) {
- mMode = mode;
- }
-
- int getMode() {
- return mMode;
- }
-
- /** Whether its parent is also an animation target in the same transition. */
- boolean hasAnimatingParent() {
- // mOpeningApps and mClosingApps are only activities, so only need to check
- // mChangingContainers.
- for (int i = mDisplayContent.mChangingContainers.size() - 1; i >= 0; i--) {
- if (mWindowContainer.isDescendantOf(
- mDisplayContent.mChangingContainers.valueAt(i))) {
- return true;
- }
- }
- return false;
- }
- }
-
- class RemoteAnimationAdapterWrapper implements AnimationAdapter {
- private final RemoteAnimationRecord mRecord;
- SurfaceControl mCapturedLeash;
- private OnAnimationFinishedCallback mCapturedFinishCallback;
- private @AnimationType int mAnimationType;
- final Point mPosition = new Point();
- final Rect mLocalBounds;
- final Rect mEndBounds = new Rect();
- final Rect mStartBounds = new Rect();
- final boolean mShowBackdrop;
-
- RemoteAnimationAdapterWrapper(RemoteAnimationRecord record, Point position,
- Rect localBounds, Rect endBounds, Rect startBounds, boolean showBackdrop) {
- mRecord = record;
- mPosition.set(position.x, position.y);
- mLocalBounds = localBounds;
- mEndBounds.set(endBounds);
- mStartBounds.set(startBounds);
- mShowBackdrop = showBackdrop;
- }
-
- @Override
- @ColorInt
- public int getBackgroundColor() {
- return mRecord.mBackdropColor;
- }
-
- @Override
- public boolean getShowBackground() {
- return mShowBackdrop;
- }
-
- @Override
- public boolean getShowWallpaper() {
- return false;
- }
-
- @Override
- public void startAnimation(SurfaceControl animationLeash, Transaction t,
- @AnimationType int type, @NonNull OnAnimationFinishedCallback finishCallback) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "startAnimation");
-
- if (mStartBounds.isEmpty()) {
- // Restore position and stack crop until client has a chance to modify it.
- t.setPosition(animationLeash, mPosition.x, mPosition.y);
- t.setWindowCrop(animationLeash, mEndBounds.width(), mEndBounds.height());
- } else {
- // Offset the change animation leash to the relative start position in parent.
- // (mPosition) is the relative end position in parent container.
- // (mStartBounds - mEndBounds) is the position difference between start and end.
- // (mPosition + mStartBounds - mEndBounds) will be the relative start position.
- t.setPosition(animationLeash, mPosition.x + mStartBounds.left - mEndBounds.left,
- mPosition.y + mStartBounds.top - mEndBounds.top);
- t.setWindowCrop(animationLeash, mStartBounds.width(), mStartBounds.height());
- }
- mCapturedLeash = animationLeash;
- mCapturedFinishCallback = finishCallback;
- mAnimationType = type;
- }
-
- @Override
- public void onAnimationCancelled(SurfaceControl animationLeash) {
- if (mIsFinishing) {
- return;
- }
- if (mRecord.mAdapter == this) {
- mRecord.mAdapter = null;
- } else {
- mRecord.mThumbnailAdapter = null;
- }
- if (mRecord.mAdapter == null && mRecord.mThumbnailAdapter == null) {
- mPendingAnimations.remove(mRecord);
- }
- if (mPendingAnimations.isEmpty()) {
- cancelAnimation("allAppAnimationsCanceled");
- }
- }
-
- @Override
- public long getDurationHint() {
- return mRemoteAnimationAdapter.getDuration();
- }
-
- @Override
- public long getStatusBarTransitionsStartTime() {
- return SystemClock.uptimeMillis()
- + mRemoteAnimationAdapter.getStatusBarTransitionDelay();
- }
-
- @Override
- public void dump(PrintWriter pw, String prefix) {
- pw.print(prefix); pw.print("container="); pw.println(mRecord.mWindowContainer);
- if (mRecord.mTarget != null) {
- pw.print(prefix); pw.println("Target:");
- mRecord.mTarget.dump(pw, prefix + " ");
- } else {
- pw.print(prefix); pw.println("Target: null");
- }
- }
-
- @Override
- public void dumpDebug(ProtoOutputStream proto) {
- final long token = proto.start(REMOTE);
- if (mRecord.mTarget != null) {
- mRecord.mTarget.dumpDebug(proto, TARGET);
- }
- proto.end(token);
- }
- }
-}
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java
index ae3a015a690d..1966ecf57c73 100644
--- a/services/core/java/com/android/server/wm/TaskDisplayArea.java
+++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java
@@ -50,7 +50,6 @@ import android.graphics.Color;
import android.os.UserHandle;
import android.util.IntArray;
import android.util.Slog;
-import android.view.RemoteAnimationTarget;
import android.view.SurfaceControl;
import android.view.WindowManager;
@@ -776,13 +775,6 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
return needsZBoost[0];
}
- @Override
- RemoteAnimationTarget createRemoteAnimationTarget(
- RemoteAnimationController.RemoteAnimationRecord record) {
- final ActivityRecord activity = getTopMostActivity();
- return activity != null ? activity.createRemoteAnimationTarget(record) : null;
- }
-
void setBackgroundColor(@ColorInt int colorInt) {
setBackgroundColor(colorInt, false /* restore */);
}
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index 97a1a34336e9..74059c1cc9b1 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -99,7 +99,6 @@ import android.util.DisplayMetrics;
import android.util.Slog;
import android.util.proto.ProtoOutputStream;
import android.view.DisplayInfo;
-import android.view.RemoteAnimationTarget;
import android.view.SurfaceControl;
import android.window.ITaskFragmentOrganizer;
import android.window.TaskFragmentAnimationParams;
@@ -2306,18 +2305,6 @@ class TaskFragment extends WindowContainer<WindowContainer> {
}
@Override
- RemoteAnimationTarget createRemoteAnimationTarget(
- RemoteAnimationController.RemoteAnimationRecord record) {
- final ActivityRecord activity = record.getMode() == RemoteAnimationTarget.MODE_OPENING
- // There may be a launching (e.g. trampoline or embedded) activity without a window
- // on top of the existing task which is moving to front. Exclude finishing activity
- // so the window of next activity can be chosen to create the animation target.
- ? getActivity(r -> !r.finishing && r.hasChild())
- : getTopMostActivity();
- return activity != null ? activity.createRemoteAnimationTarget(record) : null;
- }
-
- @Override
boolean canCreateRemoteAnimationTarget() {
return true;
}
diff --git a/services/core/java/com/android/server/wm/WallpaperAnimationAdapter.java b/services/core/java/com/android/server/wm/WallpaperAnimationAdapter.java
deleted file mode 100644
index c3e85b1f8662..000000000000
--- a/services/core/java/com/android/server/wm/WallpaperAnimationAdapter.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.server.wm;
-
-import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_REMOTE_ANIMATIONS;
-import static com.android.server.wm.AnimationAdapterProto.REMOTE;
-import static com.android.server.wm.RemoteAnimationAdapterWrapperProto.TARGET;
-import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION;
-
-import android.annotation.NonNull;
-import android.graphics.Point;
-import android.os.SystemClock;
-import android.util.proto.ProtoOutputStream;
-import android.view.RemoteAnimationTarget;
-import android.view.SurfaceControl;
-
-import com.android.internal.protolog.ProtoLog;
-import com.android.server.wm.SurfaceAnimator.AnimationType;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.function.Consumer;
-
-/**
- * An animation adapter for wallpaper windows.
- */
-class WallpaperAnimationAdapter implements AnimationAdapter {
- private static final String TAG = "WallpaperAnimationAdapter";
-
- private final WallpaperWindowToken mWallpaperToken;
- private SurfaceControl mCapturedLeash;
- private SurfaceAnimator.OnAnimationFinishedCallback mCapturedLeashFinishCallback;
- private @AnimationType int mLastAnimationType;
-
- private long mDurationHint;
- private long mStatusBarTransitionDelay;
-
- private Consumer<WallpaperAnimationAdapter> mAnimationCanceledRunnable;
- private RemoteAnimationTarget mTarget;
-
- WallpaperAnimationAdapter(WallpaperWindowToken wallpaperToken,
- long durationHint, long statusBarTransitionDelay,
- Consumer<WallpaperAnimationAdapter> animationCanceledRunnable) {
- mWallpaperToken = wallpaperToken;
- mDurationHint = durationHint;
- mStatusBarTransitionDelay = statusBarTransitionDelay;
- mAnimationCanceledRunnable = animationCanceledRunnable;
- }
-
- /**
- * Creates and starts remote animations for all the visible wallpaper windows.
- *
- * @return RemoteAnimationTarget[] targets for all the visible wallpaper windows
- */
- public static RemoteAnimationTarget[] startWallpaperAnimations(DisplayContent displayContent,
- long durationHint, long statusBarTransitionDelay,
- Consumer<WallpaperAnimationAdapter> animationCanceledRunnable,
- ArrayList<WallpaperAnimationAdapter> adaptersOut) {
- if (!shouldStartWallpaperAnimation(displayContent)) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS,
- "\tWallpaper of display=%s is not visible", displayContent);
- return new RemoteAnimationTarget[0];
- }
- final ArrayList<RemoteAnimationTarget> targets = new ArrayList<>();
- displayContent.forAllWallpaperWindows(wallpaperWindow -> {
- final WallpaperAnimationAdapter wallpaperAdapter = new WallpaperAnimationAdapter(
- wallpaperWindow, durationHint, statusBarTransitionDelay,
- animationCanceledRunnable);
- wallpaperWindow.startAnimation(wallpaperWindow.getPendingTransaction(),
- wallpaperAdapter, false /* hidden */, ANIMATION_TYPE_WINDOW_ANIMATION);
- targets.add(wallpaperAdapter.createRemoteAnimationTarget());
- adaptersOut.add(wallpaperAdapter);
- });
- return targets.toArray(new RemoteAnimationTarget[targets.size()]);
- }
-
- static boolean shouldStartWallpaperAnimation(DisplayContent displayContent) {
- return displayContent.mWallpaperController.isWallpaperVisible();
- }
-
- /**
- * Create a remote animation target for this animation adapter.
- */
- RemoteAnimationTarget createRemoteAnimationTarget() {
- mTarget = new RemoteAnimationTarget(-1, -1, getLeash(), false, null, null,
- mWallpaperToken.getPrefixOrderIndex(), new Point(), null, null,
- mWallpaperToken.getWindowConfiguration(), true, null, null, null, false);
- return mTarget;
- }
-
- /**
- * @return the leash for this animation (only valid after the wallpaper window surface animation
- * has started).
- */
- SurfaceControl getLeash() {
- return mCapturedLeash;
- }
-
- /**
- * @return the callback to call to clean up when the animation has finished.
- */
- SurfaceAnimator.OnAnimationFinishedCallback getLeashFinishedCallback() {
- return mCapturedLeashFinishCallback;
- }
-
- /**
- * @return the type of animation.
- */
- @AnimationType int getLastAnimationType() {
- return mLastAnimationType;
- }
-
- /**
- * @return the wallpaper window
- */
- WallpaperWindowToken getToken() {
- return mWallpaperToken;
- }
-
- @Override
- public boolean getShowWallpaper() {
- // Not used
- return false;
- }
-
- @Override
- public void startAnimation(SurfaceControl animationLeash, SurfaceControl.Transaction t,
- @AnimationType int type,
- @NonNull SurfaceAnimator.OnAnimationFinishedCallback finishCallback) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "startAnimation");
-
- // Restore z-layering until client has a chance to modify it.
- t.setLayer(animationLeash, mWallpaperToken.getPrefixOrderIndex());
- mCapturedLeash = animationLeash;
- mCapturedLeashFinishCallback = finishCallback;
- mLastAnimationType = type;
- }
-
- @Override
- public void onAnimationCancelled(SurfaceControl animationLeash) {
- ProtoLog.d(WM_DEBUG_REMOTE_ANIMATIONS, "onAnimationCancelled");
- mAnimationCanceledRunnable.accept(this);
- }
-
- @Override
- public long getDurationHint() {
- return mDurationHint;
- }
-
- @Override
- public long getStatusBarTransitionsStartTime() {
- return SystemClock.uptimeMillis() + mStatusBarTransitionDelay;
- }
-
- @Override
- public void dump(PrintWriter pw, String prefix) {
- pw.print(prefix);
- pw.print("token=");
- pw.println(mWallpaperToken);
- if (mTarget != null) {
- pw.print(prefix);
- pw.println("Target:");
- mTarget.dump(pw, prefix + " ");
- } else {
- pw.print(prefix);
- pw.println("Target: null");
- }
- }
-
- @Override
- public void dumpDebug(ProtoOutputStream proto) {
- final long token = proto.start(REMOTE);
- if (mTarget != null) {
- mTarget.dumpDebug(proto, TARGET);
- }
- proto.end(token);
- }
-}
diff --git a/services/core/java/com/android/server/wm/WallpaperWindowToken.java b/services/core/java/com/android/server/wm/WallpaperWindowToken.java
index 3b79c54f1c73..7c88abcec7ec 100644
--- a/services/core/java/com/android/server/wm/WallpaperWindowToken.java
+++ b/services/core/java/com/android/server/wm/WallpaperWindowToken.java
@@ -34,7 +34,6 @@ import android.util.SparseArray;
import com.android.internal.protolog.ProtoLog;
import java.io.PrintWriter;
-import java.util.function.Consumer;
/**
* A token that represents a set of wallpaper windows.
@@ -250,11 +249,6 @@ class WallpaperWindowToken extends WindowToken {
}
@Override
- void forAllWallpaperWindows(Consumer<WallpaperWindowToken> callback) {
- callback.accept(this);
- }
-
- @Override
boolean fillsParent() {
return true;
}
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index 7af542f10127..95cdf46ea488 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -97,7 +97,6 @@ import android.view.InsetsSource;
import android.view.InsetsState;
import android.view.MagnificationSpec;
import android.view.RemoteAnimationDefinition;
-import android.view.RemoteAnimationTarget;
import android.view.Surface;
import android.view.SurfaceControl;
import android.view.SurfaceControl.Builder;
@@ -303,7 +302,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
* This gets used during some open/close transitions as well as during a change transition
* where it represents the starting-state snapshot.
*/
- WindowContainerThumbnail mThumbnail;
final Point mTmpPoint = new Point();
protected final Rect mTmpRect = new Rect();
final Rect mTmpPrevBounds = new Rect();
@@ -2097,12 +2095,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
return getActivity((r) -> !r.finishing && !r.isTaskOverlay());
}
- void forAllWallpaperWindows(Consumer<WallpaperWindowToken> callback) {
- for (int i = mChildren.size() - 1; i >= 0; --i) {
- mChildren.get(i).forAllWallpaperWindows(callback);
- }
- }
-
/**
* Calls the given {@param callback} for all tasks in depth-first top-down z-order at or below
* this container.
@@ -3174,61 +3166,10 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
getAnimationPosition(mTmpPoint);
mTmpRect.offsetTo(0, 0);
- final AppTransition appTransition = getDisplayContent().mAppTransition;
- final RemoteAnimationController controller = appTransition.getRemoteAnimationController();
final boolean isChanging = AppTransition.isChangeTransitOld(transit) && enter
&& isChangingAppTransition();
- if (controller != null) {
- // Here we load App XML in order to read com.android.R.styleable#Animation_showBackdrop.
- boolean showBackdrop = false;
- // Optionally set backdrop color if App explicitly provides it through
- // {@link Activity#overridePendingTransition(int, int, int)}.
- @ColorInt int backdropColor = 0;
- if (controller.isFromActivityEmbedding()) {
- if (isChanging) {
- // When there are more than one changing containers, it may leave part of the
- // screen empty. Show background color to cover that.
- showBackdrop = getDisplayContent().mChangingContainers.size() > 1;
- backdropColor = appTransition.getNextAppTransitionBackgroundColor();
- } else {
- // Check whether the app has requested to show backdrop for open/close
- // transition.
- final Animation a = appTransition.getNextAppRequestedAnimation(enter);
- if (a != null) {
- showBackdrop = a.getShowBackdrop();
- backdropColor = a.getBackdropColor();
- }
- }
- }
- final Rect localBounds = new Rect(mTmpRect);
- localBounds.offsetTo(mTmpPoint.x, mTmpPoint.y);
- final RemoteAnimationController.RemoteAnimationRecord adapters;
- if (!isChanging && !enter && isClosingWhenResizing()) {
- // Container that is closing while resizing. Pass in the closing start bounds, so
- // the animation can start with the correct bounds, there won't be a snapshot.
- // Cleanup the mClosingChangingContainers so that when the animation is finished, it
- // will reset the surface.
- final Rect closingStartBounds = getDisplayContent().mClosingChangingContainers
- .remove(this);
- adapters = controller.createRemoteAnimationRecord(
- this, mTmpPoint, localBounds, screenBounds, closingStartBounds,
- showBackdrop, false /* shouldCreateSnapshot */);
- } else {
- final Rect startBounds = null;
- adapters = controller.createRemoteAnimationRecord(
- this, mTmpPoint, localBounds, screenBounds, startBounds, showBackdrop);
- }
- if (backdropColor != 0) {
- adapters.setBackDropColor(backdropColor);
- }
- if (!isChanging) {
- adapters.setMode(enter
- ? RemoteAnimationTarget.MODE_OPENING
- : RemoteAnimationTarget.MODE_CLOSING);
- }
- resultAdapters = new Pair<>(adapters.mAdapter, adapters.mThumbnailAdapter);
- } else if (isChanging) {
+ if (isChanging) {
final float durationScale = mWmService.getTransitionAnimationScaleLocked();
final DisplayInfo displayInfo = getDisplayContent().getDisplayInfo();
mTmpRect.offsetTo(mTmpPoint.x, mTmpPoint.y);
@@ -3417,11 +3358,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
return a;
}
- RemoteAnimationTarget createRemoteAnimationTarget(
- RemoteAnimationController.RemoteAnimationRecord record) {
- return null;
- }
-
boolean canCreateRemoteAnimationTarget() {
return false;
}
diff --git a/services/core/java/com/android/server/wm/WindowContainerThumbnail.java b/services/core/java/com/android/server/wm/WindowContainerThumbnail.java
deleted file mode 100644
index ae477e1e22f0..000000000000
--- a/services/core/java/com/android/server/wm/WindowContainerThumbnail.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm;
-
-import static android.view.SurfaceControl.METADATA_OWNER_UID;
-import static android.view.SurfaceControl.METADATA_WINDOW_TYPE;
-
-import static com.android.internal.protolog.WmProtoLogGroups.WM_SHOW_TRANSACTIONS;
-import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
-import static com.android.server.wm.WindowContainerThumbnailProto.HEIGHT;
-import static com.android.server.wm.WindowContainerThumbnailProto.SURFACE_ANIMATOR;
-import static com.android.server.wm.WindowContainerThumbnailProto.WIDTH;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-import static com.android.server.wm.WindowManagerService.MAX_ANIMATION_DURATION;
-
-import android.graphics.ColorSpace;
-import android.graphics.GraphicBuffer;
-import android.graphics.PixelFormat;
-import android.graphics.Point;
-import android.hardware.HardwareBuffer;
-import android.util.proto.ProtoOutputStream;
-import android.view.SurfaceControl;
-import android.view.SurfaceControl.Builder;
-import android.view.SurfaceControl.Transaction;
-import android.view.animation.Animation;
-
-import com.android.internal.protolog.ProtoLog;
-import com.android.server.wm.SurfaceAnimator.Animatable;
-import com.android.server.wm.SurfaceAnimator.AnimationType;
-
-/**
- * Represents a surface that is displayed over a subclass of {@link WindowContainer}
- */
-class WindowContainerThumbnail implements Animatable {
-
- private static final String TAG = TAG_WITH_CLASS_NAME ? "WindowContainerThumbnail" : TAG_WM;
-
- private final WindowContainer mWindowContainer;
- private SurfaceControl mSurfaceControl;
- private final SurfaceAnimator mSurfaceAnimator;
- private final int mWidth;
- private final int mHeight;
-
- /**
- * @param t Transaction to create the thumbnail in.
- * @param container The sub-class of {@link WindowContainer} to associate this thumbnail with.
- * @param thumbnailHeader A thumbnail or placeholder for thumbnail to initialize with.
- */
- WindowContainerThumbnail(Transaction t, WindowContainer container,
- HardwareBuffer thumbnailHeader) {
- this(t, container, thumbnailHeader, null /* animator */);
- }
-
- WindowContainerThumbnail(Transaction t, WindowContainer container,
- HardwareBuffer thumbnailHeader, SurfaceAnimator animator) {
- mWindowContainer = container;
- if (animator != null) {
- mSurfaceAnimator = animator;
- } else {
- // We can't use a delegating constructor since we need to
- // reference this::onAnimationFinished
- mSurfaceAnimator =
- new SurfaceAnimator(this, this::onAnimationFinished /* animationFinishedCallback */,
- container.mWmService);
- }
- mWidth = thumbnailHeader.getWidth();
- mHeight = thumbnailHeader.getHeight();
-
- // Create a new surface for the thumbnail
- // TODO: This should be attached as a child to the app token, once the thumbnail animations
- // use relative coordinates. Once we start animating task we can also consider attaching
- // this to the task.
- mSurfaceControl = mWindowContainer.makeChildSurface(mWindowContainer.getTopChild())
- .setName("thumbnail anim: " + mWindowContainer.toString())
- .setBLASTLayer()
- .setFormat(PixelFormat.TRANSLUCENT)
- .setMetadata(METADATA_WINDOW_TYPE, mWindowContainer.getWindowingMode())
- .setMetadata(METADATA_OWNER_UID, WindowManagerService.MY_UID)
- .setCallsite("WindowContainerThumbnail")
- .build();
-
- ProtoLog.i(WM_SHOW_TRANSACTIONS, " THUMBNAIL %s: CREATE", mSurfaceControl);
-
- GraphicBuffer graphicBuffer = GraphicBuffer.createFromHardwareBuffer(thumbnailHeader);
- t.setBuffer(mSurfaceControl, graphicBuffer);
- t.setColorSpace(mSurfaceControl, ColorSpace.get(ColorSpace.Named.SRGB));
- t.show(mSurfaceControl);
-
- // We parent the thumbnail to the container, and just place it on top of anything else in
- // the container.
- t.setLayer(mSurfaceControl, Integer.MAX_VALUE);
- }
-
- void startAnimation(Transaction t, Animation anim) {
- startAnimation(t, anim, null /* position */);
- }
-
- void startAnimation(Transaction t, Animation anim, Point position) {
- anim.restrictDuration(MAX_ANIMATION_DURATION);
- anim.scaleCurrentDuration(mWindowContainer.mWmService.getTransitionAnimationScaleLocked());
- mSurfaceAnimator.startAnimation(t, new LocalAnimationAdapter(
- new WindowAnimationSpec(anim, position,
- mWindowContainer.getDisplayContent().mAppTransition.canSkipFirstFrame(),
- mWindowContainer.getDisplayContent().getWindowCornerRadius()),
- mWindowContainer.mWmService.mSurfaceAnimationRunner), false /* hidden */,
- ANIMATION_TYPE_APP_TRANSITION);
- }
-
- private void onAnimationFinished(@AnimationType int type, AnimationAdapter anim) {
- }
-
- void setShowing(Transaction pendingTransaction, boolean show) {
- // TODO: Not needed anymore once thumbnail is attached to the app.
- if (show) {
- pendingTransaction.show(mSurfaceControl);
- } else {
- pendingTransaction.hide(mSurfaceControl);
- }
- }
-
- void destroy() {
- mSurfaceAnimator.cancelAnimation();
- getPendingTransaction().remove(mSurfaceControl);
- mSurfaceControl = null;
- }
-
- /**
- * Write to a protocol buffer output stream. Protocol buffer message definition is at {@link
- * com.android.server.wm.WindowContainerThumbnailProto}.
- *
- * @param proto Stream to write the WindowContainerThumbnailProto object to.
- * @param fieldId Field Id of the WindowContainerThumbnailProto as defined in the parent
- * message.
- * @hide
- */
- void dumpDebug(ProtoOutputStream proto, long fieldId) {
- final long token = proto.start(fieldId);
- proto.write(WIDTH, mWidth);
- proto.write(HEIGHT, mHeight);
- if (mSurfaceAnimator.isAnimating()) {
- mSurfaceAnimator.dumpDebug(proto, SURFACE_ANIMATOR);
- }
- proto.end(token);
- }
-
- @Override
- public Transaction getSyncTransaction() {
- return mWindowContainer.getSyncTransaction();
- }
-
- @Override
- public Transaction getPendingTransaction() {
- return mWindowContainer.getPendingTransaction();
- }
-
- @Override
- public void commitPendingTransaction() {
- mWindowContainer.commitPendingTransaction();
- }
-
- @Override
- public void onAnimationLeashCreated(Transaction t, SurfaceControl leash) {
- t.setLayer(leash, Integer.MAX_VALUE);
- }
-
- @Override
- public void onAnimationLeashLost(Transaction t) {
-
- // TODO: Once attached to app token, we don't need to hide it immediately if thumbnail
- // became visible.
- t.hide(mSurfaceControl);
- }
-
- @Override
- public Builder makeAnimationLeash() {
- return mWindowContainer.makeChildSurface(mWindowContainer.getTopChild());
- }
-
- @Override
- public SurfaceControl getSurfaceControl() {
- return mSurfaceControl;
- }
-
- @Override
- public SurfaceControl getAnimationLeashParent() {
- return mWindowContainer.getAnimationLeashParent();
- }
-
- @Override
- public SurfaceControl getParentSurfaceControl() {
- return mWindowContainer.getParentSurfaceControl();
- }
-
- @Override
- public int getSurfaceWidth() {
- return mWidth;
- }
-
- @Override
- public int getSurfaceHeight() {
- return mHeight;
- }
-}
diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java
index 3b6a4dc6e1b0..4c53ba53a506 100644
--- a/services/core/java/com/android/server/wm/WindowOrganizerController.java
+++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java
@@ -30,24 +30,25 @@ import static android.window.TaskFragmentOperation.OP_TYPE_CLEAR_ADJACENT_TASK_F
import static android.window.TaskFragmentOperation.OP_TYPE_CREATE_OR_MOVE_TASK_FRAGMENT_DECOR_SURFACE;
import static android.window.TaskFragmentOperation.OP_TYPE_CREATE_TASK_FRAGMENT;
import static android.window.TaskFragmentOperation.OP_TYPE_DELETE_TASK_FRAGMENT;
+import static android.window.TaskFragmentOperation.OP_TYPE_PRIVILEGED_REORDER_TO_BOTTOM_OF_TASK;
+import static android.window.TaskFragmentOperation.OP_TYPE_PRIVILEGED_REORDER_TO_TOP_OF_TASK;
+import static android.window.TaskFragmentOperation.OP_TYPE_PRIVILEGED_SET_CAN_AFFECT_SYSTEM_UI_FLAGS;
+import static android.window.TaskFragmentOperation.OP_TYPE_PRIVILEGED_SET_MOVE_TO_BOTTOM_IF_CLEAR_WHEN_LAUNCH;
import static android.window.TaskFragmentOperation.OP_TYPE_REMOVE_TASK_FRAGMENT_DECOR_SURFACE;
-import static android.window.TaskFragmentOperation.OP_TYPE_REORDER_TO_BOTTOM_OF_TASK;
import static android.window.TaskFragmentOperation.OP_TYPE_REORDER_TO_FRONT;
-import static android.window.TaskFragmentOperation.OP_TYPE_REORDER_TO_TOP_OF_TASK;
import static android.window.TaskFragmentOperation.OP_TYPE_REPARENT_ACTIVITY_TO_TASK_FRAGMENT;
import static android.window.TaskFragmentOperation.OP_TYPE_REQUEST_FOCUS_ON_TASK_FRAGMENT;
import static android.window.TaskFragmentOperation.OP_TYPE_SET_ADJACENT_TASK_FRAGMENTS;
import static android.window.TaskFragmentOperation.OP_TYPE_SET_ANIMATION_PARAMS;
-import static android.window.TaskFragmentOperation.OP_TYPE_SET_CAN_AFFECT_SYSTEM_UI_FLAGS;
import static android.window.TaskFragmentOperation.OP_TYPE_SET_COMPANION_TASK_FRAGMENT;
import static android.window.TaskFragmentOperation.OP_TYPE_SET_DECOR_SURFACE_BOOSTED;
import static android.window.TaskFragmentOperation.OP_TYPE_SET_DIM_ON_TASK;
import static android.window.TaskFragmentOperation.OP_TYPE_SET_ISOLATED_NAVIGATION;
-import static android.window.TaskFragmentOperation.OP_TYPE_SET_MOVE_TO_BOTTOM_IF_CLEAR_WHEN_LAUNCH;
import static android.window.TaskFragmentOperation.OP_TYPE_SET_PINNED;
import static android.window.TaskFragmentOperation.OP_TYPE_SET_RELATIVE_BOUNDS;
import static android.window.TaskFragmentOperation.OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT;
import static android.window.TaskFragmentOperation.OP_TYPE_UNKNOWN;
+import static android.window.TaskFragmentOperation.PRIVILEGED_OP_START;
import static android.window.WindowContainerTransaction.Change.CHANGE_FOCUSABLE;
import static android.window.WindowContainerTransaction.Change.CHANGE_FORCE_TRANSLUCENT;
import static android.window.WindowContainerTransaction.Change.CHANGE_HIDDEN;
@@ -1786,7 +1787,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
taskFragment.setIsolatedNav(isolatedNav);
break;
}
- case OP_TYPE_REORDER_TO_BOTTOM_OF_TASK: {
+ case OP_TYPE_PRIVILEGED_REORDER_TO_BOTTOM_OF_TASK: {
final Task task = taskFragment.getTask();
if (task != null) {
if (task.getBottomChild() != taskFragment) {
@@ -1802,7 +1803,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
}
break;
}
- case OP_TYPE_REORDER_TO_TOP_OF_TASK: {
+ case OP_TYPE_PRIVILEGED_REORDER_TO_TOP_OF_TASK: {
final Task task = taskFragment.getTask();
if (task != null) {
if (task.getTopChild() != taskFragment) {
@@ -1852,7 +1853,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
: EMBEDDED_DIM_AREA_TASK_FRAGMENT);
break;
}
- case OP_TYPE_SET_MOVE_TO_BOTTOM_IF_CLEAR_WHEN_LAUNCH: {
+ case OP_TYPE_PRIVILEGED_SET_MOVE_TO_BOTTOM_IF_CLEAR_WHEN_LAUNCH: {
taskFragment.setMoveToBottomIfClearWhenLaunch(operation.getBooleanValue());
break;
}
@@ -1888,7 +1889,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
taskFragment.setPinned(pinned);
break;
}
- case OP_TYPE_SET_CAN_AFFECT_SYSTEM_UI_FLAGS: {
+ case OP_TYPE_PRIVILEGED_SET_CAN_AFFECT_SYSTEM_UI_FLAGS: {
taskFragment.setCanAffectSystemUiFlags(operation.getBooleanValue());
// Request to apply the flags.
@@ -1938,45 +1939,23 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
return false;
}
final int opType = operation.getOpType();
- if (opType == OP_TYPE_CREATE_TASK_FRAGMENT) {
- // No need to check TaskFragment.
- return true;
- }
-
- if (!validateTaskFragment(taskFragment, opType, errorCallbackToken, organizer)) {
- return false;
- }
- if ((opType == OP_TYPE_REORDER_TO_BOTTOM_OF_TASK
- || opType == OP_TYPE_REORDER_TO_TOP_OF_TASK)
+ if (opType >= PRIVILEGED_OP_START
&& !mTaskFragmentOrganizerController.isSystemOrganizer(organizer.asBinder())) {
final Throwable exception = new SecurityException(
- "Only a system organizer can perform OP_TYPE_REORDER_TO_BOTTOM_OF_TASK or "
- + "OP_TYPE_REORDER_TO_TOP_OF_TASK."
+ "Only a system organizer can perform privileged operations. opType=" + opType
);
sendTaskFragmentOperationFailure(organizer, errorCallbackToken, taskFragment,
opType, exception);
return false;
}
- if ((opType == OP_TYPE_SET_MOVE_TO_BOTTOM_IF_CLEAR_WHEN_LAUNCH)
- && !mTaskFragmentOrganizerController.isSystemOrganizer(organizer.asBinder())) {
- final Throwable exception = new SecurityException(
- "Only a system organizer can perform "
- + "OP_TYPE_SET_MOVE_TO_BOTTOM_IF_CLEAR_WHEN_LAUNCH."
- );
- sendTaskFragmentOperationFailure(organizer, errorCallbackToken, taskFragment,
- opType, exception);
- return false;
+ if (opType == OP_TYPE_CREATE_TASK_FRAGMENT) {
+ // No need to check TaskFragment.
+ return true;
}
- if ((opType == OP_TYPE_SET_CAN_AFFECT_SYSTEM_UI_FLAGS)
- && !mTaskFragmentOrganizerController.isSystemOrganizer(organizer.asBinder())) {
- final Throwable exception = new SecurityException(
- "Only a system organizer can perform OP_TYPE_SET_CAN_AFFECT_SYSTEM_UI_FLAGS."
- );
- sendTaskFragmentOperationFailure(organizer, errorCallbackToken, taskFragment,
- opType, exception);
+ if (!validateTaskFragment(taskFragment, opType, errorCallbackToken, organizer)) {
return false;
}
diff --git a/services/people/java/com/android/server/people/PeopleService.java b/services/people/java/com/android/server/people/PeopleService.java
index b9f00d7979c2..44a83541f0b9 100644
--- a/services/people/java/com/android/server/people/PeopleService.java
+++ b/services/people/java/com/android/server/people/PeopleService.java
@@ -16,6 +16,8 @@
package com.android.server.people;
+import static com.android.server.flags.Flags.earlyDataManagerInit;
+
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -117,6 +119,18 @@ public class PeopleService extends SystemService {
}
@Override
+ public void onBootPhase(int phase) {
+ if (phase == PHASE_BOOT_COMPLETED) {
+ if (earlyDataManagerInit()) {
+ // Force initialization of DataManager before onUserUnlocked
+ // to avoid blocking the ActivityManagerService on
+ // shortcutHandleUnlockUser.
+ getDataManager();
+ }
+ }
+ }
+
+ @Override
public void onUserUnlocked(@NonNull TargetUser user) {
getDataManager().onUserUnlocked(user.getUserIdentifier());
}
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidManifest.xml b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidManifest.xml
index b7de74987eb8..45523268c966 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidManifest.xml
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidManifest.xml
@@ -32,8 +32,8 @@
<uses-library android:name="android.test.runner" />
</application>
- <!-- The "targetPackage" reference the instruments APK package, which is the FakeImeApk, while
- the test package is "com.android.inputmethod.imetests" (FrameworksImeTests.apk).-->
+ <!-- The "targetPackage" reference the instruments APK package, which is the SimpleTestIme.apk,
+ while the test package is "com.android.inputmethod.imetests" (FrameworksImeTests.apk).-->
<instrumentation
android:name="androidx.test.runner.AndroidJUnitRunner"
android:targetPackage="com.android.apps.inputmethod.simpleime"
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java
index 72e9cc566497..5d64cb638702 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java
@@ -92,6 +92,9 @@ public class InputMethodServiceTest {
private static final String DISABLE_SHOW_IME_WITH_HARD_KEYBOARD_CMD =
"settings put secure " + Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD + " 0";
+ /** The ids of the subtypes of SimpleIme. */
+ private static final int[] SUBTYPE_IDS = new int[]{1, 2};
+
private final WindowManagerStateHelper mWmState = new WindowManagerStateHelper();
private final GestureNavSwitchHelper mGestureNavSwitchHelper = new GestureNavSwitchHelper();
@@ -173,15 +176,14 @@ public class InputMethodServiceTest {
Log.i(TAG, "Click on EditText");
verifyInputViewStatus(
() -> clickOnViewCenter(mActivity.getEditText()),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
// Press home key to hide IME.
Log.i(TAG, "Press home");
if (mFlagsValueProvider.getBoolean(Flags.FLAG_REFACTOR_INSETS_CONTROLLER)) {
assertWithMessage("Home key press was handled").that(mUiDevice.pressHome()).isTrue();
+ // This doesn't call verifyInputViewStatus, as the refactor delays the events such that
+ // getCurrentInputStarted() would be false, as we would already be in launcher.
// The IME visibility is only sent at the end of the animation. Therefore, we have to
// wait until the visibility was sent to the server and the IME window hidden.
eventually(() -> assertWithMessage("IME is not shown")
@@ -190,11 +192,7 @@ public class InputMethodServiceTest {
verifyInputViewStatus(
() -> assertWithMessage("Home key press was handled")
.that(mUiDevice.pressHome()).isTrue(),
- EVENT_HIDE,
- true /* expected */,
- false /* inputViewStarted */);
- assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse();
+ EVENT_HIDE, true /* eventExpected */, false /* shown */, "IME is not shown");
}
}
@@ -208,26 +206,12 @@ public class InputMethodServiceTest {
// Triggers to show IME via public API.
verifyInputViewStatusOnMainSync(
() -> assertThat(mActivity.showImeWithInputMethodManager(0 /* flags */)).isTrue(),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
// Triggers to hide IME via public API.
verifyInputViewStatusOnMainSync(
() -> assertThat(mActivity.hideImeWithInputMethodManager(0 /* flags */)).isTrue(),
- EVENT_HIDE,
- true /* expected */,
- false /* inputViewStarted */);
- if (mFlagsValueProvider.getBoolean(Flags.FLAG_REFACTOR_INSETS_CONTROLLER)) {
- // The IME visibility is only sent at the end of the animation. Therefore, we have to
- // wait until the visibility was sent to the server and the IME window hidden.
- eventually(() -> assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse());
- } else {
- assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse();
- }
+ EVENT_HIDE, true /* eventExpected */, false /* shown */, "IME is not shown");
}
/**
@@ -240,26 +224,12 @@ public class InputMethodServiceTest {
// Triggers to show IME via public API.
verifyInputViewStatusOnMainSync(
() -> mActivity.showImeWithWindowInsetsController(),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
// Triggers to hide IME via public API.
verifyInputViewStatusOnMainSync(
() -> mActivity.hideImeWithWindowInsetsController(),
- EVENT_HIDE,
- true /* expected */,
- false /* inputViewStarted */);
- if (mFlagsValueProvider.getBoolean(Flags.FLAG_REFACTOR_INSETS_CONTROLLER)) {
- // The IME visibility is only sent at the end of the animation. Therefore, we have to
- // wait until the visibility was sent to the server and the IME window hidden.
- eventually(() -> assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse());
- } else {
- assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse();
- }
+ EVENT_HIDE, true /* eventExpected */, false /* shown */, "IME is not shown");
}
/**
@@ -277,10 +247,7 @@ public class InputMethodServiceTest {
Log.i(TAG, "Call IMS#requestShowSelf(0)");
verifyInputViewStatusOnMainSync(
() -> mInputMethodService.requestShowSelf(0 /* flags */),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
if (!mFlagsValueProvider.getBoolean(Flags.FLAG_REFACTOR_INSETS_CONTROLLER)) {
// IME request to hide itself with flag HIDE_IMPLICIT_ONLY, expect not hide (shown).
@@ -288,51 +255,31 @@ public class InputMethodServiceTest {
verifyInputViewStatusOnMainSync(
() -> mInputMethodService.requestHideSelf(
InputMethodManager.HIDE_IMPLICIT_ONLY),
- EVENT_HIDE,
- false /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is still shown after HIDE_IMPLICIT_ONLY")
- .that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_HIDE, false /* eventExpected */, true /* shown */,
+ "IME is still shown after HIDE_IMPLICIT_ONLY");
}
// IME request to hide itself without any flags, expect hidden.
Log.i(TAG, "Call IMS#requestHideSelf(0)");
verifyInputViewStatusOnMainSync(
() -> mInputMethodService.requestHideSelf(0 /* flags */),
- EVENT_HIDE,
- true /* expected */,
- false /* inputViewStarted */);
- if (mFlagsValueProvider.getBoolean(Flags.FLAG_REFACTOR_INSETS_CONTROLLER)) {
- // The IME visibility is only sent at the end of the animation. Therefore, we have to
- // wait until the visibility was sent to the server and the IME window hidden.
- eventually(() -> assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse());
- } else {
- assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse();
- }
+ EVENT_HIDE, true /* eventExpected */, false /* shown */, "IME is not shown");
if (!mFlagsValueProvider.getBoolean(Flags.FLAG_REFACTOR_INSETS_CONTROLLER)) {
// IME request to show itself with flag SHOW_IMPLICIT, expect shown.
Log.i(TAG, "Call IMS#requestShowSelf(InputMethodManager.SHOW_IMPLICIT)");
verifyInputViewStatusOnMainSync(
() -> mInputMethodService.requestShowSelf(InputMethodManager.SHOW_IMPLICIT),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown with SHOW_IMPLICIT")
- .that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */,
+ "IME is shown with SHOW_IMPLICIT");
// IME request to hide itself with flag HIDE_IMPLICIT_ONLY, expect hidden.
Log.i(TAG, "Call IMS#requestHideSelf(InputMethodManager.HIDE_IMPLICIT_ONLY)");
verifyInputViewStatusOnMainSync(
() -> mInputMethodService.requestHideSelf(
InputMethodManager.HIDE_IMPLICIT_ONLY),
- EVENT_HIDE,
- true /* expected */,
- false /* inputViewStarted */);
- assertWithMessage("IME is not shown after HIDE_IMPLICIT_ONLY")
- .that(mInputMethodService.isInputViewShown()).isFalse();
+ EVENT_HIDE, true /* eventExpected */, false /* shown */,
+ "IME is not shown after HIDE_IMPLICIT_ONLY");
}
}
@@ -424,20 +371,14 @@ public class InputMethodServiceTest {
verifyInputViewStatusOnMainSync(() -> assertThat(
mActivity.showImeWithInputMethodManager(
InputMethodManager.SHOW_IMPLICIT)).isTrue(),
- EVENT_SHOW,
- false /* expected */,
- false /* inputViewStarted */);
- assertWithMessage("IME is not shown after SHOW_IMPLICIT")
- .that(mInputMethodService.isInputViewShown()).isFalse();
+ EVENT_SHOW, false /* eventExpected */, false /* shown */,
+ "IME is not shown after SHOW_IMPLICIT");
verifyInputViewStatusOnMainSync(
() -> assertThat(mActivity.showImeWithInputMethodManager(0 /* flags */))
.isTrue(),
- EVENT_SHOW,
- false /* expected */,
- false /* inputViewStarted */);
- assertWithMessage("IME is not shown after SHOW_EXPLICIT")
- .that(mInputMethodService.isInputViewShown()).isFalse();
+ EVENT_SHOW, false /* eventExpected */, false /* shown */,
+ "IME is not shown after SHOW_EXPLICIT");
} finally {
mInputMethodService.getResources()
.updateConfiguration(initialConfig, null /* metrics */, null /* compat */);
@@ -455,10 +396,7 @@ public class InputMethodServiceTest {
// IME should be shown.
verifyInputViewStatusOnMainSync(
() -> assertThat(mActivity.showImeWithInputMethodManager(0 /* flags */)).isTrue(),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
}
/**
@@ -472,10 +410,7 @@ public class InputMethodServiceTest {
// the IME should be shown.
verifyInputViewStatusOnMainSync(() -> assertThat(
mActivity.showImeWithInputMethodManager(InputMethodManager.SHOW_IMPLICIT)).isTrue(),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
}
/**
@@ -492,9 +427,9 @@ public class InputMethodServiceTest {
.that(mUiDevice.isNaturalOrientation()).isFalse());
// Wait for the TestActivity to be recreated.
eventually(() -> assertWithMessage("Activity was re-created after rotation")
- .that(TestActivity.getLastCreatedInstance()).isNotEqualTo(mActivity));
+ .that(TestActivity.getInstance()).isNotEqualTo(mActivity));
// Get the new TestActivity.
- mActivity = TestActivity.getLastCreatedInstance();
+ mActivity = TestActivity.getInstance();
assertWithMessage("Re-created activity is not null").that(mActivity).isNotNull();
// Wait for the new EditText to be served by InputMethodManager.
eventually(() -> assertWithMessage("Has an input connection to the re-created Activity")
@@ -502,10 +437,7 @@ public class InputMethodServiceTest {
verifyInputViewStatusOnMainSync(() -> assertThat(
mActivity.showImeWithInputMethodManager(0 /* flags */)).isTrue(),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
}
/**
@@ -527,9 +459,9 @@ public class InputMethodServiceTest {
.that(mUiDevice.isNaturalOrientation()).isFalse());
// Wait for the TestActivity to be recreated.
eventually(() -> assertWithMessage("Activity was re-created after rotation")
- .that(TestActivity.getLastCreatedInstance()).isNotEqualTo(mActivity));
+ .that(TestActivity.getInstance()).isNotEqualTo(mActivity));
// Get the new TestActivity.
- mActivity = TestActivity.getLastCreatedInstance();
+ mActivity = TestActivity.getInstance();
assertWithMessage("Re-created activity is not null").that(mActivity).isNotNull();
// Wait for the new EditText to be served by InputMethodManager.
eventually(() -> assertWithMessage("Has an input connection to the re-created Activity")
@@ -537,11 +469,7 @@ public class InputMethodServiceTest {
verifyInputViewStatusOnMainSync(() -> assertThat(
mActivity.showImeWithInputMethodManager(InputMethodManager.SHOW_IMPLICIT)).isTrue(),
- EVENT_SHOW,
- false /* expected */,
- false /* inputViewStarted */);
- assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse();
+ EVENT_SHOW, false /* eventExpected */, false /* shown */, "IME is not shown");
}
/**
@@ -561,10 +489,7 @@ public class InputMethodServiceTest {
verifyInputViewStatusOnMainSync(() -> assertThat(
mActivity.showImeWithInputMethodManager(0 /* flags */)).isTrue(),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
} finally {
mInputMethodService.getResources()
.updateConfiguration(initialConfig, null /* metrics */, null /* compat */);
@@ -594,11 +519,7 @@ public class InputMethodServiceTest {
verifyInputViewStatusOnMainSync(() ->assertThat(
mActivity.showImeWithInputMethodManager(InputMethodManager.SHOW_IMPLICIT))
.isTrue(),
- EVENT_SHOW,
- false /* expected */,
- false /* inputViewStarted */);
- assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse();
+ EVENT_SHOW, false /* eventExpected */, false /* shown */, "IME is not shown");
} finally {
mInputMethodService.getResources()
.updateConfiguration(initialConfig, null /* metrics */, null /* compat */);
@@ -623,10 +544,7 @@ public class InputMethodServiceTest {
verifyInputViewStatusOnMainSync(
() -> assertThat(mActivity.showImeWithInputMethodManager(0 /* flags */))
.isTrue(),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
// Simulate connecting a hardware keyboard.
config.keyboard = Configuration.KEYBOARD_QWERTY;
@@ -637,11 +555,8 @@ public class InputMethodServiceTest {
verifyInputViewStatusOnMainSync(
() -> mInputMethodService.onConfigurationChanged(config),
- EVENT_CONFIG,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is still shown after a configuration change")
- .that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_CONFIG, true /* eventExpected */, true /* shown */,
+ "IME is still shown after a configuration change");
} finally {
mInputMethodService.getResources()
.updateConfiguration(initialConfig, null /* metrics */, null /* compat */);
@@ -672,10 +587,7 @@ public class InputMethodServiceTest {
verifyInputViewStatusOnMainSync(() -> assertThat(
mActivity.showImeWithInputMethodManager(
InputMethodManager.SHOW_IMPLICIT)).isTrue(),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
// Simulate connecting a hardware keyboard.
config.keyboard = Configuration.KEYBOARD_QWERTY;
@@ -692,11 +604,8 @@ public class InputMethodServiceTest {
// still alive.
verifyInputViewStatusOnMainSync(
() -> mInputMethodService.onConfigurationChanged(config),
- EVENT_CONFIG,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is not shown after a configuration change")
- .that(mInputMethodService.isInputViewShown()).isFalse();
+ EVENT_CONFIG, true /* eventExpected */, true /* inputViewStarted */,
+ false /* shown */, "IME is not shown after a configuration change");
} finally {
mInputMethodService.getResources()
.updateConfiguration(initialConfig, null /* metrics */, null /* compat */);
@@ -722,31 +631,21 @@ public class InputMethodServiceTest {
// Explicit show request.
verifyInputViewStatusOnMainSync(() -> assertThat(
mActivity.showImeWithInputMethodManager(0 /* flags */)).isTrue(),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
// Implicit show request.
verifyInputViewStatusOnMainSync(() -> assertThat(
mActivity.showImeWithInputMethodManager(
InputMethodManager.SHOW_IMPLICIT)).isTrue(),
- EVENT_SHOW,
- false /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is still shown")
- .that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, false /* eventExpected */, true /* shown */, "IME is still shown");
// Simulate a fake configuration change to avoid the recreation of TestActivity.
// This should now consider the implicit show request, but keep the state from the
// explicit show request, and thus not hide the IME.
verifyInputViewStatusOnMainSync(
() -> mInputMethodService.onConfigurationChanged(config),
- EVENT_CONFIG,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is still shown after a configuration change")
- .that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_CONFIG, true /* eventExpected */, true /* shown */,
+ "IME is still shown after a configuration change");
} finally {
mInputMethodService.getResources()
.updateConfiguration(initialConfig, null /* metrics */, null /* compat */);
@@ -769,27 +668,17 @@ public class InputMethodServiceTest {
verifyInputViewStatusOnMainSync(() -> assertThat(
mActivity.showImeWithInputMethodManager(InputMethodManager.SHOW_FORCED)).isTrue(),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
verifyInputViewStatusOnMainSync(() -> assertThat(
mActivity.showImeWithInputMethodManager(0 /* flags */)).isTrue(),
- EVENT_SHOW,
- false /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is still shown")
- .that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, false /* eventExpected */, true /* shown */, "IME is still shown");
verifyInputViewStatusOnMainSync(() -> assertThat(
mActivity.hideImeWithInputMethodManager(InputMethodManager.HIDE_NOT_ALWAYS))
.isTrue(),
- EVENT_HIDE,
- false /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is still shown after HIDE_NOT_ALWAYS")
- .that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_HIDE, false /* eventExpected */, true /* shown */,
+ "IME is still shown after HIDE_NOT_ALWAYS");
}
/**
@@ -800,18 +689,15 @@ public class InputMethodServiceTest {
setShowImeWithHardKeyboard(true /* enabled */);
Log.i(TAG, "Set orientation natural");
- verifyFullscreenMode(() -> setOrientation(0),
- false /* expected */,
+ verifyFullscreenMode(() -> setOrientation(0), false /* eventExpected */,
true /* orientationPortrait */);
Log.i(TAG, "Set orientation left");
- verifyFullscreenMode(() -> setOrientation(1),
- true /* expected */,
+ verifyFullscreenMode(() -> setOrientation(1), true /* eventExpected */,
false /* orientationPortrait */);
Log.i(TAG, "Set orientation right");
- verifyFullscreenMode(() -> setOrientation(2),
- false /* expected */,
+ verifyFullscreenMode(() -> setOrientation(2), false /* eventExpected */,
false /* orientationPortrait */);
}
@@ -845,10 +731,7 @@ public class InputMethodServiceTest {
setDrawsImeNavBarAndSwitcherButton(true /* enabled */);
mActivity.showImeWithWindowInsetsController();
},
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
assertWithMessage("IME navigation bar is initially shown")
.that(mInputMethodService.isImeNavigationBarShownForTesting()).isTrue();
@@ -883,10 +766,7 @@ public class InputMethodServiceTest {
setDrawsImeNavBarAndSwitcherButton(false /* enabled */);
mActivity.showImeWithWindowInsetsController();
},
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
assertWithMessage("IME navigation bar is initially not shown")
.that(mInputMethodService.isImeNavigationBarShownForTesting()).isFalse();
@@ -917,24 +797,15 @@ public class InputMethodServiceTest {
try (var ignored = mGestureNavSwitchHelper.withGestureNavigationMode()) {
verifyInputViewStatusOnMainSync(
() -> mActivity.showImeWithWindowInsetsController(),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
final var backButton = getUiObject(By.res(INPUT_METHOD_NAV_BACK_ID));
- backButton.click();
- mInstrumentation.waitForIdleSync();
-
- if (mFlagsValueProvider.getBoolean(Flags.FLAG_REFACTOR_INSETS_CONTROLLER)) {
- // The IME visibility is only sent at the end of the animation. Therefore, we have
- // to wait until the visibility was sent to the server and the IME window hidden.
- eventually(() -> assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse());
- } else {
- assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse();
- }
+ verifyInputViewStatus(
+ () -> {
+ backButton.click();
+ mInstrumentation.waitForIdleSync();
+ },
+ EVENT_HIDE, true /* eventExpected */, false /* shown */, "IME is not shown");
}
}
@@ -952,30 +823,20 @@ public class InputMethodServiceTest {
try (var ignored = mGestureNavSwitchHelper.withGestureNavigationMode()) {
verifyInputViewStatusOnMainSync(
() -> mActivity.showImeWithWindowInsetsController(),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
final var backButton = getUiObject(By.res(INPUT_METHOD_NAV_BACK_ID));
- backButton.longClick();
- mInstrumentation.waitForIdleSync();
-
- if (mFlagsValueProvider.getBoolean(Flags.FLAG_REFACTOR_INSETS_CONTROLLER)) {
- // The IME visibility is only sent at the end of the animation. Therefore, we have
- // to wait until the visibility was sent to the server and the IME window hidden.
- eventually(() -> assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse());
- } else {
- assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse();
- }
+ verifyInputViewStatus(
+ () -> {
+ backButton.longClick();
+ mInstrumentation.waitForIdleSync();
+ },
+ EVENT_HIDE, true /* eventExpected */, false /* shown */, "IME is not shown");
}
}
/**
- * Verifies that clicking on the IME switch button either shows the Input Method Switcher Menu,
- * or switches the input method.
+ * Verifies that clicking on the IME switch button switches the input method subtype.
*/
@Test
public void testImeSwitchButtonClick() throws Exception {
@@ -985,34 +846,32 @@ public class InputMethodServiceTest {
setShowImeWithHardKeyboard(true /* enabled */);
+ final var info = mImm.getCurrentInputMethodInfo();
+ assertWithMessage("InputMethodInfo is not null").that(info).isNotNull();
+ mImm.setExplicitlyEnabledInputMethodSubtypes(info.getId(), SUBTYPE_IDS);
+
+ final var initialSubtype = mImm.getCurrentInputMethodSubtype();
+
try (var ignored = mGestureNavSwitchHelper.withGestureNavigationMode()) {
verifyInputViewStatusOnMainSync(
() -> {
setDrawsImeNavBarAndSwitcherButton(true /* enabled */);
mActivity.showImeWithWindowInsetsController();
},
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
-
- final var initialInfo = mImm.getCurrentInputMethodInfo();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
final var imeSwitcherButton = getUiObject(By.res(INPUT_METHOD_NAV_IME_SWITCHER_ID));
imeSwitcherButton.click();
mInstrumentation.waitForIdleSync();
- final var newInfo = mImm.getCurrentInputMethodInfo();
+ final var newSubtype = mImm.getCurrentInputMethodSubtype();
- assertWithMessage("Input Method Switcher Menu is shown or input method was switched")
- .that(isInputMethodPickerShown(mImm) || !Objects.equals(initialInfo, newInfo))
+ assertWithMessage("Input method subtype was switched")
+ .that(!Objects.equals(initialSubtype, newSubtype))
.isTrue();
assertWithMessage("IME is still shown after IME Switcher button was clicked")
.that(mInputMethodService.isInputViewShown()).isTrue();
-
- // Hide the IME Switcher Menu before finishing.
- mUiDevice.pressBack();
}
}
@@ -1027,16 +886,17 @@ public class InputMethodServiceTest {
setShowImeWithHardKeyboard(true /* enabled */);
+ final var info = mImm.getCurrentInputMethodInfo();
+ assertWithMessage("InputMethodInfo is not null").that(info).isNotNull();
+ mImm.setExplicitlyEnabledInputMethodSubtypes(info.getId(), SUBTYPE_IDS);
+
try (var ignored = mGestureNavSwitchHelper.withGestureNavigationMode()) {
verifyInputViewStatusOnMainSync(
() -> {
setDrawsImeNavBarAndSwitcherButton(true /* enabled */);
mActivity.showImeWithWindowInsetsController();
},
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
final var imeSwitcherButton = getUiObject(By.res(INPUT_METHOD_NAV_IME_SWITCHER_ID));
imeSwitcherButton.longClick();
@@ -1052,58 +912,78 @@ public class InputMethodServiceTest {
}
}
- private void verifyInputViewStatus(@NonNull Runnable runnable, @Event int event,
- boolean expected, boolean inputViewStarted) {
- verifyInputViewStatusInternal(runnable, event, expected, inputViewStarted,
- false /* runOnMainSync */);
+ private void verifyInputViewStatus(@NonNull Runnable runnable, @Event int eventType,
+ boolean eventExpected, boolean shown, @NonNull String message) {
+ verifyInputViewStatusInternal(runnable, eventType, eventExpected,
+ shown /* inputViewStarted */, shown, message, false /* runOnMainSync */);
+ }
+
+ private void verifyInputViewStatusOnMainSync(@NonNull Runnable runnable, @Event int eventType,
+ boolean eventExpected, boolean shown, @NonNull String message) {
+ verifyInputViewStatusInternal(runnable, eventType, eventExpected,
+ shown /* inputViewStarted */, shown, message, true /* runOnMainSync */);
}
- private void verifyInputViewStatusOnMainSync(@NonNull Runnable runnable, @Event int event,
- boolean expected, boolean inputViewStarted) {
- verifyInputViewStatusInternal(runnable, event, expected, inputViewStarted,
- true /* runOnMainSync */);
+ private void verifyInputViewStatusOnMainSync(@NonNull Runnable runnable, @Event int eventType,
+ boolean eventExpected, boolean inputViewStarted, boolean shown,
+ @NonNull String message) {
+ verifyInputViewStatusInternal(runnable, eventType, eventExpected, inputViewStarted, shown,
+ message, true /* runOnMainSync */);
}
/**
* Verifies the status of the Input View after executing the given runnable, and waiting that
- * the event was either triggered or not, based on the given expectation.
+ * the event was either called or not.
*
- * @param runnable the runnable to trigger the event
- * @param event the event to await.
- * @param expected whether the event is expected to be triggered.
- * @param inputViewStarted the expected state of the Input View after executing the runnable.
+ * @param runnable the runnable to call the event.
+ * @param eventType the event type to wait for.
+ * @param eventExpected whether the event is expected to be called.
+ * @param inputViewStarted whether the input view is expected to be started.
+ * @param shown whether the input view is expected to be shown.
+ * @param message the message for the input view shown assertion.
* @param runOnMainSync whether to execute the runnable on the main thread.
*/
- private void verifyInputViewStatusInternal(@NonNull Runnable runnable, @Event int event,
- boolean expected, boolean inputViewStarted, boolean runOnMainSync) {
- final boolean completed;
+ private void verifyInputViewStatusInternal(@NonNull Runnable runnable, @Event int eventType,
+ boolean eventExpected, boolean inputViewStarted, boolean shown, @NonNull String message,
+ boolean runOnMainSync) {
+ final boolean eventCalled;
try {
final var latch = new CountDownLatch(1);
- mInputMethodService.setCountDownLatchForTesting(latch, event);
+ mInputMethodService.setCountDownLatchForTesting(latch, eventType);
if (runOnMainSync) {
mInstrumentation.runOnMainSync(runnable);
} else {
runnable.run();
}
mInstrumentation.waitForIdleSync();
- completed = latch.await(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
+ eventCalled = latch.await(TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
} catch (InterruptedException e) {
fail("Interrupted while waiting for latch: " + e.getMessage());
return;
} finally {
- mInputMethodService.setCountDownLatchForTesting(null /* latch */, event);
+ mInputMethodService.setCountDownLatchForTesting(null /* latch */, eventType);
}
- if (expected && !completed) {
- fail("Timed out waiting for " + eventToString(event));
- } else if (!expected && completed) {
- fail("Unexpected call " + eventToString(event));
+ if (eventExpected && !eventCalled) {
+ fail("Timed out waiting for " + eventToString(eventType));
+ } else if (!eventExpected && eventCalled) {
+ fail("Unexpected call " + eventToString(eventType));
}
- // Input is not finished.
+ // Input connection is not finished.
assertWithMessage("Input connection is still started")
.that(mInputMethodService.getCurrentInputStarted()).isTrue();
- assertWithMessage("IME visibility matches expected")
+ assertWithMessage("Input view started matches expected")
.that(mInputMethodService.getCurrentInputViewStarted()).isEqualTo(inputViewStarted);
+
+ if (mFlagsValueProvider.getBoolean(Flags.FLAG_REFACTOR_INSETS_CONTROLLER)) {
+ // The IME visibility is only sent at the end of the hide animation. Therefore, we have
+ // to wait until the visibility was sent to the server and the IME window hidden.
+ eventually(() -> assertWithMessage(message).that(mInputMethodService.isInputViewShown())
+ .isEqualTo(shown));
+ } else {
+ assertWithMessage(message).that(mInputMethodService.isInputViewShown())
+ .isEqualTo(shown);
+ }
}
private void setOrientation(int orientation) {
@@ -1127,31 +1007,28 @@ public class InputMethodServiceTest {
/**
* Verifies the IME fullscreen mode state after executing the given runnable.
*
- * @param runnable the runnable to execute for setting the orientation.
- * @param expected whether the runnable is expected to trigger the signal.
+ * @param runnable the runnable to set the orientation.
+ * @param eventExpected whether the event is expected to be called.
* @param orientationPortrait whether the orientation is expected to be portrait.
*/
- private void verifyFullscreenMode(@NonNull Runnable runnable, boolean expected,
+ private void verifyFullscreenMode(@NonNull Runnable runnable, boolean eventExpected,
boolean orientationPortrait) {
- verifyInputViewStatus(runnable, EVENT_CONFIG, expected, false /* inputViewStarted */);
- if (expected) {
+ verifyInputViewStatus(runnable, EVENT_CONFIG, eventExpected, false /* shown */,
+ "IME is not shown");
+ if (eventExpected) {
// Wait for the TestActivity to be recreated.
eventually(() -> assertWithMessage("Activity was re-created after rotation")
- .that(TestActivity.getLastCreatedInstance()).isNotEqualTo(mActivity));
+ .that(TestActivity.getInstance()).isNotEqualTo(mActivity));
// Get the new TestActivity.
- mActivity = TestActivity.getLastCreatedInstance();
+ mActivity = TestActivity.getInstance();
assertWithMessage("Re-created activity is not null").that(mActivity).isNotNull();
// Wait for the new EditText to be served by InputMethodManager.
eventually(() -> assertWithMessage("Has an input connection to the re-created Activity")
.that(mImm.hasActiveInputConnection(mActivity.getEditText())).isTrue());
}
- verifyInputViewStatusOnMainSync(
- () -> mActivity.showImeWithWindowInsetsController(),
- EVENT_SHOW,
- true /* expected */,
- true /* inputViewStarted */);
- assertWithMessage("IME is shown").that(mInputMethodService.isInputViewShown()).isTrue();
+ verifyInputViewStatusOnMainSync(() -> mActivity.showImeWithWindowInsetsController(),
+ EVENT_SHOW, true /* eventExpected */, true /* shown */, "IME is shown");
assertWithMessage("IME orientation matches expected")
.that(mInputMethodService.getResources().getConfiguration().orientation)
@@ -1172,21 +1049,8 @@ public class InputMethodServiceTest {
.that(mInputMethodService.isFullscreenMode()).isEqualTo(!orientationPortrait);
// Hide IME before finishing the run.
- verifyInputViewStatusOnMainSync(
- () -> mActivity.hideImeWithWindowInsetsController(),
- EVENT_HIDE,
- true /* expected */,
- false /* inputViewStarted */);
-
- if (mFlagsValueProvider.getBoolean(Flags.FLAG_REFACTOR_INSETS_CONTROLLER)) {
- // The IME visibility is only sent at the end of the animation. Therefore, we have to
- // wait until the visibility was sent to the server and the IME window hidden.
- eventually(() -> assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse());
- } else {
- assertWithMessage("IME is not shown")
- .that(mInputMethodService.isInputViewShown()).isFalse();
- }
+ verifyInputViewStatusOnMainSync(() -> mActivity.hideImeWithWindowInsetsController(),
+ EVENT_HIDE, true /* eventExpected */, false /* shown */, "IME is not shown");
}
private void prepareIme() {
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
index 3af5db9841ea..6af4064b1288 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
@@ -66,6 +66,7 @@ import com.android.internal.inputmethod.IInputMethodSession;
import com.android.internal.inputmethod.IRemoteAccessibilityInputConnection;
import com.android.internal.inputmethod.IRemoteInputConnection;
import com.android.internal.inputmethod.InputBindResult;
+import com.android.internal.protolog.IProtoLogConfigurationService;
import com.android.internal.view.IInputMethodManager;
import com.android.server.LocalServices;
import com.android.server.ServiceThread;
@@ -124,6 +125,7 @@ public class InputMethodManagerServiceTestBase {
@Mock protected IBinder mMockInputMethodBinder;
@Mock protected IInputManager mMockIInputManager;
@Mock protected ImeTargetVisibilityPolicy mMockImeTargetVisibilityPolicy;
+ @Mock protected IProtoLogConfigurationService.Stub mMockProtoLogConfigurationService;
protected Context mContext;
protected MockitoSession mMockingSession;
@@ -186,6 +188,9 @@ public class InputMethodManagerServiceTestBase {
.when(() -> ServiceManager.getServiceOrThrow(Context.INPUT_METHOD_SERVICE));
doReturn(mMockIPlatformCompat)
.when(() -> ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE));
+ doReturn(mMockProtoLogConfigurationService)
+ .when(() -> ServiceManager.getServiceOrThrow(
+ Context.PROTOLOG_CONFIGURATION_SERVICE));
// Stubbing out context related methods to avoid the system holding strong references to
// InputMethodManagerService.
diff --git a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/res/layout/input_view.xml b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/res/layout/input_view.xml
deleted file mode 100644
index f2292701e795..000000000000
--- a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/res/layout/input_view.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2022 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/input"
- android:layout_width="match_parent"
- android:layout_height="match_parent"/> \ No newline at end of file
diff --git a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/res/xml/method.xml b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/res/xml/method.xml
index 872b0688814a..3dd4a97f464f 100644
--- a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/res/xml/method.xml
+++ b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/res/xml/method.xml
@@ -17,7 +17,14 @@
<input-method xmlns:android="http://schemas.android.com/apk/res/android">
<subtype
- android:label="FakeIme"
+ android:label="SimpleIme"
android:imeSubtypeLocale="en_US"
- android:imeSubtypeMode="keyboard"/>
+ android:imeSubtypeMode="keyboard"
+ android:subtypeId="1" />
+
+ <subtype
+ android:label="SimpleIme French"
+ android:imeSubtypeLocale="fr_FR"
+ android:imeSubtypeMode="keyboard"
+ android:subtypeId="2" />
</input-method> \ No newline at end of file
diff --git a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/KeyCodeConstants.java b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/KeyCodeConstants.java
index 990fa24aad22..428ce1f6e1f6 100644
--- a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/KeyCodeConstants.java
+++ b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/KeyCodeConstants.java
@@ -18,51 +18,58 @@ package com.android.apps.inputmethod.simpleime;
import android.view.KeyEvent;
-import java.util.HashMap;
+import androidx.annotation.NonNull;
/** Holder of key codes and their name. */
-public final class KeyCodeConstants {
- private KeyCodeConstants() {}
+final class KeyCodeConstants {
- static final HashMap<String, Integer> KEY_NAME_TO_CODE_MAP = new HashMap<>();
+ private KeyCodeConstants() {
+ }
- static {
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_A", KeyEvent.KEYCODE_A);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_B", KeyEvent.KEYCODE_B);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_C", KeyEvent.KEYCODE_C);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_D", KeyEvent.KEYCODE_D);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_E", KeyEvent.KEYCODE_E);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_F", KeyEvent.KEYCODE_F);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_G", KeyEvent.KEYCODE_G);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_H", KeyEvent.KEYCODE_H);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_I", KeyEvent.KEYCODE_I);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_J", KeyEvent.KEYCODE_J);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_K", KeyEvent.KEYCODE_K);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_L", KeyEvent.KEYCODE_L);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_M", KeyEvent.KEYCODE_M);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_N", KeyEvent.KEYCODE_N);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_O", KeyEvent.KEYCODE_O);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_P", KeyEvent.KEYCODE_P);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_Q", KeyEvent.KEYCODE_Q);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_R", KeyEvent.KEYCODE_R);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_S", KeyEvent.KEYCODE_S);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_T", KeyEvent.KEYCODE_T);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_U", KeyEvent.KEYCODE_U);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_V", KeyEvent.KEYCODE_V);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_W", KeyEvent.KEYCODE_W);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_X", KeyEvent.KEYCODE_X);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_Y", KeyEvent.KEYCODE_Y);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_Z", KeyEvent.KEYCODE_Z);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_SHIFT", KeyEvent.KEYCODE_SHIFT_LEFT);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_DEL", KeyEvent.KEYCODE_DEL);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_SPACE", KeyEvent.KEYCODE_SPACE);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_ENTER", KeyEvent.KEYCODE_ENTER);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_COMMA", KeyEvent.KEYCODE_COMMA);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_PERIOD", KeyEvent.KEYCODE_PERIOD);
- KEY_NAME_TO_CODE_MAP.put("KEYCODE_TAB", KeyEvent.KEYCODE_TAB);
+ /**
+ * Returns the keyCode value corresponding to the given keyCode name.
+ *
+ * @param keyCodeName the keyCode name.
+ */
+ static int getKeyCode(@NonNull String keyCodeName) {
+ return switch (keyCodeName) {
+ case "KEYCODE_A" -> KeyEvent.KEYCODE_A;
+ case "KEYCODE_B" -> KeyEvent.KEYCODE_B;
+ case "KEYCODE_C" -> KeyEvent.KEYCODE_C;
+ case "KEYCODE_D" -> KeyEvent.KEYCODE_D;
+ case "KEYCODE_E" -> KeyEvent.KEYCODE_E;
+ case "KEYCODE_F" -> KeyEvent.KEYCODE_F;
+ case "KEYCODE_G" -> KeyEvent.KEYCODE_G;
+ case "KEYCODE_H" -> KeyEvent.KEYCODE_H;
+ case "KEYCODE_I" -> KeyEvent.KEYCODE_I;
+ case "KEYCODE_J" -> KeyEvent.KEYCODE_J;
+ case "KEYCODE_K" -> KeyEvent.KEYCODE_K;
+ case "KEYCODE_L" -> KeyEvent.KEYCODE_L;
+ case "KEYCODE_M" -> KeyEvent.KEYCODE_M;
+ case "KEYCODE_N" -> KeyEvent.KEYCODE_N;
+ case "KEYCODE_O" -> KeyEvent.KEYCODE_O;
+ case "KEYCODE_P" -> KeyEvent.KEYCODE_P;
+ case "KEYCODE_Q" -> KeyEvent.KEYCODE_Q;
+ case "KEYCODE_R" -> KeyEvent.KEYCODE_R;
+ case "KEYCODE_S" -> KeyEvent.KEYCODE_S;
+ case "KEYCODE_T" -> KeyEvent.KEYCODE_T;
+ case "KEYCODE_U" -> KeyEvent.KEYCODE_U;
+ case "KEYCODE_V" -> KeyEvent.KEYCODE_V;
+ case "KEYCODE_W" -> KeyEvent.KEYCODE_W;
+ case "KEYCODE_X" -> KeyEvent.KEYCODE_X;
+ case "KEYCODE_Y" -> KeyEvent.KEYCODE_Y;
+ case "KEYCODE_Z" -> KeyEvent.KEYCODE_Z;
+ case "KEYCODE_SHIFT" -> KeyEvent.KEYCODE_SHIFT_LEFT;
+ case "KEYCODE_DEL" -> KeyEvent.KEYCODE_DEL;
+ case "KEYCODE_SPACE" -> KeyEvent.KEYCODE_SPACE;
+ case "KEYCODE_ENTER" -> KeyEvent.KEYCODE_ENTER;
+ case "KEYCODE_COMMA" -> KeyEvent.KEYCODE_COMMA;
+ case "KEYCODE_PERIOD" -> KeyEvent.KEYCODE_PERIOD;
+ default -> KeyEvent.KEYCODE_UNKNOWN;
+ };
}
- public static boolean isAlphaKeyCode(int keyCode) {
+ static boolean isAlphaKeyCode(int keyCode) {
return keyCode >= KeyEvent.KEYCODE_A && keyCode <= KeyEvent.KEYCODE_Z;
}
}
diff --git a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/SimpleInputMethodService.java b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/SimpleInputMethodService.java
index 61d1bb931a96..de9b5289be9d 100644
--- a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/SimpleInputMethodService.java
+++ b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/SimpleInputMethodService.java
@@ -20,45 +20,41 @@ import android.inputmethodservice.InputMethodService;
import android.os.SystemClock;
import android.util.Log;
import android.view.KeyEvent;
-import android.view.LayoutInflater;
import android.view.View;
-import android.view.inputmethod.EditorInfo;
-import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import com.android.apps.inputmethod.simpleime.ims.InputMethodServiceWrapper;
-/** The {@link InputMethodService} implementation for SimpleTestIme app. */
+/** A simple implementation of an {@link InputMethodService}. */
public final class SimpleInputMethodService extends InputMethodServiceWrapper {
private static final String TAG = "SimpleIMS";
- private FrameLayout mInputView;
-
@Override
public View onCreateInputView() {
Log.i(TAG, "onCreateInputView()");
- mInputView = (FrameLayout) LayoutInflater.from(this).inflate(R.layout.input_view, null);
- return mInputView;
- }
-
- @Override
- public void onStartInputView(EditorInfo info, boolean restarting) {
- super.onStartInputView(info, restarting);
- mInputView.removeAllViews();
- final var keyboard = new SimpleKeyboard(this, R.layout.qwerty_10_9_9);
- mInputView.addView(keyboard.inflateKeyboardView(LayoutInflater.from(this), mInputView));
+ final var simpleKeyboard = new SimpleKeyboardView(this);
+ simpleKeyboard.setKeyPressListener(this::onKeyPress);
+ return simpleKeyboard;
}
- void handleKeyPress(@NonNull String keyCodeName, int keyboardState) {
- final Integer keyCode = KeyCodeConstants.KEY_NAME_TO_CODE_MAP.get(keyCodeName);
- Log.v(TAG, "keyCode: " + keyCode);
- if (keyCode != null) {
- final var downTime = SystemClock.uptimeMillis();
- getCurrentInputConnection().sendKeyEvent(new KeyEvent(downTime, downTime,
- KeyEvent.ACTION_DOWN, keyCode, 0 /* repeat */,
- KeyCodeConstants.isAlphaKeyCode(keyCode) ? keyboardState : 0) /* metaState */);
+ /**
+ * Called when a key is pressed.
+ *
+ * @param keyCodeName the keycode of the key, as a string.
+ * @param metaState the flags indicating which meta keys are currently pressed.
+ */
+ private void onKeyPress(@NonNull String keyCodeName, int metaState) {
+ final int keyCode = KeyCodeConstants.getKeyCode(keyCodeName);
+ Log.v(TAG, "onKeyPress: " + keyCode);
+ if (keyCode != KeyEvent.KEYCODE_UNKNOWN) {
+ final var ic = getCurrentInputConnection();
+ if (ic != null) {
+ final var downTime = SystemClock.uptimeMillis();
+ ic.sendKeyEvent(new KeyEvent(downTime, downTime, KeyEvent.ACTION_DOWN, keyCode,
+ 0 /* repeat */, KeyCodeConstants.isAlphaKeyCode(keyCode) ? metaState : 0));
+ }
}
}
}
diff --git a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/SimpleKeyboard.java b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/SimpleKeyboard.java
deleted file mode 100644
index 62d90c8d56b5..000000000000
--- a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/SimpleKeyboard.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.apps.inputmethod.simpleime;
-
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.SparseArray;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-/** Controls the visible virtual keyboard view. */
-final class SimpleKeyboard {
-
- private static final String TAG = "SimpleKeyboard";
-
- private static final int[] SOFT_KEY_IDS = new int[]{
- R.id.key_pos_0_0,
- R.id.key_pos_0_1,
- R.id.key_pos_0_2,
- R.id.key_pos_0_3,
- R.id.key_pos_0_4,
- R.id.key_pos_0_5,
- R.id.key_pos_0_6,
- R.id.key_pos_0_7,
- R.id.key_pos_0_8,
- R.id.key_pos_0_9,
- R.id.key_pos_1_0,
- R.id.key_pos_1_1,
- R.id.key_pos_1_2,
- R.id.key_pos_1_3,
- R.id.key_pos_1_4,
- R.id.key_pos_1_5,
- R.id.key_pos_1_6,
- R.id.key_pos_1_7,
- R.id.key_pos_1_8,
- R.id.key_pos_2_0,
- R.id.key_pos_2_1,
- R.id.key_pos_2_2,
- R.id.key_pos_2_3,
- R.id.key_pos_2_4,
- R.id.key_pos_2_5,
- R.id.key_pos_2_6,
- R.id.key_pos_shift,
- R.id.key_pos_del,
- R.id.key_pos_symbol,
- R.id.key_pos_comma,
- R.id.key_pos_space,
- R.id.key_pos_period,
- R.id.key_pos_enter,
- };
-
- @NonNull
- private final SimpleInputMethodService mSimpleInputMethodService;
- private final int mViewResId;
- private final SparseArray<TextView> mSoftKeyViews = new SparseArray<>();
- private View mKeyboardView;
- private int mKeyboardState;
-
- SimpleKeyboard(@NonNull SimpleInputMethodService simpleInputMethodService, int viewResId) {
- mSimpleInputMethodService = simpleInputMethodService;
- mViewResId = viewResId;
- mKeyboardState = 0;
- }
-
- @NonNull
- View inflateKeyboardView(@NonNull LayoutInflater inflater, @NonNull ViewGroup inputView) {
- mKeyboardView = inflater.inflate(mViewResId, inputView, false);
- mapSoftKeys();
- return mKeyboardView;
- }
-
- private void mapSoftKeys() {
- for (int id : SOFT_KEY_IDS) {
- final TextView softKeyView = mKeyboardView.requireViewById(id);
- mSoftKeyViews.put(id, softKeyView);
- final var keyCodeName = softKeyView.getTag() != null
- ? softKeyView.getTag().toString() : null;
- softKeyView.setOnClickListener(v -> handleKeyPress(keyCodeName));
- }
- }
-
- private void handleKeyPress(@Nullable String keyCodeName) {
- Log.i(TAG, "handle(): " + keyCodeName);
- if (TextUtils.isEmpty(keyCodeName)) {
- return;
- }
- if ("KEYCODE_SHIFT".equals(keyCodeName)) {
- handleShift();
- return;
- }
-
- mSimpleInputMethodService.handleKeyPress(keyCodeName, mKeyboardState);
- }
-
- private void handleShift() {
- mKeyboardState = toggleShiftState(mKeyboardState);
- Log.v(TAG, "currentKeyboardState: " + mKeyboardState);
- final boolean isShiftOn = isShiftOn(mKeyboardState);
- for (int i = 0; i < mSoftKeyViews.size(); i++) {
- TextView softKeyView = mSoftKeyViews.valueAt(i);
- softKeyView.setAllCaps(isShiftOn);
- }
- }
-
- private static boolean isShiftOn(int state) {
- return (state & KeyEvent.META_SHIFT_ON) == KeyEvent.META_SHIFT_ON;
- }
-
- private static int toggleShiftState(int state) {
- return state ^ KeyEvent.META_SHIFT_ON;
- }
-}
diff --git a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/SimpleKeyboardView.java b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/SimpleKeyboardView.java
new file mode 100644
index 000000000000..1840cdea4c20
--- /dev/null
+++ b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/SimpleKeyboardView.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.apps.inputmethod.simpleime;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.SparseArray;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.WindowInsets;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+
+import androidx.annotation.AttrRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+/** A simple implementation of a software keyboard view. */
+final class SimpleKeyboardView extends FrameLayout {
+
+ private static final String TAG = "SimpleKeyboard";
+
+ private static final int[] SOFT_KEY_IDS = new int[]{
+ R.id.key_pos_0_0,
+ R.id.key_pos_0_1,
+ R.id.key_pos_0_2,
+ R.id.key_pos_0_3,
+ R.id.key_pos_0_4,
+ R.id.key_pos_0_5,
+ R.id.key_pos_0_6,
+ R.id.key_pos_0_7,
+ R.id.key_pos_0_8,
+ R.id.key_pos_0_9,
+ R.id.key_pos_1_0,
+ R.id.key_pos_1_1,
+ R.id.key_pos_1_2,
+ R.id.key_pos_1_3,
+ R.id.key_pos_1_4,
+ R.id.key_pos_1_5,
+ R.id.key_pos_1_6,
+ R.id.key_pos_1_7,
+ R.id.key_pos_1_8,
+ R.id.key_pos_2_0,
+ R.id.key_pos_2_1,
+ R.id.key_pos_2_2,
+ R.id.key_pos_2_3,
+ R.id.key_pos_2_4,
+ R.id.key_pos_2_5,
+ R.id.key_pos_2_6,
+ R.id.key_pos_shift,
+ R.id.key_pos_del,
+ R.id.key_pos_symbol,
+ R.id.key_pos_comma,
+ R.id.key_pos_space,
+ R.id.key_pos_period,
+ R.id.key_pos_enter,
+ };
+
+ private final SparseArray<TextView> mSoftKeyViews = new SparseArray<>();
+
+ @FunctionalInterface
+ interface KeyPressListener {
+
+ /**
+ * Called when a key is pressed.
+ *
+ * @param keyCodeName the keycode of the key, as a string.
+ * @param metaState the flags indicating which meta keys are currently pressed.
+ */
+ void onKeyPress(@NonNull String keyCodeName, int metaState);
+ }
+
+ /** A listener to react to key presses. */
+ @Nullable
+ private KeyPressListener mKeyPressListener;
+
+ /** The flags indicating which meta keys are currently pressed. */
+ private int mMetaState;
+
+ SimpleKeyboardView(@NonNull Context context) {
+ this(context, null);
+ }
+
+ SimpleKeyboardView(@NonNull Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs, 0 /* defStyleAttr */);
+ }
+
+ SimpleKeyboardView(@NonNull Context context, @Nullable AttributeSet attrs,
+ @AttrRes int defStyleAttr) {
+ super(context, attrs, defStyleAttr, 0 /* defStyleRes */);
+ LayoutInflater.from(context).inflate(R.layout.qwerty_10_9_9, this, true);
+ mapSoftKeys();
+ }
+
+ @Override
+ public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+ // Handle edge to edge for navigationBars insets (system nav bar)
+ // and captionBars insets (IME navigation bar).
+ final int insetBottom = insets.getInsets(WindowInsets.Type.systemBars()).bottom;
+ setPadding(getPaddingLeft(), getPaddingTop(), getPaddingRight(), insetBottom);
+ return insets.inset(0, 0, 0, insetBottom);
+ }
+
+ /**
+ * Sets the key press listener.
+ *
+ * @param listener the listener to set.
+ */
+ void setKeyPressListener(@NonNull KeyPressListener listener) {
+ mKeyPressListener = listener;
+ }
+
+ /** Maps the soft key ids to their corresponding views, and sets their on click listener. */
+ private void mapSoftKeys() {
+ for (final int id : SOFT_KEY_IDS) {
+ final TextView softKeyView = requireViewById(id);
+ mSoftKeyViews.put(id, softKeyView);
+ final var keyCodeName = softKeyView.getTag() != null
+ ? softKeyView.getTag().toString() : null;
+ softKeyView.setOnClickListener(v -> onKeyPress(keyCodeName));
+ }
+ }
+
+ /**
+ * Called when a key is pressed.
+ *
+ * @param keyCodeName the keycode of the key, as a string.
+ */
+ private void onKeyPress(@Nullable String keyCodeName) {
+ Log.i(TAG, "onKeyPress: " + keyCodeName);
+ if (TextUtils.isEmpty(keyCodeName)) {
+ return;
+ }
+ if ("KEYCODE_SHIFT".equals(keyCodeName)) {
+ onShiftPress();
+ return;
+ }
+
+ if (mKeyPressListener != null) {
+ mKeyPressListener.onKeyPress(keyCodeName, mMetaState);
+ }
+ }
+
+ /**
+ * Called when the shift key is pressed. This will toggle the capitalization of all the keys.
+ */
+ private void onShiftPress() {
+ mMetaState = toggleShiftState(mMetaState);
+ Log.v(TAG, "onShiftPress, new metaState: " + mMetaState);
+ final boolean isShiftOn = isShiftOn(mMetaState);
+ for (int i = 0; i < mSoftKeyViews.size(); i++) {
+ final TextView softKeyView = mSoftKeyViews.valueAt(i);
+ softKeyView.setAllCaps(isShiftOn);
+ }
+ }
+
+ /**
+ * Checks whether the shift meta key is pressed.
+ *
+ * @param state the flags indicating which meta keys are currently pressed.
+ */
+ private static boolean isShiftOn(int state) {
+ return (state & KeyEvent.META_SHIFT_ON) == KeyEvent.META_SHIFT_ON;
+ }
+
+ /**
+ * Toggles the value of the shift meta key being pressed.
+ *
+ * @param state the flags indicating which meta keys are currently pressed.
+ * @return a new flag state, with the shift meta key value flipped.
+ */
+ private static int toggleShiftState(int state) {
+ return state ^ KeyEvent.META_SHIFT_ON;
+ }
+}
diff --git a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/ims/InputMethodServiceWrapper.java b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/ims/InputMethodServiceWrapper.java
index 3a7abbb167ec..558d1a7c4e8b 100644
--- a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/ims/InputMethodServiceWrapper.java
+++ b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/ims/InputMethodServiceWrapper.java
@@ -27,6 +27,7 @@ import androidx.annotation.Nullable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.lang.ref.WeakReference;
import java.util.concurrent.CountDownLatch;
/** Wrapper of {@link InputMethodService} to expose interfaces for testing purpose. */
@@ -35,8 +36,8 @@ public class InputMethodServiceWrapper extends InputMethodService {
private static final String TAG = "InputMethodServiceWrapper";
/** Last created instance of this wrapper. */
- @Nullable
- private static InputMethodServiceWrapper sInstance;
+ @NonNull
+ private static WeakReference<InputMethodServiceWrapper> sInstance = new WeakReference<>(null);
/** IME show event ({@link #onStartInputView}). */
public static final int EVENT_SHOW = 0;
@@ -68,32 +69,11 @@ public class InputMethodServiceWrapper extends InputMethodService {
@Nullable
private CountDownLatch mCountDownLatch;
- /** Gets the last created instance of this wrapper, if available. */
- @Nullable
- public static InputMethodServiceWrapper getInstance() {
- return sInstance;
- }
-
- public boolean getCurrentInputViewStarted() {
- return mInputViewStarted;
- }
-
- /**
- * Sets the latch used to wait for the IME event.
- *
- * @param latch the latch to wait on.
- * @param latchEvent the event to set the latch on.
- */
- public void setCountDownLatchForTesting(@Nullable CountDownLatch latch, @Event int latchEvent) {
- mCountDownLatch = latch;
- mLatchEvent = latchEvent;
- }
-
@Override
public void onCreate() {
Log.i(TAG, "onCreate()");
super.onCreate();
- sInstance = this;
+ sInstance = new WeakReference<>(this);
}
@Override
@@ -103,6 +83,12 @@ public class InputMethodServiceWrapper extends InputMethodService {
}
@Override
+ public void onFinishInput() {
+ Log.i(TAG, "onFinishInput()");
+ super.onFinishInput();
+ }
+
+ @Override
public void onStartInputView(EditorInfo info, boolean restarting) {
Log.i(TAG, "onStartInputView() editor=" + dumpEditorInfo(info)
+ ", restarting=" + restarting);
@@ -114,12 +100,6 @@ public class InputMethodServiceWrapper extends InputMethodService {
}
@Override
- public void onFinishInput() {
- Log.i(TAG, "onFinishInput()");
- super.onFinishInput();
- }
-
- @Override
public void onFinishInputView(boolean finishingInput) {
Log.i(TAG, "onFinishInputView()");
super.onFinishInputView(finishingInput);
@@ -146,14 +126,35 @@ public class InputMethodServiceWrapper extends InputMethodService {
}
}
+ public boolean getCurrentInputViewStarted() {
+ return mInputViewStarted;
+ }
+
+ /**
+ * Sets the latch used to wait for the IME event.
+ *
+ * @param latch the latch to wait on.
+ * @param latchEvent the event to set the latch on.
+ */
+ public void setCountDownLatchForTesting(@Nullable CountDownLatch latch, @Event int latchEvent) {
+ mCountDownLatch = latch;
+ mLatchEvent = latchEvent;
+ }
+
+ /** Gets the last created instance of this wrapper, if available. */
+ @Nullable
+ public static InputMethodServiceWrapper getInstance() {
+ return sInstance.get();
+ }
+
/**
* Gets the string representation of the IME event that is being waited on.
*
- * @param event the IME event.
+ * @param eventType the IME event type.
*/
@NonNull
- public static String eventToString(@Event int event) {
- return switch (event) {
+ public static String eventToString(@Event int eventType) {
+ return switch (eventType) {
case EVENT_SHOW -> "onStartInputView";
case EVENT_HIDE -> "onFinishInputView";
case EVENT_CONFIG -> "onConfigurationChanged";
diff --git a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/testing/TestActivity.java b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/testing/TestActivity.java
index eadbac3ca74b..ad90b32848b0 100644
--- a/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/testing/TestActivity.java
+++ b/services/tests/InputMethodSystemServerTests/test-apps/SimpleTestIme/src/com/android/apps/inputmethod/simpleime/testing/TestActivity.java
@@ -45,30 +45,13 @@ import java.lang.ref.WeakReference;
public final class TestActivity extends Activity {
private static final String TAG = "TestActivity";
- private static WeakReference<TestActivity> sLastCreatedInstance = new WeakReference<>(null);
- /**
- * Start a new test activity with an editor and wait for it to begin running before returning.
- *
- * @param instrumentation application instrumentation
- * @return the newly started activity
- */
+ /** Last created instance of this activity. */
@NonNull
- public static TestActivity startSync(@NonNull Instrumentation instrumentation) {
- final var intent = new Intent()
- .setAction(Intent.ACTION_MAIN)
- .setClass(instrumentation.getTargetContext(), TestActivity.class)
- .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- return (TestActivity) instrumentation.startActivitySync(intent);
- }
+ private static WeakReference<TestActivity> sInstance = new WeakReference<>(null);
private EditText mEditText;
- public EditText getEditText() {
- return mEditText;
- }
-
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -80,13 +63,11 @@ public final class TestActivity extends Activity {
rootView.setFitsSystemWindows(true);
setContentView(rootView);
mEditText.requestFocus();
- sLastCreatedInstance = new WeakReference<>(this);
+ sInstance = new WeakReference<>(this);
}
- /** Get the last created TestActivity instance, if available. */
- @Nullable
- public static TestActivity getLastCreatedInstance() {
- return sLastCreatedInstance.get();
+ public EditText getEditText() {
+ return mEditText;
}
/** Shows soft keyboard via InputMethodManager. */
@@ -118,4 +99,26 @@ public final class TestActivity extends Activity {
controller.hide(WindowInsets.Type.ime());
Log.i(TAG, "hideIme() via WindowInsetsController");
}
+
+ /** Gets the last created instance of this activity, if available. */
+ @Nullable
+ public static TestActivity getInstance() {
+ return sInstance.get();
+ }
+
+ /**
+ * Start a new test activity with an editor and wait for it to begin running before returning.
+ *
+ * @param instrumentation application instrumentation.
+ * @return the newly started activity.
+ */
+ @NonNull
+ public static TestActivity startSync(@NonNull Instrumentation instrumentation) {
+ final var intent = new Intent()
+ .setAction(Intent.ACTION_MAIN)
+ .setClass(instrumentation.getTargetContext(), TestActivity.class)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ return (TestActivity) instrumentation.startActivitySync(intent);
+ }
}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceTest.java
index 00296745a81f..38586155993e 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceTest.java
@@ -23,10 +23,17 @@ import static android.view.Surface.ROTATION_90;
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
import android.graphics.Point;
import android.graphics.Rect;
import android.platform.test.annotations.Presubmit;
import android.view.Display;
+import android.view.Surface;
import android.view.SurfaceControl;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -37,6 +44,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
/**
@@ -154,6 +162,65 @@ public class DisplayDeviceTest {
assertThat(displayDevice.getDisplaySurfaceDefaultSizeLocked()).isEqualTo(LANDSCAPE_SIZE);
}
+ @Test
+ public void testSetDisplaySize_landscapeInstallRotation() {
+ DisplayDevice displayDevice = new FakeDisplayDevice(mDisplayDeviceInfo,
+ mMockDisplayAdapter);
+ mDisplayDeviceInfo.installOrientation = Surface.ROTATION_0;
+ mDisplayDeviceInfo.width = 100;
+ mDisplayDeviceInfo.height = 200;
+ displayDevice.configureDisplaySizeLocked(mMockTransaction);
+ verify(mMockTransaction).setDisplaySize(isNull(), eq(100), eq(200));
+
+ Mockito.clearInvocations(mMockTransaction);
+
+ mDisplayDeviceInfo.installOrientation = Surface.ROTATION_180;
+ mDisplayDeviceInfo.width = 300;
+ mDisplayDeviceInfo.height = 400;
+ displayDevice.configureDisplaySizeLocked(mMockTransaction);
+ verify(mMockTransaction).setDisplaySize(isNull(), eq(300), eq(400));
+ }
+
+ @Test
+ public void testSetDisplaySize_portraitInstallRotation() {
+ DisplayDevice displayDevice = new FakeDisplayDevice(mDisplayDeviceInfo,
+ mMockDisplayAdapter);
+ mDisplayDeviceInfo.installOrientation = Surface.ROTATION_90;
+ mDisplayDeviceInfo.width = 100;
+ mDisplayDeviceInfo.height = 200;
+ displayDevice.configureDisplaySizeLocked(mMockTransaction);
+ verify(mMockTransaction).setDisplaySize(isNull(), eq(200), eq(100));
+
+ Mockito.clearInvocations(mMockTransaction);
+
+ mDisplayDeviceInfo.installOrientation = Surface.ROTATION_270;
+ mDisplayDeviceInfo.width = 300;
+ mDisplayDeviceInfo.height = 400;
+ displayDevice.configureDisplaySizeLocked(mMockTransaction);
+ verify(mMockTransaction).setDisplaySize(isNull(), eq(400), eq(300));
+ }
+
+ @Test
+ public void testSetDisplaySize_invokedOnlyAfterResize() {
+ DisplayDevice displayDevice = new FakeDisplayDevice(mDisplayDeviceInfo,
+ mMockDisplayAdapter);
+ mDisplayDeviceInfo.installOrientation = Surface.ROTATION_90;
+ mDisplayDeviceInfo.width = 100;
+ mDisplayDeviceInfo.height = 200;
+ displayDevice.configureDisplaySizeLocked(mMockTransaction);
+ verify(mMockTransaction).setDisplaySize(isNull(), eq(200), eq(100));
+
+ Mockito.clearInvocations(mMockTransaction);
+
+ displayDevice.configureDisplaySizeLocked(mMockTransaction);
+ verify(mMockTransaction, never()).setDisplaySize(isNull(), anyInt(), anyInt());
+
+ mDisplayDeviceInfo.width = 300;
+ mDisplayDeviceInfo.height = 400;
+ displayDevice.configureDisplaySizeLocked(mMockTransaction);
+ verify(mMockTransaction).setDisplaySize(isNull(), eq(400), eq(300));
+ }
+
private static class FakeDisplayDevice extends DisplayDevice {
private final DisplayDeviceInfo mDisplayDeviceInfo;
diff --git a/services/tests/displayservicetests/src/com/android/server/display/LocalDisplayAdapterTest.java b/services/tests/displayservicetests/src/com/android/server/display/LocalDisplayAdapterTest.java
index b9cea0c72306..f8b4113a3c04 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/LocalDisplayAdapterTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/LocalDisplayAdapterTest.java
@@ -550,10 +550,10 @@ public class LocalDisplayAdapterTest {
assertDisplayDpi(
mListener.addedDisplays.get(0).getDisplayDeviceInfoLocked(), PORT_A, 100, 100,
- 100);
+ 136);
assertDisplayDpi(
mListener.addedDisplays.get(1).getDisplayDeviceInfoLocked(), PORT_B, 100, 100,
- 100);
+ 136);
}
private static class DisplayModeWrapper {
diff --git a/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java b/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java
index 1a0ab252f128..37f8aba1fb6c 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/LogicalDisplayTest.java
@@ -159,7 +159,8 @@ public class LogicalDisplayTest {
mDisplayDeviceInfo.type = Display.TYPE_INTERNAL;
mLogicalDisplay = new LogicalDisplay(DISPLAY_ID, LAYER_STACK, mDisplayDevice,
/*isAnisotropyCorrectionEnabled=*/ true,
- /*isAlwaysRotateDisplayDeviceEnabled=*/ true);
+ /*isAlwaysRotateDisplayDeviceEnabled=*/ true,
+ /*isSyncedResolutionSwitchEnabled=*/ true);
// In case of Anisotropy of pixels, then the content should be rescaled so it would adjust
// to using the whole screen. This is because display will rescale it back to fill the
@@ -188,7 +189,8 @@ public class LogicalDisplayTest {
mDisplayDeviceInfo.type = Display.TYPE_EXTERNAL;
mLogicalDisplay = new LogicalDisplay(DISPLAY_ID, LAYER_STACK, mDisplayDevice,
/*isAnisotropyCorrectionEnabled=*/ true,
- /*isAlwaysRotateDisplayDeviceEnabled=*/ true);
+ /*isAlwaysRotateDisplayDeviceEnabled=*/ true,
+ /*isSyncedResolutionSwitchEnabled=*/ true);
// In case of Anisotropy of pixels, then the content should be rescaled so it would adjust
// to using the whole screen. This is because display will rescale it back to fill the
@@ -217,7 +219,8 @@ public class LogicalDisplayTest {
mDisplayDeviceInfo.type = Display.TYPE_EXTERNAL;
mLogicalDisplay = new LogicalDisplay(DISPLAY_ID, LAYER_STACK, mDisplayDevice,
/*isAnisotropyCorrectionEnabled=*/ true,
- /*isAlwaysRotateDisplayDeviceEnabled=*/ true);
+ /*isAlwaysRotateDisplayDeviceEnabled=*/ true,
+ /*isSyncedResolutionSwitchEnabled=*/ true);
DisplayInfo displayInfo = new DisplayInfo();
displayInfo.logicalWidth = DISPLAY_WIDTH;
@@ -275,7 +278,8 @@ public class LogicalDisplayTest {
mDisplayDeviceInfo.type = Display.TYPE_EXTERNAL;
mLogicalDisplay = new LogicalDisplay(DISPLAY_ID, LAYER_STACK, mDisplayDevice,
/*isAnisotropyCorrectionEnabled=*/ true,
- /*isAlwaysRotateDisplayDeviceEnabled=*/ true);
+ /*isAlwaysRotateDisplayDeviceEnabled=*/ true,
+ /*isSyncedResolutionSwitchEnabled=*/ true);
DisplayInfo displayInfo = new DisplayInfo();
displayInfo.logicalWidth = DISPLAY_WIDTH;
@@ -304,7 +308,8 @@ public class LogicalDisplayTest {
mDisplayDeviceInfo.type = Display.TYPE_EXTERNAL;
mLogicalDisplay = new LogicalDisplay(DISPLAY_ID, LAYER_STACK, mDisplayDevice,
/*isAnisotropyCorrectionEnabled=*/ true,
- /*isAlwaysRotateDisplayDeviceEnabled=*/ true);
+ /*isAlwaysRotateDisplayDeviceEnabled=*/ true,
+ /*isSyncedResolutionSwitchEnabled=*/ true);
// In case of Anisotropy of pixels, then the content should be rescaled so it would adjust
// to using the whole screen. This is because display will rescale it back to fill the
@@ -379,11 +384,24 @@ public class LogicalDisplayTest {
}
@Test
+ public void testSetDisplaySizeIsCalledDuringConfigureDisplayLocked() {
+ mLogicalDisplay = new LogicalDisplay(DISPLAY_ID, LAYER_STACK, mDisplayDevice,
+ /*isAnisotropyCorrectionEnabled=*/ true,
+ /*isAlwaysRotateDisplayDeviceEnabled=*/ true,
+ /*isSyncedResolutionSwitchEnabled=*/ true);
+ mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
+ SurfaceControl.Transaction t = mock(SurfaceControl.Transaction.class);
+ mLogicalDisplay.configureDisplayLocked(t, mDisplayDevice, false);
+ verify(mDisplayDevice).configureDisplaySizeLocked(eq(t));
+ }
+
+ @Test
public void testGetDisplayPositionAlwaysRotateDisplayEnabled() {
mDisplayDeviceInfo.type = Display.TYPE_EXTERNAL;
mLogicalDisplay = new LogicalDisplay(DISPLAY_ID, LAYER_STACK, mDisplayDevice,
/*isAnisotropyCorrectionEnabled=*/ true,
- /*isAlwaysRotateDisplayDeviceEnabled=*/ true);
+ /*isAlwaysRotateDisplayDeviceEnabled=*/ true,
+ /*isSyncedResolutionSwitchEnabled=*/ true);
mLogicalDisplay.updateLocked(mDeviceRepo, mSyntheticModeManager);
Point expectedPosition = new Point();
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickControllerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickControllerTest.java
index 0227ef1d2dc0..7f60caaa569b 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickControllerTest.java
@@ -326,6 +326,80 @@ public class AutoclickControllerTest {
assertThat(mController.mClickScheduler.getIsActiveForTesting()).isTrue();
}
+ @Test
+ public void smallJitteryMovement_doesNotTriggerClick() {
+ // Initial hover move to set an anchor point.
+ MotionEvent initialHoverMove = MotionEvent.obtain(
+ /* downTime= */ 0,
+ /* eventTime= */ 100,
+ /* action= */ MotionEvent.ACTION_HOVER_MOVE,
+ /* x= */ 30f,
+ /* y= */ 40f,
+ /* metaState= */ 0);
+ initialHoverMove.setSource(InputDevice.SOURCE_MOUSE);
+ mController.onMotionEvent(initialHoverMove, initialHoverMove, /* policyFlags= */ 0);
+
+ // Get the initial scheduled click time.
+ long initialScheduledTime = mController.mClickScheduler.getScheduledClickTimeForTesting();
+
+ // Simulate small, jittery movements (all within the default slop).
+ MotionEvent jitteryMove1 = MotionEvent.obtain(
+ /* downTime= */ 0,
+ /* eventTime= */ 150,
+ /* action= */ MotionEvent.ACTION_HOVER_MOVE,
+ /* x= */ 31f, // Small change in x
+ /* y= */ 41f, // Small change in y
+ /* metaState= */ 0);
+ jitteryMove1.setSource(InputDevice.SOURCE_MOUSE);
+ mController.onMotionEvent(jitteryMove1, jitteryMove1, /* policyFlags= */ 0);
+
+ MotionEvent jitteryMove2 = MotionEvent.obtain(
+ /* downTime= */ 0,
+ /* eventTime= */ 200,
+ /* action= */ MotionEvent.ACTION_HOVER_MOVE,
+ /* x= */ 30.5f, // Small change in x
+ /* y= */ 39.8f, // Small change in y
+ /* metaState= */ 0);
+ jitteryMove2.setSource(InputDevice.SOURCE_MOUSE);
+ mController.onMotionEvent(jitteryMove2, jitteryMove2, /* policyFlags= */ 0);
+
+ // Verify that the scheduled click time has NOT changed.
+ assertThat(mController.mClickScheduler.getScheduledClickTimeForTesting())
+ .isEqualTo(initialScheduledTime);
+ }
+
+ @Test
+ public void singleSignificantMovement_triggersClick() {
+ // Initial hover move to set an anchor point.
+ MotionEvent initialHoverMove = MotionEvent.obtain(
+ /* downTime= */ 0,
+ /* eventTime= */ 100,
+ /* action= */ MotionEvent.ACTION_HOVER_MOVE,
+ /* x= */ 30f,
+ /* y= */ 40f,
+ /* metaState= */ 0);
+ initialHoverMove.setSource(InputDevice.SOURCE_MOUSE);
+ mController.onMotionEvent(initialHoverMove, initialHoverMove, /* policyFlags= */ 0);
+
+ // Get the initial scheduled click time.
+ long initialScheduledTime = mController.mClickScheduler.getScheduledClickTimeForTesting();
+
+ // Simulate a single, significant movement (greater than the default slop).
+ MotionEvent significantMove = MotionEvent.obtain(
+ /* downTime= */ 0,
+ /* eventTime= */ 150,
+ /* action= */ MotionEvent.ACTION_HOVER_MOVE,
+ /* x= */ 60f, // Significant change in x (30f difference)
+ /* y= */ 70f, // Significant change in y (30f difference)
+ /* metaState= */ 0);
+ significantMove.setSource(InputDevice.SOURCE_MOUSE);
+ mController.onMotionEvent(significantMove, significantMove, /* policyFlags= */ 0);
+
+ // Verify that the scheduled click time has changed (click was rescheduled).
+ assertThat(mController.mClickScheduler.getScheduledClickTimeForTesting())
+ .isNotEqualTo(initialScheduledTime);
+ }
+
private void injectFakeMouseActionHoverMoveEvent() {
MotionEvent event = getFakeMotionHoverMoveEvent();
event.setSource(InputDevice.SOURCE_MOUSE);
diff --git a/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java b/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java
index 06958b81d846..1627f683cd3e 100644
--- a/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/UserControllerTest.java
@@ -25,6 +25,7 @@ import static android.app.ActivityManagerInternal.ALLOW_FULL_ONLY;
import static android.app.ActivityManagerInternal.ALLOW_NON_FULL;
import static android.app.ActivityManagerInternal.ALLOW_NON_FULL_IN_PROFILE;
import static android.app.ActivityManagerInternal.ALLOW_PROFILES_OR_NON_FULL;
+import static android.app.KeyguardManager.LOCK_ON_USER_SWITCH_CALLBACK;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.testing.DexmakerShareClassLoaderRule.runWithDexmakerShareClassLoader;
@@ -115,7 +116,6 @@ import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.UserManagerService;
import com.android.server.pm.UserTypeDetails;
import com.android.server.pm.UserTypeFactory;
-import com.android.server.wm.ActivityTaskManagerInternal;
import com.android.server.wm.WindowManagerService;
import com.google.common.collect.Range;
@@ -1563,11 +1563,11 @@ public class UserControllerTest {
// and the thread is still alive
assertTrue(threadStartUser.isAlive());
- // mock send the keyguard shown event
- ArgumentCaptor<ActivityTaskManagerInternal.ScreenObserver> captor = ArgumentCaptor.forClass(
- ActivityTaskManagerInternal.ScreenObserver.class);
- verify(mInjector.mActivityTaskManagerInternal).registerScreenObserver(captor.capture());
- captor.getValue().onKeyguardStateChanged(true);
+ // mock the binder response for the user switch completion
+ ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
+ verify(mInjector.mWindowManagerMock).lockNow(captor.capture());
+ IRemoteCallback.Stub.asInterface(captor.getValue().getBinder(
+ LOCK_ON_USER_SWITCH_CALLBACK)).sendResult(null);
// verify the switch now moves on...
Thread.sleep(1000);
@@ -1757,7 +1757,6 @@ public class UserControllerTest {
private final IStorageManager mStorageManagerMock;
private final UserManagerInternal mUserManagerInternalMock;
private final WindowManagerService mWindowManagerMock;
- private final ActivityTaskManagerInternal mActivityTaskManagerInternal;
private final PowerManagerInternal mPowerManagerInternal;
private final AlarmManagerInternal mAlarmManagerInternal;
private final KeyguardManager mKeyguardManagerMock;
@@ -1779,7 +1778,6 @@ public class UserControllerTest {
mUserManagerMock = mock(UserManagerService.class);
mUserManagerInternalMock = mock(UserManagerInternal.class);
mWindowManagerMock = mock(WindowManagerService.class);
- mActivityTaskManagerInternal = mock(ActivityTaskManagerInternal.class);
mStorageManagerMock = mock(IStorageManager.class);
mPowerManagerInternal = mock(PowerManagerInternal.class);
mAlarmManagerInternal = mock(AlarmManagerInternal.class);
@@ -1843,11 +1841,6 @@ public class UserControllerTest {
}
@Override
- ActivityTaskManagerInternal getActivityTaskManagerInternal() {
- return mActivityTaskManagerInternal;
- }
-
- @Override
PowerManagerInternal getPowerManagerInternal() {
return mPowerManagerInternal;
}
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 0373eb6e9318..415e3accfa39 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -5383,6 +5383,42 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
}
@Test
+ public void testGetPackagesWithChannels_blocked() throws Exception {
+ // While we mostly rely on the PreferencesHelper implementation of channels, we filter in
+ // NMS so that we do not return blocked packages.
+ // Three packages; all under user 1.
+ // pkg2 is blocked, but pkg1 and pkg3 are not.
+ String pkg1 = "com.package.one", pkg2 = "com.package.two", pkg3 = "com.package.three";
+ int uid1 = UserHandle.getUid(1, 111);
+ int uid2 = UserHandle.getUid(1, 222);
+ int uid3 = UserHandle.getUid(1, 333);
+
+ when(mPackageManager.getPackageUid(eq(pkg1), anyLong(), anyInt())).thenReturn(uid1);
+ when(mPackageManager.getPackageUid(eq(pkg2), anyLong(), anyInt())).thenReturn(uid2);
+ when(mPackageManager.getPackageUid(eq(pkg3), anyLong(), anyInt())).thenReturn(uid3);
+ when(mPermissionHelper.hasPermission(uid1)).thenReturn(true);
+ when(mPermissionHelper.hasPermission(uid2)).thenReturn(false);
+ when(mPermissionHelper.hasPermission(uid3)).thenReturn(true);
+
+ NotificationChannel channel1 = new NotificationChannel("id1", "name1",
+ NotificationManager.IMPORTANCE_DEFAULT);
+ NotificationChannel channel2 = new NotificationChannel("id3", "name3",
+ NotificationManager.IMPORTANCE_DEFAULT);
+ NotificationChannel channel3 = new NotificationChannel("id4", "name3",
+ NotificationManager.IMPORTANCE_DEFAULT);
+ mService.mPreferencesHelper.createNotificationChannel(pkg1, uid1, channel1, true, false,
+ uid1, false);
+ mService.mPreferencesHelper.createNotificationChannel(pkg2, uid2, channel2, true, false,
+ uid2, false);
+ mService.mPreferencesHelper.createNotificationChannel(pkg3, uid3, channel3, true, false,
+ uid3, false);
+
+ // Output should contain only the package with notification permissions (1, 3).
+ enableInteractAcrossUsers();
+ assertThat(mBinderService.getPackagesWithAnyChannels(1)).containsExactly(pkg1, pkg3);
+ }
+
+ @Test
public void testHasCompanionDevice_failure() throws Exception {
when(mCompanionMgr.getAssociations(anyString(), anyInt())).thenThrow(
new IllegalArgumentException());
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
index 3f26cd9258af..640de174ba20 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
@@ -3096,6 +3096,67 @@ public class PreferencesHelperTest extends UiServiceTestCase {
}
@Test
+ public void getPackagesWithAnyChannels_noChannels() {
+ assertThat(mHelper.getPackagesWithAnyChannels(UserHandle.getUserId(UID_O))).isEmpty();
+ }
+
+ @Test
+ public void getPackagesWithAnyChannels_someChannels() {
+ // 2 channels under PKG_N_MR1, 1 under PKG_O
+ NotificationChannel channel1 = new NotificationChannel("1", "something",
+ IMPORTANCE_DEFAULT);
+ mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, channel1, true, false, UID_N_MR1,
+ false);
+ NotificationChannel channel2 = new NotificationChannel("2", "another", IMPORTANCE_DEFAULT);
+ mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, channel2, true, false, UID_N_MR1,
+ false);
+
+ NotificationChannel other = new NotificationChannel("3", "still another",
+ IMPORTANCE_DEFAULT);
+ mHelper.createNotificationChannel(PKG_O, UID_O, other, true, false, UID_O, false);
+
+ assertThat(mHelper.getPackagesWithAnyChannels(USER.getIdentifier())).containsExactly(
+ PKG_N_MR1, PKG_O);
+ }
+
+ @Test
+ public void getPackagesWithAnyChannels_onlyDeleted() {
+ NotificationChannel channel1 = new NotificationChannel("1", "something",
+ IMPORTANCE_DEFAULT);
+ channel1.setDeleted(true);
+ mHelper.createNotificationChannel(PKG_O, UID_O, channel1, true, false, UID_O,
+ false);
+ NotificationChannel channel2 = new NotificationChannel("2", "another", IMPORTANCE_DEFAULT);
+ channel2.setDeleted(true);
+ mHelper.createNotificationChannel(PKG_O, UID_O, channel2, true, false, UID_O,
+ false);
+
+ assertThat(mHelper.getPackagesWithAnyChannels(UserHandle.getUserId(UID_O))).isEmpty();
+ }
+
+ @Test
+ public void getPackagesWithAnyChannels_distinguishesUsers() throws Exception {
+ // Set a package up for both users 0 and 10
+ String pkgName = "test.package";
+ int uid0 = UserHandle.getUid(0, 1234);
+ int uid10 = UserHandle.getUid(10, 1234);
+ setUpPackageWithUid(pkgName, uid0);
+ setUpPackageWithUid(pkgName, uid10);
+
+ // but only user 10 has channels
+ NotificationChannel channel1 = new NotificationChannel("1", "something",
+ IMPORTANCE_DEFAULT);
+ mHelper.createNotificationChannel(pkgName, uid10, channel1, true, false, uid10,
+ false);
+ NotificationChannel channel2 = new NotificationChannel("2", "another", IMPORTANCE_DEFAULT);
+ mHelper.createNotificationChannel(pkgName, uid10, channel2, true, false, uid10,
+ false);
+
+ assertThat(mHelper.getPackagesWithAnyChannels(0)).isEmpty();
+ assertThat(mHelper.getPackagesWithAnyChannels(10)).containsExactly(pkgName);
+ }
+
+ @Test
public void testOnlyHasDefaultChannel() throws Exception {
assertTrue(mHelper.onlyHasDefaultChannel(PKG_N_MR1, UID_N_MR1));
assertFalse(mHelper.onlyHasDefaultChannel(PKG_O, UID_O));
diff --git a/services/tests/wmtests/src/com/android/server/wm/RemoteAnimationControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/RemoteAnimationControllerTest.java
deleted file mode 100644
index 20381ba21758..000000000000
--- a/services/tests/wmtests/src/com/android/server/wm/RemoteAnimationControllerTest.java
+++ /dev/null
@@ -1,757 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm;
-
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
-import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
-import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
-import static android.view.WindowManager.TRANSIT_OLD_ACTIVITY_OPEN;
-import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY;
-import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER;
-import static android.view.WindowManager.TRANSIT_OLD_NONE;
-import static android.view.WindowManager.TRANSIT_OLD_TASK_CHANGE_WINDOWING_MODE;
-import static android.view.WindowManager.TRANSIT_OLD_TASK_OPEN;
-
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.atLeast;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.never;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.verifyNoMoreInteractions;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
-import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION;
-import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_WINDOW_ANIMATION;
-
-import static junit.framework.Assert.fail;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.os.Binder;
-import android.os.IBinder;
-import android.os.IInterface;
-import android.os.RemoteException;
-import android.platform.test.annotations.Presubmit;
-import android.view.IRemoteAnimationFinishedCallback;
-import android.view.IRemoteAnimationRunner;
-import android.view.RemoteAnimationAdapter;
-import android.view.RemoteAnimationTarget;
-import android.view.SurfaceControl;
-import android.view.SurfaceControl.Transaction;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.server.testutils.OffsettableClock;
-import com.android.server.testutils.TestHandler;
-import com.android.server.wm.RemoteAnimationController.RemoteAnimationRecord;
-import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-/**
- * Build/Install/Run:
- * atest WmTests:RemoteAnimationControllerTest
- */
-@SmallTest
-@Presubmit
-@RunWith(WindowTestRunner.class)
-public class RemoteAnimationControllerTest extends WindowTestsBase {
-
- @Mock
- SurfaceControl mMockLeash;
- @Mock
- SurfaceControl mMockThumbnailLeash;
- @Mock
- Transaction mMockTransaction;
- @Mock
- OnAnimationFinishedCallback mFinishedCallback;
- @Mock
- OnAnimationFinishedCallback mThumbnailFinishedCallback;
- @Mock
- IRemoteAnimationRunner mMockRunner;
- private RemoteAnimationAdapter mAdapter;
- private RemoteAnimationController mController;
- private final OffsettableClock mClock = new OffsettableClock.Stopped();
- private TestHandler mHandler;
-
- @Before
- public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
-
- when(mMockRunner.asBinder()).thenReturn(new Binder());
- mAdapter = new RemoteAnimationAdapter(mMockRunner, 100, 50, true /* changeNeedsSnapshot */);
- mAdapter.setCallingPidUid(123, 456);
- runWithScissors(mWm.mH, () -> mHandler = new TestHandler(null, mClock), 0);
- mController = new RemoteAnimationController(mWm, mDisplayContent, mAdapter,
- mHandler, false /*isActivityEmbedding*/);
- mWm.mAnimator.ready();
- }
-
- private WindowState createAppOverlayWindow() {
- final WindowState win = newWindowBuilder("testOverlayWindow",
- TYPE_APPLICATION_OVERLAY).build();
- win.mActivityRecord = null;
- win.mHasSurface = true;
- return win;
- }
-
- @Test
- public void testForwardsShowBackdrop() throws Exception {
- final WindowState win = createTestWindow();
- mDisplayContent.mOpeningApps.add(win.mActivityRecord);
- final WindowState overlayWin = createAppOverlayWindow();
- try {
- final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
- win.mActivityRecord,
- new Point(50, 100), null, new Rect(50, 100, 150, 150), null,
- true /* showBackdrop */).mAdapter;
- adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
- mFinishedCallback);
- mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
- waitUntilWindowAnimatorIdle();
- final ArgumentCaptor<RemoteAnimationTarget[]> appsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> wallpapersCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> nonAppsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<IRemoteAnimationFinishedCallback> finishedCaptor =
- ArgumentCaptor.forClass(IRemoteAnimationFinishedCallback.class);
- verify(mMockRunner).onAnimationStart(eq(TRANSIT_OLD_ACTIVITY_OPEN),
- appsCaptor.capture(), wallpapersCaptor.capture(), nonAppsCaptor.capture(),
- finishedCaptor.capture());
- assertEquals(1, appsCaptor.getValue().length);
- final RemoteAnimationTarget app = appsCaptor.getValue()[0];
- assertTrue(app.showBackdrop);
- } finally {
- mDisplayContent.mOpeningApps.clear();
- }
- }
-
- @Test
- public void testRun() throws Exception {
- final WindowState win = createTestWindow();
- mDisplayContent.mOpeningApps.add(win.mActivityRecord);
- final WindowState overlayWin = createAppOverlayWindow();
- try {
- final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
- win.mActivityRecord,
- new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
- adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
- mFinishedCallback);
- mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
- waitUntilWindowAnimatorIdle();
- final ArgumentCaptor<RemoteAnimationTarget[]> appsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> wallpapersCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> nonAppsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<IRemoteAnimationFinishedCallback> finishedCaptor =
- ArgumentCaptor.forClass(IRemoteAnimationFinishedCallback.class);
- verify(mMockRunner).onAnimationStart(eq(TRANSIT_OLD_ACTIVITY_OPEN),
- appsCaptor.capture(), wallpapersCaptor.capture(), nonAppsCaptor.capture(),
- finishedCaptor.capture());
- assertEquals(1, appsCaptor.getValue().length);
- final RemoteAnimationTarget app = appsCaptor.getValue()[0];
- assertEquals(new Point(50, 100), app.position);
- assertEquals(new Rect(50, 100, 150, 150), app.sourceContainerBounds);
- assertEquals(win.mActivityRecord.getPrefixOrderIndex(), app.prefixOrderIndex);
- assertEquals(win.mActivityRecord.getTask().mTaskId, app.taskId);
- assertEquals(mMockLeash, app.leash);
- assertEquals(false, app.isTranslucent);
- verify(mMockTransaction).setPosition(mMockLeash, app.position.x, app.position.y);
- verify(mMockTransaction).setWindowCrop(mMockLeash, 100, 50);
-
- finishedCaptor.getValue().onAnimationFinished();
- verify(mFinishedCallback).onAnimationFinished(eq(ANIMATION_TYPE_APP_TRANSITION),
- eq(adapter));
- assertEquals(0, nonAppsCaptor.getValue().length);
- } finally {
- mDisplayContent.mOpeningApps.clear();
- }
- }
-
- @Test
- public void testCancel() throws Exception {
- final WindowState win = createTestWindow();
- final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
- win.mActivityRecord,
- new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
- adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
- mFinishedCallback);
- mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
-
- adapter.onAnimationCancelled(mMockLeash);
- verify(mMockRunner).onAnimationCancelled();
- }
-
- @Test
- public void testTimeout() throws Exception {
- final WindowState win = createTestWindow();
- final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
- win.mActivityRecord,
- new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
- adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
- mFinishedCallback);
- mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
-
- mClock.fastForward(10500);
- mHandler.timeAdvance();
-
- verify(mMockRunner).onAnimationCancelled();
- verify(mFinishedCallback).onAnimationFinished(eq(ANIMATION_TYPE_APP_TRANSITION),
- eq(adapter));
- }
-
- @Test
- public void testTimeout_scaled() throws Exception {
- try {
- mWm.setAnimationScale(2, 5.0f);
- final WindowState win = createTestWindow();
- final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
- win.mActivityRecord, new Point(50, 100), null, new Rect(50, 100, 150, 150),
- null, false).mAdapter;
- adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
- mFinishedCallback);
- mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
-
- mClock.fastForward(10500);
- mHandler.timeAdvance();
-
- verify(mMockRunner, never()).onAnimationCancelled();
-
- mClock.fastForward(52500);
- mHandler.timeAdvance();
-
- verify(mMockRunner).onAnimationCancelled();
- verify(mFinishedCallback).onAnimationFinished(eq(ANIMATION_TYPE_APP_TRANSITION),
- eq(adapter));
- } finally {
- mWm.setAnimationScale(2, 1.0f);
- }
- }
-
- @Test
- public void testZeroAnimations() throws Exception {
- mController.goodToGo(TRANSIT_OLD_NONE);
- verify(mMockRunner, never()).onAnimationStart(anyInt(), any(), any(), any(), any());
- verify(mMockRunner).onAnimationCancelled();
- }
-
- @Test
- public void testNotReallyStarted() throws Exception {
- final WindowState win = createTestWindow();
- mController.createRemoteAnimationRecord(win.mActivityRecord,
- new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false);
- mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
- verify(mMockRunner, never()).onAnimationStart(anyInt(), any(), any(), any(), any());
- verify(mMockRunner).onAnimationCancelled();
- }
-
- @Test
- public void testOneNotStarted() throws Exception {
- final WindowState win1 = newWindowBuilder("testWin1", TYPE_BASE_APPLICATION).build();
- final WindowState win2 = newWindowBuilder("testWin2", TYPE_BASE_APPLICATION).build();
- mController.createRemoteAnimationRecord(win1.mActivityRecord,
- new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false);
- final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
- win2.mActivityRecord,
- new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
- adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
- mFinishedCallback);
- mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
- waitUntilWindowAnimatorIdle();
- final ArgumentCaptor<RemoteAnimationTarget[]> appsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> wallpapersCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> nonAppsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<IRemoteAnimationFinishedCallback> finishedCaptor =
- ArgumentCaptor.forClass(IRemoteAnimationFinishedCallback.class);
- verify(mMockRunner).onAnimationStart(eq(TRANSIT_OLD_ACTIVITY_OPEN),
- appsCaptor.capture(), wallpapersCaptor.capture(), nonAppsCaptor.capture(),
- finishedCaptor.capture());
- assertEquals(1, appsCaptor.getValue().length);
- assertEquals(mMockLeash, appsCaptor.getValue()[0].leash);
- }
-
- @Test
- public void testRemovedBeforeStarted() throws Exception {
- final WindowState win = createTestWindow();
- final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
- win.mActivityRecord,
- new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
- adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
- mFinishedCallback);
- win.mActivityRecord.removeImmediately();
- mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
- verify(mMockRunner, never()).onAnimationStart(anyInt(), any(), any(), any(), any());
- verify(mMockRunner).onAnimationCancelled();
- verify(mFinishedCallback).onAnimationFinished(eq(ANIMATION_TYPE_APP_TRANSITION),
- eq(adapter));
- }
-
- @Test
- public void testOpeningTaskWithTopFinishingActivity() {
- final WindowState win = createTestWindow();
- final Task task = win.getTask();
- final ActivityRecord topFinishing = new ActivityBuilder(mAtm).setTask(task).build();
- // Now the task contains:
- // - Activity[1] (top, finishing, no window)
- // - Activity[0] (has window)
- topFinishing.finishing = true;
- spyOn(mDisplayContent.mAppTransition);
- doReturn(mController).when(mDisplayContent.mAppTransition).getRemoteAnimationController();
- task.applyAnimationUnchecked(null /* lp */, true /* enter */, TRANSIT_OLD_TASK_OPEN,
- false /* isVoiceInteraction */, null /* sources */);
- mController.goodToGo(TRANSIT_OLD_TASK_OPEN);
- waitUntilWindowAnimatorIdle();
- final ArgumentCaptor<RemoteAnimationTarget[]> appsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- try {
- verify(mMockRunner).onAnimationStart(eq(TRANSIT_OLD_TASK_OPEN),
- appsCaptor.capture(), any(), any(), any());
- } catch (RemoteException ignored) {
- }
- assertEquals(1, appsCaptor.getValue().length);
- assertEquals(RemoteAnimationTarget.MODE_OPENING, appsCaptor.getValue()[0].mode);
- }
-
- @Test
- public void testChangeToSmallerSize() throws Exception {
- final WindowState win = createTestWindow();
- mDisplayContent.mChangingContainers.add(win.mActivityRecord);
- try {
- final RemoteAnimationRecord record = mController.createRemoteAnimationRecord(
- win.mActivityRecord, new Point(50, 100), null, new Rect(50, 100, 150, 150),
- new Rect(0, 0, 200, 200), false);
- assertNotNull(record.mThumbnailAdapter);
- ((AnimationAdapter) record.mAdapter)
- .startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_WINDOW_ANIMATION,
- mFinishedCallback);
- ((AnimationAdapter) record.mThumbnailAdapter).startAnimation(mMockThumbnailLeash,
- mMockTransaction, ANIMATION_TYPE_WINDOW_ANIMATION, mThumbnailFinishedCallback);
- mController.goodToGo(TRANSIT_OLD_TASK_CHANGE_WINDOWING_MODE);
- waitUntilWindowAnimatorIdle();
- final ArgumentCaptor<RemoteAnimationTarget[]> appsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> wallpapersCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> nonAppsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<IRemoteAnimationFinishedCallback> finishedCaptor =
- ArgumentCaptor.forClass(IRemoteAnimationFinishedCallback.class);
- verify(mMockRunner).onAnimationStart(eq(TRANSIT_OLD_TASK_CHANGE_WINDOWING_MODE),
- appsCaptor.capture(), wallpapersCaptor.capture(), nonAppsCaptor.capture(),
- finishedCaptor.capture());
- assertEquals(1, appsCaptor.getValue().length);
- final RemoteAnimationTarget app = appsCaptor.getValue()[0];
- assertEquals(RemoteAnimationTarget.MODE_CHANGING, app.mode);
- assertEquals(new Point(50, 100), app.position);
- assertEquals(new Rect(50, 100, 150, 150), app.sourceContainerBounds);
- assertEquals(new Rect(0, 0, 200, 200), app.startBounds);
- assertEquals(mMockLeash, app.leash);
- assertEquals(mMockThumbnailLeash, app.startLeash);
- assertEquals(false, app.isTranslucent);
- verify(mMockTransaction).setPosition(
- mMockLeash, app.startBounds.left, app.startBounds.top);
- verify(mMockTransaction).setWindowCrop(
- mMockLeash, app.startBounds.width(), app.startBounds.height());
- verify(mMockTransaction).setPosition(mMockThumbnailLeash, 0, 0);
- verify(mMockTransaction).setWindowCrop(mMockThumbnailLeash, app.startBounds.width(),
- app.startBounds.height());
-
- finishedCaptor.getValue().onAnimationFinished();
- verify(mFinishedCallback).onAnimationFinished(eq(ANIMATION_TYPE_WINDOW_ANIMATION),
- eq(record.mAdapter));
- verify(mThumbnailFinishedCallback).onAnimationFinished(
- eq(ANIMATION_TYPE_WINDOW_ANIMATION), eq(record.mThumbnailAdapter));
- } finally {
- mDisplayContent.mChangingContainers.clear();
- }
- }
-
- @Test
- public void testChangeTolargerSize() throws Exception {
- final WindowState win = createTestWindow();
- mDisplayContent.mChangingContainers.add(win.mActivityRecord);
- try {
- final RemoteAnimationRecord record = mController.createRemoteAnimationRecord(
- win.mActivityRecord, new Point(0, 0), null, new Rect(0, 0, 200, 200),
- new Rect(50, 100, 150, 150), false);
- assertNotNull(record.mThumbnailAdapter);
- ((AnimationAdapter) record.mAdapter)
- .startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_WINDOW_ANIMATION,
- mFinishedCallback);
- ((AnimationAdapter) record.mThumbnailAdapter).startAnimation(mMockThumbnailLeash,
- mMockTransaction, ANIMATION_TYPE_WINDOW_ANIMATION, mThumbnailFinishedCallback);
- mController.goodToGo(TRANSIT_OLD_TASK_CHANGE_WINDOWING_MODE);
- waitUntilWindowAnimatorIdle();
- final ArgumentCaptor<RemoteAnimationTarget[]> appsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> wallpapersCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> nonAppsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<IRemoteAnimationFinishedCallback> finishedCaptor =
- ArgumentCaptor.forClass(IRemoteAnimationFinishedCallback.class);
- verify(mMockRunner).onAnimationStart(eq(TRANSIT_OLD_TASK_CHANGE_WINDOWING_MODE),
- appsCaptor.capture(), wallpapersCaptor.capture(), nonAppsCaptor.capture(),
- finishedCaptor.capture());
- assertEquals(1, appsCaptor.getValue().length);
- final RemoteAnimationTarget app = appsCaptor.getValue()[0];
- assertEquals(RemoteAnimationTarget.MODE_CHANGING, app.mode);
- assertEquals(new Point(0, 0), app.position);
- assertEquals(new Rect(0, 0, 200, 200), app.sourceContainerBounds);
- assertEquals(new Rect(50, 100, 150, 150), app.startBounds);
- assertEquals(mMockLeash, app.leash);
- assertEquals(mMockThumbnailLeash, app.startLeash);
- assertEquals(false, app.isTranslucent);
- verify(mMockTransaction).setPosition(
- mMockLeash, app.startBounds.left, app.startBounds.top);
- verify(mMockTransaction).setWindowCrop(
- mMockLeash, app.startBounds.width(), app.startBounds.height());
- verify(mMockTransaction).setPosition(mMockThumbnailLeash, 0, 0);
- verify(mMockTransaction).setWindowCrop(mMockThumbnailLeash, app.startBounds.width(),
- app.startBounds.height());
-
- finishedCaptor.getValue().onAnimationFinished();
- verify(mFinishedCallback).onAnimationFinished(eq(ANIMATION_TYPE_WINDOW_ANIMATION),
- eq(record.mAdapter));
- verify(mThumbnailFinishedCallback).onAnimationFinished(
- eq(ANIMATION_TYPE_WINDOW_ANIMATION), eq(record.mThumbnailAdapter));
- } finally {
- mDisplayContent.mChangingContainers.clear();
- }
- }
-
- @Test
- public void testChangeToDifferentPosition() throws Exception {
- final WindowState win = createTestWindow();
- mDisplayContent.mChangingContainers.add(win.mActivityRecord);
- try {
- final RemoteAnimationRecord record = mController.createRemoteAnimationRecord(
- win.mActivityRecord, new Point(100, 100), null, new Rect(150, 150, 400, 400),
- new Rect(50, 100, 150, 150), false);
- assertNotNull(record.mThumbnailAdapter);
- ((AnimationAdapter) record.mAdapter)
- .startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_WINDOW_ANIMATION,
- mFinishedCallback);
- ((AnimationAdapter) record.mThumbnailAdapter).startAnimation(mMockThumbnailLeash,
- mMockTransaction, ANIMATION_TYPE_WINDOW_ANIMATION, mThumbnailFinishedCallback);
- mController.goodToGo(TRANSIT_OLD_TASK_CHANGE_WINDOWING_MODE);
- waitUntilWindowAnimatorIdle();
- final ArgumentCaptor<RemoteAnimationTarget[]> appsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> wallpapersCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> nonAppsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<IRemoteAnimationFinishedCallback> finishedCaptor =
- ArgumentCaptor.forClass(IRemoteAnimationFinishedCallback.class);
- verify(mMockRunner).onAnimationStart(eq(TRANSIT_OLD_TASK_CHANGE_WINDOWING_MODE),
- appsCaptor.capture(), wallpapersCaptor.capture(), nonAppsCaptor.capture(),
- finishedCaptor.capture());
- assertEquals(1, appsCaptor.getValue().length);
- final RemoteAnimationTarget app = appsCaptor.getValue()[0];
- assertEquals(RemoteAnimationTarget.MODE_CHANGING, app.mode);
- assertEquals(new Point(100, 100), app.position);
- assertEquals(new Rect(150, 150, 400, 400), app.sourceContainerBounds);
- assertEquals(new Rect(50, 100, 150, 150), app.startBounds);
- assertEquals(mMockLeash, app.leash);
- assertEquals(mMockThumbnailLeash, app.startLeash);
- assertEquals(false, app.isTranslucent);
- verify(mMockTransaction).setPosition(
- mMockLeash, app.position.x + app.startBounds.left - app.screenSpaceBounds.left,
- app.position.y + app.startBounds.top - app.screenSpaceBounds.top);
- verify(mMockTransaction).setWindowCrop(
- mMockLeash, app.startBounds.width(), app.startBounds.height());
- verify(mMockTransaction).setPosition(mMockThumbnailLeash, 0, 0);
- verify(mMockTransaction).setWindowCrop(mMockThumbnailLeash, app.startBounds.width(),
- app.startBounds.height());
-
- finishedCaptor.getValue().onAnimationFinished();
- verify(mFinishedCallback).onAnimationFinished(eq(ANIMATION_TYPE_WINDOW_ANIMATION),
- eq(record.mAdapter));
- verify(mThumbnailFinishedCallback).onAnimationFinished(
- eq(ANIMATION_TYPE_WINDOW_ANIMATION), eq(record.mThumbnailAdapter));
- } finally {
- mDisplayContent.mChangingContainers.clear();
- }
- }
-
- @Test
- public void testWallpaperIncluded_expectTarget() throws Exception {
- final WindowToken wallpaperWindowToken = new WallpaperWindowToken(mWm, mock(IBinder.class),
- true, mDisplayContent, true /* ownerCanManageAppTokens */);
- spyOn(mDisplayContent.mWallpaperController);
- doReturn(true).when(mDisplayContent.mWallpaperController).isWallpaperVisible();
- final WindowState win = createTestWindow();
- mDisplayContent.mOpeningApps.add(win.mActivityRecord);
- try {
- final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
- win.mActivityRecord,
- new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
- adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
- mFinishedCallback);
- mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
- waitUntilWindowAnimatorIdle();
- final ArgumentCaptor<RemoteAnimationTarget[]> appsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> wallpapersCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> nonAppsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<IRemoteAnimationFinishedCallback> finishedCaptor =
- ArgumentCaptor.forClass(IRemoteAnimationFinishedCallback.class);
- verify(mMockRunner).onAnimationStart(eq(TRANSIT_OLD_ACTIVITY_OPEN),
- appsCaptor.capture(), wallpapersCaptor.capture(), nonAppsCaptor.capture(),
- finishedCaptor.capture());
- assertEquals(1, wallpapersCaptor.getValue().length);
- } finally {
- mDisplayContent.mOpeningApps.clear();
- }
- }
-
- @Test
- public void testWallpaperAnimatorCanceled_expectAnimationKeepsRunning() throws Exception {
- final WindowToken wallpaperWindowToken = new WallpaperWindowToken(mWm, mock(IBinder.class),
- true, mDisplayContent, true /* ownerCanManageAppTokens */);
- spyOn(mDisplayContent.mWallpaperController);
- doReturn(true).when(mDisplayContent.mWallpaperController).isWallpaperVisible();
- final WindowState win = createTestWindow();
- mDisplayContent.mOpeningApps.add(win.mActivityRecord);
- try {
- final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
- win.mActivityRecord,
- new Point(50, 100), null, new Rect(50, 100, 150, 150), null, false).mAdapter;
- adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
- mFinishedCallback);
- mController.goodToGo(TRANSIT_OLD_ACTIVITY_OPEN);
- waitUntilWindowAnimatorIdle();
- final ArgumentCaptor<RemoteAnimationTarget[]> appsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> wallpapersCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> nonAPpsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<IRemoteAnimationFinishedCallback> finishedCaptor =
- ArgumentCaptor.forClass(IRemoteAnimationFinishedCallback.class);
- verify(mMockRunner).onAnimationStart(eq(TRANSIT_OLD_ACTIVITY_OPEN),
- appsCaptor.capture(), wallpapersCaptor.capture(), nonAPpsCaptor.capture(),
- finishedCaptor.capture());
- assertEquals(1, wallpapersCaptor.getValue().length);
-
- // Cancel the wallpaper window animator and ensure the runner is not canceled
- wallpaperWindowToken.cancelAnimation();
- verify(mMockRunner, never()).onAnimationCancelled();
- } finally {
- mDisplayContent.mOpeningApps.clear();
- }
- }
-
- @Test
- public void testNonAppIncluded_keygaurdGoingAway() throws Exception {
- final WindowState win = createTestWindow();
- mDisplayContent.mOpeningApps.add(win.mActivityRecord);
- // Add overlay window hidden by the keyguard.
- final WindowState overlayWin = createAppOverlayWindow();
- overlayWin.hide(false /* doAnimation */, false /* requestAnim */);
- try {
- final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
- win.mActivityRecord, new Point(50, 100), null,
- new Rect(50, 100, 150, 150), null, false).mAdapter;
- adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
- mFinishedCallback);
- mController.goodToGo(TRANSIT_OLD_KEYGUARD_GOING_AWAY);
- waitUntilWindowAnimatorIdle();
- final ArgumentCaptor<RemoteAnimationTarget[]> appsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> wallpapersCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> nonAppsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<IRemoteAnimationFinishedCallback> finishedCaptor =
- ArgumentCaptor.forClass(IRemoteAnimationFinishedCallback.class);
- verify(mMockRunner).onAnimationStart(eq(TRANSIT_OLD_KEYGUARD_GOING_AWAY),
- appsCaptor.capture(), wallpapersCaptor.capture(), nonAppsCaptor.capture(),
- finishedCaptor.capture());
- assertEquals(1, appsCaptor.getValue().length);
- final RemoteAnimationTarget app = appsCaptor.getValue()[0];
- assertEquals(new Point(50, 100), app.position);
- assertEquals(new Rect(50, 100, 150, 150), app.sourceContainerBounds);
- assertEquals(win.mActivityRecord.getPrefixOrderIndex(), app.prefixOrderIndex);
- assertEquals(win.mActivityRecord.getTask().mTaskId, app.taskId);
- assertEquals(mMockLeash, app.leash);
- assertEquals(false, app.isTranslucent);
- verify(mMockTransaction).setPosition(mMockLeash, app.position.x, app.position.y);
- verify(mMockTransaction).setWindowCrop(mMockLeash, 100, 50);
-
- finishedCaptor.getValue().onAnimationFinished();
- verify(mFinishedCallback).onAnimationFinished(eq(ANIMATION_TYPE_APP_TRANSITION),
- eq(adapter));
- assertEquals(1, nonAppsCaptor.getValue().length);
- } finally {
- mDisplayContent.mOpeningApps.clear();
- }
- }
-
- @Test
- public void testNonAppIncluded_keygaurdGoingAwayToWallpaper() throws Exception {
- final WindowToken wallpaperWindowToken = new WallpaperWindowToken(mWm, mock(IBinder.class),
- true, mDisplayContent, true /* ownerCanManageAppTokens */);
- spyOn(mDisplayContent.mWallpaperController);
- doReturn(true).when(mDisplayContent.mWallpaperController).isWallpaperVisible();
- final WindowState win = createTestWindow();
- mDisplayContent.mOpeningApps.add(win.mActivityRecord);
- // Add overlay window hidden by the keyguard.
- final WindowState overlayWin = createAppOverlayWindow();
- overlayWin.hide(false /* doAnimation */, false /* requestAnim */);
- try {
- final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
- win.mActivityRecord, new Point(50, 100), null,
- new Rect(50, 100, 150, 150), null, false).mAdapter;
- adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
- mFinishedCallback);
- mController.goodToGo(TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER);
- waitUntilWindowAnimatorIdle();
- final ArgumentCaptor<RemoteAnimationTarget[]> appsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> wallpapersCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<RemoteAnimationTarget[]> nonAppsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<IRemoteAnimationFinishedCallback> finishedCaptor =
- ArgumentCaptor.forClass(IRemoteAnimationFinishedCallback.class);
- verify(mMockRunner).onAnimationStart(eq(TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER),
- appsCaptor.capture(), wallpapersCaptor.capture(), nonAppsCaptor.capture(),
- finishedCaptor.capture());
- assertEquals(1, wallpapersCaptor.getValue().length);
- assertEquals(1, nonAppsCaptor.getValue().length);
- } finally {
- mDisplayContent.mOpeningApps.clear();
- }
- }
-
- @Test
- public void testNonAppTarget_sendNavBar() throws Exception {
- final int transit = TRANSIT_OLD_TASK_OPEN;
- final AnimationAdapter adapter = setupForNonAppTargetNavBar(transit, true);
-
- final ArgumentCaptor<RemoteAnimationTarget[]> nonAppsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- final ArgumentCaptor<IRemoteAnimationFinishedCallback> finishedCaptor =
- ArgumentCaptor.forClass(IRemoteAnimationFinishedCallback.class);
- verify(mMockRunner).onAnimationStart(eq(transit), any(), any(),
- nonAppsCaptor.capture(), finishedCaptor.capture());
- boolean containNavTarget = false;
- for (int i = 0; i < nonAppsCaptor.getValue().length; i++) {
- if (nonAppsCaptor.getValue()[0].windowType == TYPE_NAVIGATION_BAR) {
- containNavTarget = true;
- break;
- }
- }
- assertTrue(containNavTarget);
- assertEquals(1, mController.mPendingNonAppAnimations.size());
- final NonAppWindowAnimationAdapter nonAppAdapter =
- mController.mPendingNonAppAnimations.get(0);
- spyOn(nonAppAdapter.getLeashFinishedCallback());
-
- finishedCaptor.getValue().onAnimationFinished();
- verify(mFinishedCallback).onAnimationFinished(eq(ANIMATION_TYPE_APP_TRANSITION),
- eq(adapter));
- verify(nonAppAdapter.getLeashFinishedCallback())
- .onAnimationFinished(nonAppAdapter.getLastAnimationType(), nonAppAdapter);
- }
-
- @Test
- public void testNonAppTarget_notSendNavBar_notAttachToApp() throws Exception {
- final int transit = TRANSIT_OLD_TASK_OPEN;
- setupForNonAppTargetNavBar(transit, false);
-
- final ArgumentCaptor<RemoteAnimationTarget[]> nonAppsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- verify(mMockRunner).onAnimationStart(eq(transit),
- any(), any(), nonAppsCaptor.capture(), any());
- for (int i = 0; i < nonAppsCaptor.getValue().length; i++) {
- if (nonAppsCaptor.getValue()[0].windowType == TYPE_NAVIGATION_BAR) {
- fail("Non-app animation target must not contain navbar");
- }
- }
- }
-
- @Test
- public void testNonAppTarget_notSendNavBar_controlledByFadeRotation() throws Exception {
- final AsyncRotationController mockController =
- mock(AsyncRotationController.class);
- doReturn(mockController).when(mDisplayContent).getAsyncRotationController();
- final int transit = TRANSIT_OLD_TASK_OPEN;
- setupForNonAppTargetNavBar(transit, true);
-
- final ArgumentCaptor<RemoteAnimationTarget[]> nonAppsCaptor =
- ArgumentCaptor.forClass(RemoteAnimationTarget[].class);
- verify(mMockRunner).onAnimationStart(eq(transit),
- any(), any(), nonAppsCaptor.capture(), any());
- for (int i = 0; i < nonAppsCaptor.getValue().length; i++) {
- if (nonAppsCaptor.getValue()[0].windowType == TYPE_NAVIGATION_BAR) {
- fail("Non-app animation target must not contain navbar");
- }
- }
- }
-
- private AnimationAdapter setupForNonAppTargetNavBar(int transit, boolean shouldAttachNavBar) {
- final WindowState win = createTestWindow();
- mDisplayContent.mOpeningApps.add(win.mActivityRecord);
- final WindowState navBar = newWindowBuilder("NavigationBar", TYPE_NAVIGATION_BAR).build();
- mDisplayContent.getDisplayPolicy().addWindowLw(navBar, navBar.mAttrs);
- final DisplayPolicy policy = mDisplayContent.getDisplayPolicy();
- spyOn(policy);
- doReturn(shouldAttachNavBar).when(policy).shouldAttachNavBarToAppDuringTransition();
-
- final AnimationAdapter adapter = mController.createRemoteAnimationRecord(
- win.mActivityRecord, new Point(50, 100), null,
- new Rect(50, 100, 150, 150), null, false).mAdapter;
- adapter.startAnimation(mMockLeash, mMockTransaction, ANIMATION_TYPE_APP_TRANSITION,
- mFinishedCallback);
- mController.goodToGo(transit);
- waitUntilWindowAnimatorIdle();
- return adapter;
- }
-
- private static void verifyNoMoreInteractionsExceptAsBinder(IInterface binder) {
- verify(binder, atLeast(0)).asBinder();
- verifyNoMoreInteractions(binder);
- }
-
- private WindowState createTestWindow() {
- return newWindowBuilder("testWin", TYPE_BASE_APPLICATION).build();
- }
-}
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java
index 546ecc6e38a5..ab76ae8e378a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java
@@ -29,14 +29,14 @@ import static android.view.WindowManager.TRANSIT_OPEN;
import static android.window.TaskFragmentOperation.OP_TYPE_CREATE_OR_MOVE_TASK_FRAGMENT_DECOR_SURFACE;
import static android.window.TaskFragmentOperation.OP_TYPE_CREATE_TASK_FRAGMENT;
import static android.window.TaskFragmentOperation.OP_TYPE_DELETE_TASK_FRAGMENT;
+import static android.window.TaskFragmentOperation.OP_TYPE_PRIVILEGED_REORDER_TO_BOTTOM_OF_TASK;
+import static android.window.TaskFragmentOperation.OP_TYPE_PRIVILEGED_REORDER_TO_TOP_OF_TASK;
+import static android.window.TaskFragmentOperation.OP_TYPE_PRIVILEGED_SET_CAN_AFFECT_SYSTEM_UI_FLAGS;
import static android.window.TaskFragmentOperation.OP_TYPE_REMOVE_TASK_FRAGMENT_DECOR_SURFACE;
-import static android.window.TaskFragmentOperation.OP_TYPE_REORDER_TO_BOTTOM_OF_TASK;
import static android.window.TaskFragmentOperation.OP_TYPE_REORDER_TO_FRONT;
-import static android.window.TaskFragmentOperation.OP_TYPE_REORDER_TO_TOP_OF_TASK;
import static android.window.TaskFragmentOperation.OP_TYPE_REPARENT_ACTIVITY_TO_TASK_FRAGMENT;
import static android.window.TaskFragmentOperation.OP_TYPE_SET_ADJACENT_TASK_FRAGMENTS;
import static android.window.TaskFragmentOperation.OP_TYPE_SET_ANIMATION_PARAMS;
-import static android.window.TaskFragmentOperation.OP_TYPE_SET_CAN_AFFECT_SYSTEM_UI_FLAGS;
import static android.window.TaskFragmentOperation.OP_TYPE_SET_DIM_ON_TASK;
import static android.window.TaskFragmentOperation.OP_TYPE_START_ACTIVITY_IN_TASK_FRAGMENT;
import static android.window.TaskFragmentOrganizer.KEY_ERROR_CALLBACK_OP_TYPE;
@@ -1821,7 +1821,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase {
// Reorder TaskFragment to bottom
final TaskFragmentOperation operation = new TaskFragmentOperation.Builder(
- OP_TYPE_REORDER_TO_BOTTOM_OF_TASK).build();
+ OP_TYPE_PRIVILEGED_REORDER_TO_BOTTOM_OF_TASK).build();
mTransaction.addTaskFragmentOperation(tf1.getFragmentToken(), operation);
assertApplyTransactionAllowed(mTransaction);
@@ -1858,7 +1858,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase {
// Reorder TaskFragment to top
final TaskFragmentOperation operation = new TaskFragmentOperation.Builder(
- OP_TYPE_REORDER_TO_TOP_OF_TASK).build();
+ OP_TYPE_PRIVILEGED_REORDER_TO_TOP_OF_TASK).build();
mTransaction.addTaskFragmentOperation(tf0.getFragmentToken(), operation);
assertApplyTransactionAllowed(mTransaction);
@@ -1903,13 +1903,13 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase {
@Test
public void testApplyTransaction_reorderToBottomOfTask_failsIfNotSystemOrganizer() {
testApplyTransaction_reorder_failsIfNotSystemOrganizer_common(
- OP_TYPE_REORDER_TO_BOTTOM_OF_TASK);
+ OP_TYPE_PRIVILEGED_REORDER_TO_BOTTOM_OF_TASK);
}
@Test
public void testApplyTransaction_reorderToTopOfTask_failsIfNotSystemOrganizer() {
testApplyTransaction_reorder_failsIfNotSystemOrganizer_common(
- OP_TYPE_REORDER_TO_TOP_OF_TASK);
+ OP_TYPE_PRIVILEGED_REORDER_TO_TOP_OF_TASK);
}
@Test
@@ -1922,7 +1922,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase {
// Setting the flag to false.
TaskFragmentOperation operation = new TaskFragmentOperation.Builder(
- OP_TYPE_SET_CAN_AFFECT_SYSTEM_UI_FLAGS).setBooleanValue(false).build();
+ OP_TYPE_PRIVILEGED_SET_CAN_AFFECT_SYSTEM_UI_FLAGS).setBooleanValue(false).build();
mTransaction.addTaskFragmentOperation(tf.getFragmentToken(), operation);
assertApplyTransactionAllowed(mTransaction);
@@ -1931,7 +1931,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase {
// Setting the flag back to true.
operation = new TaskFragmentOperation.Builder(
- OP_TYPE_SET_CAN_AFFECT_SYSTEM_UI_FLAGS).setBooleanValue(true).build();
+ OP_TYPE_PRIVILEGED_SET_CAN_AFFECT_SYSTEM_UI_FLAGS).setBooleanValue(true).build();
mTransaction.addTaskFragmentOperation(tf.getFragmentToken(), operation);
assertApplyTransactionAllowed(mTransaction);
@@ -1945,7 +1945,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase {
final TaskFragment tf = createTaskFragment(task);
TaskFragmentOperation operation = new TaskFragmentOperation.Builder(
- OP_TYPE_SET_CAN_AFFECT_SYSTEM_UI_FLAGS).setBooleanValue(false).build();
+ OP_TYPE_PRIVILEGED_SET_CAN_AFFECT_SYSTEM_UI_FLAGS).setBooleanValue(false).build();
mTransaction
.addTaskFragmentOperation(tf.getFragmentToken(), operation)
.setErrorCallbackToken(mErrorToken);
@@ -1955,7 +1955,7 @@ public class TaskFragmentOrganizerControllerTest extends WindowTestsBase {
// The pending event will be dispatched on the handler (from requestTraversal).
waitHandlerIdle(mWm.mAnimationHandler);
- assertTaskFragmentErrorTransaction(OP_TYPE_SET_CAN_AFFECT_SYSTEM_UI_FLAGS,
+ assertTaskFragmentErrorTransaction(OP_TYPE_PRIVILEGED_SET_CAN_AFFECT_SYSTEM_UI_FLAGS,
SecurityException.class);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java b/services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java
deleted file mode 100644
index 849072e133ae..000000000000
--- a/services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm;
-
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.mockito.ArgumentMatchers.any;
-
-import android.hardware.HardwareBuffer;
-import android.platform.test.annotations.Presubmit;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.server.testutils.StubTransaction;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * Test class for {@link TaskSnapshotSurface}.
- *
- * Build/Install/Run:
- * atest WmTests:WindowContainerThumbnailTest
- *
- */
-@SmallTest
-@Presubmit
-@RunWith(WindowTestRunner.class)
-public class WindowContainerThumbnailTest extends WindowTestsBase {
- private WindowContainerThumbnail buildThumbnail() {
- final HardwareBuffer buffer = HardwareBuffer.create(1, 1, HardwareBuffer.RGBA_8888,
- 1, HardwareBuffer.USAGE_CPU_READ_RARELY);
- final ActivityRecord mockAr = mock(ActivityRecord.class);
- when(mockAr.getPendingTransaction()).thenReturn(new StubTransaction());
- when(mockAr.makeChildSurface(any())).thenReturn(new MockSurfaceControlBuilder());
- when(mockAr.makeSurface()).thenReturn(new MockSurfaceControlBuilder());
- return new WindowContainerThumbnail(new StubTransaction(), mockAr, buffer,
- mock(SurfaceAnimator.class));
- }
-
- @Test
- public void testDestroy_nullsSurface() {
- final WindowContainerThumbnail t = buildThumbnail();
- assertNotNull(t.getSurfaceControl());
- t.destroy();
- assertNull(t.getSurfaceControl());
- }
-}
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
index a718c06cc2fa..59ee2f5c8e9f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
@@ -1281,6 +1281,7 @@ public class WindowStateTests extends WindowTestsBase {
// Simulate app plays closing transition to app2.
app.mActivityRecord.commitVisibility(false, false);
+ mDisplayContent.computeImeTarget(true /* updateImeTarget */);
assertTrue(app.mActivityRecord.mLastImeShown);
// Verify the IME insets is visible on app, but not for app2 during app task switching.
diff --git a/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt b/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt
index b22e42d1ab89..6caf3f973618 100644
--- a/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt
+++ b/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt
@@ -358,6 +358,34 @@ class InputManagerServiceTests {
verifyNoMoreInteractions(listener)
}
+ @Test
+ fun testKeyEventsForwardedToFocusedWindow_whenWmAllows() {
+ service.systemRunning()
+ overrideSendActionKeyEventsToFocusedWindow(
+ /* hasPermission = */false,
+ /* hasPrivateFlag = */false
+ )
+ whenever(wmCallbacks.interceptKeyBeforeDispatching(any(), any(), anyInt())).thenReturn(0)
+
+ val event = KeyEvent( /* downTime= */0, /* eventTime= */0, KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_SPACE, /* repeat= */0, KeyEvent.META_CTRL_ON)
+ assertEquals(0, service.interceptKeyBeforeDispatching(null, event, 0))
+ }
+
+ @Test
+ fun testKeyEventsNotForwardedToFocusedWindow_whenWmConsumes() {
+ service.systemRunning()
+ overrideSendActionKeyEventsToFocusedWindow(
+ /* hasPermission = */false,
+ /* hasPrivateFlag = */false
+ )
+ whenever(wmCallbacks.interceptKeyBeforeDispatching(any(), any(), anyInt())).thenReturn(-1)
+
+ val event = KeyEvent( /* downTime= */0, /* eventTime= */0, KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_SPACE, /* repeat= */0, KeyEvent.META_CTRL_ON)
+ assertEquals(-1, service.interceptKeyBeforeDispatching(null, event, 0))
+ }
+
private class AutoClosingVirtualDisplays(val displays: List<VirtualDisplay>) : AutoCloseable {
operator fun get(i: Int): VirtualDisplay = displays[i]
diff --git a/tests/Tracing/src/com/android/internal/protolog/ProtoLogConfigurationServiceTest.java b/tests/Tracing/src/com/android/internal/protolog/ProtoLogConfigurationServiceTest.java
index a3d03a8278ed..3be725101252 100644
--- a/tests/Tracing/src/com/android/internal/protolog/ProtoLogConfigurationServiceTest.java
+++ b/tests/Tracing/src/com/android/internal/protolog/ProtoLogConfigurationServiceTest.java
@@ -38,6 +38,8 @@ import android.tools.traces.io.ResultReader;
import android.tools.traces.io.ResultWriter;
import android.tools.traces.monitors.PerfettoTraceMonitor;
+import com.android.internal.protolog.IProtoLogConfigurationService.RegisterClientArgs;
+
import com.google.common.truth.Truth;
import com.google.protobuf.InvalidProtocolBufferException;
@@ -152,10 +154,9 @@ public class ProtoLogConfigurationServiceTest {
public void canRegisterClientWithGroupsOnly() throws RemoteException {
final ProtoLogConfigurationService service = new ProtoLogConfigurationServiceImpl();
- final ProtoLogConfigurationServiceImpl.RegisterClientArgs args =
- new ProtoLogConfigurationServiceImpl.RegisterClientArgs()
- .setGroups(new ProtoLogConfigurationServiceImpl.RegisterClientArgs
- .GroupConfig(TEST_GROUP, true));
+ final RegisterClientArgs args = new RegisterClientArgs();
+ args.groups = new String[] { TEST_GROUP };
+ args.groupsDefaultLogcatStatus = new boolean[] { true };
service.registerClient(mMockClient, args);
Truth.assertThat(service.isLoggingToLogcat(TEST_GROUP)).isTrue();
@@ -167,11 +168,11 @@ public class ProtoLogConfigurationServiceTest {
throws RemoteException, InvalidProtocolBufferException {
final ProtoLogConfigurationService service = new ProtoLogConfigurationServiceImpl();
- final ProtoLogConfigurationServiceImpl.RegisterClientArgs args =
- new ProtoLogConfigurationServiceImpl.RegisterClientArgs()
- .setGroups(new ProtoLogConfigurationServiceImpl.RegisterClientArgs
- .GroupConfig(TEST_GROUP, true))
- .setViewerConfigFile(mViewerConfigFile.getAbsolutePath());
+ final RegisterClientArgs args = new RegisterClientArgs();
+ args.groups = new String[] { TEST_GROUP };
+ args.groupsDefaultLogcatStatus = new boolean[] { true };
+ args.viewerConfigFile = mViewerConfigFile.getAbsolutePath();
+
service.registerClient(mMockClient, args);
service.registerClient(mSecondMockClient, args);
@@ -204,11 +205,11 @@ public class ProtoLogConfigurationServiceTest {
Mockito.mock(ProtoLogConfigurationServiceImpl.ViewerConfigFileTracer.class);
final ProtoLogConfigurationService service = new ProtoLogConfigurationServiceImpl(tracer);
- final ProtoLogConfigurationServiceImpl.RegisterClientArgs args =
- new ProtoLogConfigurationServiceImpl.RegisterClientArgs()
- .setGroups(new ProtoLogConfigurationServiceImpl.RegisterClientArgs
- .GroupConfig(TEST_GROUP, true))
- .setViewerConfigFile(mViewerConfigFile.getAbsolutePath());
+ final RegisterClientArgs args = new RegisterClientArgs();
+ args.groups = new String[] { TEST_GROUP };
+ args.groupsDefaultLogcatStatus = new boolean[] { true };
+ args.viewerConfigFile = mViewerConfigFile.getAbsolutePath();
+
service.registerClient(mMockClient, args);
service.registerClient(mSecondMockClient, args);
@@ -227,9 +228,9 @@ public class ProtoLogConfigurationServiceTest {
public void sendEnableLoggingToLogcatToClient() throws RemoteException {
final var service = new ProtoLogConfigurationServiceImpl();
- final var args = new ProtoLogConfigurationServiceImpl.RegisterClientArgs()
- .setGroups(new ProtoLogConfigurationServiceImpl.RegisterClientArgs
- .GroupConfig(TEST_GROUP, false));
+ final RegisterClientArgs args = new RegisterClientArgs();
+ args.groups = new String[] { TEST_GROUP };
+ args.groupsDefaultLogcatStatus = new boolean[] { false };
service.registerClient(mMockClient, args);
Truth.assertThat(service.isLoggingToLogcat(TEST_GROUP)).isFalse();
@@ -244,10 +245,9 @@ public class ProtoLogConfigurationServiceTest {
public void sendDisableLoggingToLogcatToClient() throws RemoteException {
final ProtoLogConfigurationService service = new ProtoLogConfigurationServiceImpl();
- final ProtoLogConfigurationServiceImpl.RegisterClientArgs args =
- new ProtoLogConfigurationServiceImpl.RegisterClientArgs()
- .setGroups(new ProtoLogConfigurationServiceImpl.RegisterClientArgs
- .GroupConfig(TEST_GROUP, true));
+ final RegisterClientArgs args = new RegisterClientArgs();
+ args.groups = new String[] { TEST_GROUP };
+ args.groupsDefaultLogcatStatus = new boolean[] { true };
service.registerClient(mMockClient, args);
Truth.assertThat(service.isLoggingToLogcat(TEST_GROUP)).isTrue();
@@ -262,10 +262,10 @@ public class ProtoLogConfigurationServiceTest {
public void doNotSendLoggingToLogcatToClientWithoutRegisteredGroup() throws RemoteException {
final ProtoLogConfigurationService service = new ProtoLogConfigurationServiceImpl();
- final ProtoLogConfigurationServiceImpl.RegisterClientArgs args =
- new ProtoLogConfigurationServiceImpl.RegisterClientArgs()
- .setGroups(new ProtoLogConfigurationServiceImpl.RegisterClientArgs
- .GroupConfig(TEST_GROUP, false));
+ final RegisterClientArgs args = new RegisterClientArgs();
+ args.groups = new String[] { TEST_GROUP };
+ args.groupsDefaultLogcatStatus = new boolean[] { false };
+
service.registerClient(mMockClient, args);
Truth.assertThat(service.isLoggingToLogcat(TEST_GROUP)).isFalse();
@@ -283,10 +283,10 @@ public class ProtoLogConfigurationServiceTest {
service.enableProtoLogToLogcat(TEST_GROUP);
Truth.assertThat(service.isLoggingToLogcat(TEST_GROUP)).isTrue();
- final ProtoLogConfigurationServiceImpl.RegisterClientArgs args =
- new ProtoLogConfigurationServiceImpl.RegisterClientArgs()
- .setGroups(new ProtoLogConfigurationServiceImpl.RegisterClientArgs
- .GroupConfig(TEST_GROUP, false));
+ final RegisterClientArgs args = new RegisterClientArgs();
+ args.groups = new String[] { TEST_GROUP };
+ args.groupsDefaultLogcatStatus = new boolean[] { false };
+
service.registerClient(mMockClient, args);
Mockito.verify(mMockClient).toggleLogcat(eq(true),
diff --git a/tests/testables/tests/src/android/animation/AnimatorTestRuleToolkitTest.kt b/tests/testables/tests/src/android/animation/AnimatorTestRuleToolkitTest.kt
index 993c3fed9d59..2eb8ba1be811 100644
--- a/tests/testables/tests/src/android/animation/AnimatorTestRuleToolkitTest.kt
+++ b/tests/testables/tests/src/android/animation/AnimatorTestRuleToolkitTest.kt
@@ -16,6 +16,7 @@
package android.animation
+import android.content.pm.PackageManager
import android.graphics.Color
import android.platform.test.annotations.MotionTest
import android.view.ViewGroup
@@ -23,11 +24,14 @@ import android.widget.FrameLayout
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.android.internal.dynamicanimation.animation.DynamicAnimation
import com.android.internal.dynamicanimation.animation.SpringAnimation
import com.android.internal.dynamicanimation.animation.SpringForce
import kotlinx.coroutines.test.TestScope
+import org.junit.Assume.assumeFalse
+import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -65,6 +69,16 @@ class AnimatorTestRuleToolkitTest {
bitmapDiffer = screenshotRule,
)
+ @Before
+ fun setUp() {
+ // Do not run on Automotive.
+ assumeFalse(
+ InstrumentationRegistry.getInstrumentation().context.packageManager.hasSystemFeature(
+ PackageManager.FEATURE_AUTOMOTIVE
+ )
+ )
+ }
+
@Test
fun recordFilmstrip_withAnimator() {
val animatedBox = createScene()
@@ -188,12 +202,7 @@ class AnimatorTestRuleToolkitTest {
null
}
return motionRule.recordMotion(
- AnimatorRuleRecordingSpec(
- container,
- motionControl,
- sampleIntervalMs,
- visualCapture,
- ) {
+ AnimatorRuleRecordingSpec(container, motionControl, sampleIntervalMs, visualCapture) {
feature(ViewFeatureCaptures.alpha, "alpha")
}
)
diff --git a/tools/aapt2/cmd/Diff.cpp b/tools/aapt2/cmd/Diff.cpp
index d3750a6100d3..b2b9179d4ffe 100644
--- a/tools/aapt2/cmd/Diff.cpp
+++ b/tools/aapt2/cmd/Diff.cpp
@@ -29,7 +29,8 @@ namespace aapt {
class DiffContext : public IAaptContext {
public:
- DiffContext() : name_mangler_({}), symbol_table_(&name_mangler_) {
+ explicit DiffContext(bool ignore_id_shift)
+ : ignore_id_shift(ignore_id_shift), name_mangler_({}), symbol_table_(&name_mangler_) {
}
PackageType GetPackageType() override {
@@ -71,6 +72,8 @@ class DiffContext : public IAaptContext {
return empty;
}
+ const bool ignore_id_shift;
+
private:
std::string empty_;
StdErrDiagnostics diagnostics_;
@@ -79,7 +82,7 @@ class DiffContext : public IAaptContext {
};
static void EmitDiffLine(const android::Source& source, StringPiece message) {
- std::cerr << source << ": " << message << "\n";
+ std::cout << source << ": " << message << "\n";
}
static bool IsSymbolVisibilityDifferent(const Visibility& vis_a, const Visibility& vis_b) {
@@ -95,8 +98,27 @@ static bool IsIdDiff(const Visibility::Level& level_a, const std::optional<Id>&
return false;
}
+class ZeroingIdVisitor : public DescendingValueVisitor {
+ public:
+ using DescendingValueVisitor::Visit;
+
+ void Visit(Reference* ref) override {
+ if (ref->name) {
+ ref->id.reset();
+ }
+ }
+};
+
+static std::unique_ptr<Value> CloneAndClearIds(const Value* value, LoadedApk* apk) {
+ CloningValueTransformer cloner(&apk->GetResourceTable()->string_pool);
+ auto res = value->Transform(cloner);
+ ZeroingIdVisitor visitor;
+ res->Accept(&visitor);
+ return res;
+}
+
static bool EmitResourceConfigValueDiff(
- IAaptContext* context, LoadedApk* apk_a, const ResourceTablePackageView& pkg_a,
+ DiffContext* context, LoadedApk* apk_a, const ResourceTablePackageView& pkg_a,
const ResourceTableTypeView& type_a, const ResourceTableEntryView& entry_a,
const ResourceConfigValue* config_value_a, LoadedApk* apk_b,
const ResourceTablePackageView& pkg_b, const ResourceTableTypeView& type_b,
@@ -104,6 +126,14 @@ static bool EmitResourceConfigValueDiff(
Value* value_a = config_value_a->value.get();
Value* value_b = config_value_b->value.get();
if (!value_a->Equals(value_b)) {
+ if (context->ignore_id_shift) {
+ // Check if the values are only different because of their IDs
+ auto cleared_a = CloneAndClearIds(value_a, apk_a);
+ auto cleared_b = CloneAndClearIds(value_b, apk_b);
+ if (cleared_a->Equals(cleared_b.get())) {
+ return false;
+ }
+ }
std::stringstream str_stream;
str_stream << "value " << pkg_a.name << ":" << type_a.named_type << "/" << entry_a.name
<< " config='" << config_value_a->config << "' does not match:\n";
@@ -116,7 +146,7 @@ static bool EmitResourceConfigValueDiff(
return false;
}
-static bool EmitResourceEntryDiff(IAaptContext* context, LoadedApk* apk_a,
+static bool EmitResourceEntryDiff(DiffContext* context, LoadedApk* apk_a,
const ResourceTablePackageView& pkg_a,
const ResourceTableTypeView& type_a,
const ResourceTableEntryView& entry_a, LoadedApk* apk_b,
@@ -180,90 +210,96 @@ static bool EmitResourceEntryDiff(IAaptContext* context, LoadedApk* apk_a,
return diff;
}
-static bool EmitResourceTypeDiff(IAaptContext* context, LoadedApk* apk_a,
+static const ResourceTableEntryView* findEntry(const ResourceTableTypeView& type,
+ const ResourceTableEntryView& entry) {
+ auto it = std::ranges::find_if(type.entries, [&](const ResourceTableEntryView& other_entry) {
+ return other_entry.name == entry.name;
+ });
+ return it != std::end(type.entries) ? &*it : nullptr;
+}
+
+static bool EmitResourceTypeDiff(DiffContext* context, LoadedApk* apk_a,
const ResourceTablePackageView& pkg_a,
const ResourceTableTypeView& type_a, LoadedApk* apk_b,
const ResourceTablePackageView& pkg_b,
const ResourceTableTypeView& type_b) {
bool diff = false;
- auto entry_a_iter = type_a.entries.begin();
- auto entry_b_iter = type_b.entries.begin();
- while (entry_a_iter != type_a.entries.end() || entry_b_iter != type_b.entries.end()) {
- if (entry_b_iter == type_b.entries.end()) {
+ std::unordered_set<const ResourceTableEntryView*> found_b_entries;
+ for (auto&& entry_a : type_a.entries) {
+ auto entry_b_iter = findEntry(type_b, entry_a);
+ if (!entry_b_iter) {
// Type A contains a type that type B does not have.
std::stringstream str_stream;
- str_stream << "missing " << pkg_a.name << ":" << type_a.named_type << "/"
- << entry_a_iter->name;
+ str_stream << "missing " << pkg_a.name << ":" << type_a.named_type << "/" << entry_a.name;
EmitDiffLine(apk_a->GetSource(), str_stream.str());
diff = true;
- } else if (entry_a_iter == type_a.entries.end()) {
- // Type B contains a type that type A does not have.
+ continue;
+ }
+ const auto& entry_b = *entry_b_iter;
+ found_b_entries.insert(&entry_b);
+ if (IsSymbolVisibilityDifferent(entry_a.visibility, entry_b.visibility)) {
std::stringstream str_stream;
- str_stream << "new entry " << pkg_b.name << ":" << type_b.named_type << "/"
- << entry_b_iter->name;
+ str_stream << pkg_a.name << ":" << type_a.named_type << "/" << entry_a.name
+ << " has different visibility (";
+ if (entry_b.visibility.staged_api) {
+ str_stream << "STAGED ";
+ }
+ if (entry_b.visibility.level == Visibility::Level::kPublic) {
+ str_stream << "PUBLIC";
+ } else {
+ str_stream << "PRIVATE";
+ }
+ str_stream << " vs ";
+ if (entry_a.visibility.staged_api) {
+ str_stream << "STAGED ";
+ }
+ if (entry_a.visibility.level == Visibility::Level::kPublic) {
+ str_stream << "PUBLIC";
+ } else {
+ str_stream << "PRIVATE";
+ }
+ str_stream << ")";
EmitDiffLine(apk_b->GetSource(), str_stream.str());
diff = true;
- } else {
- const auto& entry_a = *entry_a_iter;
- const auto& entry_b = *entry_b_iter;
- if (IsSymbolVisibilityDifferent(entry_a.visibility, entry_b.visibility)) {
- std::stringstream str_stream;
- str_stream << pkg_a.name << ":" << type_a.named_type << "/" << entry_a.name
- << " has different visibility (";
- if (entry_b.visibility.staged_api) {
- str_stream << "STAGED ";
- }
- if (entry_b.visibility.level == Visibility::Level::kPublic) {
- str_stream << "PUBLIC";
- } else {
- str_stream << "PRIVATE";
- }
- str_stream << " vs ";
- if (entry_a.visibility.staged_api) {
- str_stream << "STAGED ";
- }
- if (entry_a.visibility.level == Visibility::Level::kPublic) {
- str_stream << "PUBLIC";
- } else {
- str_stream << "PRIVATE";
- }
- str_stream << ")";
- EmitDiffLine(apk_b->GetSource(), str_stream.str());
- diff = true;
- } else if (IsIdDiff(entry_a.visibility.level, entry_a.id, entry_b.visibility.level,
- entry_b.id)) {
- std::stringstream str_stream;
- str_stream << pkg_a.name << ":" << type_a.named_type << "/" << entry_a.name
- << " has different public ID (";
- if (entry_b.id) {
- str_stream << "0x" << std::hex << entry_b.id.value();
- } else {
- str_stream << "none";
- }
- str_stream << " vs ";
- if (entry_a.id) {
- str_stream << "0x " << std::hex << entry_a.id.value();
- } else {
- str_stream << "none";
- }
- str_stream << ")";
- EmitDiffLine(apk_b->GetSource(), str_stream.str());
- diff = true;
+ } else if (!context->ignore_id_shift && IsIdDiff(entry_a.visibility.level, entry_a.id,
+ entry_b.visibility.level, entry_b.id)) {
+ std::stringstream str_stream;
+ str_stream << pkg_a.name << ":" << type_a.named_type << "/" << entry_a.name
+ << " has different public ID (";
+ if (entry_b.id) {
+ str_stream << "0x" << std::hex << entry_b.id.value();
+ } else {
+ str_stream << "none";
}
- diff |= EmitResourceEntryDiff(context, apk_a, pkg_a, type_a, entry_a, apk_b, pkg_b, type_b,
- entry_b);
- }
- if (entry_a_iter != type_a.entries.end()) {
- ++entry_a_iter;
+ str_stream << " vs ";
+ if (entry_a.id) {
+ str_stream << "0x " << std::hex << entry_a.id.value();
+ } else {
+ str_stream << "none";
+ }
+ str_stream << ")";
+ EmitDiffLine(apk_b->GetSource(), str_stream.str());
+ diff = true;
}
- if (entry_b_iter != type_b.entries.end()) {
- ++entry_b_iter;
+ diff |= EmitResourceEntryDiff(context, apk_a, pkg_a, type_a, entry_a, apk_b, pkg_b, type_b,
+ entry_b);
+ }
+ if (found_b_entries.size() < type_b.entries.size()) {
+ diff = true;
+ for (auto&& entry_b : type_b.entries) {
+ if (found_b_entries.contains(&entry_b)) {
+ continue;
+ }
+ // Type B contains a type that type A does not have.
+ std::stringstream str_stream;
+ str_stream << "new entry " << pkg_b.name << ":" << type_b.named_type << "/" << entry_b.name;
+ EmitDiffLine(apk_b->GetSource(), str_stream.str());
}
}
return diff;
}
-static bool EmitResourcePackageDiff(IAaptContext* context, LoadedApk* apk_a,
+static bool EmitResourcePackageDiff(DiffContext* context, LoadedApk* apk_a,
const ResourceTablePackageView& pkg_a, LoadedApk* apk_b,
const ResourceTablePackageView& pkg_b) {
bool diff = false;
@@ -302,7 +338,8 @@ static bool EmitResourcePackageDiff(IAaptContext* context, LoadedApk* apk_a,
str_stream << ")";
EmitDiffLine(apk_b->GetSource(), str_stream.str());
diff = true;
- } else if (IsIdDiff(type_a.visibility_level, type_a.id, type_b.visibility_level, type_b.id)) {
+ } else if (!context->ignore_id_shift &&
+ IsIdDiff(type_a.visibility_level, type_a.id, type_b.visibility_level, type_b.id)) {
std::stringstream str_stream;
str_stream << pkg_a.name << ":" << type_a.named_type << " has different public ID (";
if (type_b.id) {
@@ -332,7 +369,7 @@ static bool EmitResourcePackageDiff(IAaptContext* context, LoadedApk* apk_a,
return diff;
}
-static bool EmitResourceTableDiff(IAaptContext* context, LoadedApk* apk_a, LoadedApk* apk_b) {
+static bool EmitResourceTableDiff(DiffContext* context, LoadedApk* apk_a, LoadedApk* apk_b) {
const auto table_a = apk_a->GetResourceTable()->GetPartitionedView();
const auto table_b = apk_b->GetResourceTable()->GetPartitionedView();
@@ -355,7 +392,7 @@ static bool EmitResourceTableDiff(IAaptContext* context, LoadedApk* apk_a, Loade
} else {
const auto& package_a = *package_a_iter;
const auto& package_b = *package_b_iter;
- if (package_a.id != package_b.id) {
+ if (package_a.id != package_b.id && !context->ignore_id_shift) {
std::stringstream str_stream;
str_stream << "package '" << package_a.name << "' has different id (";
if (package_b.id) {
@@ -405,7 +442,7 @@ static void ZeroOutAppReferences(ResourceTable* table) {
}
int DiffCommand::Action(const std::vector<std::string>& args) {
- DiffContext context;
+ DiffContext context(ignore_id_shift_);
if (args.size() != 2u) {
std::cerr << "must have two apks as arguments.\n\n";
diff --git a/tools/aapt2/cmd/Diff.h b/tools/aapt2/cmd/Diff.h
index c38888863be9..32e394416880 100644
--- a/tools/aapt2/cmd/Diff.h
+++ b/tools/aapt2/cmd/Diff.h
@@ -14,9 +14,7 @@
* limitations under the License.
*/
-#ifndef AAPT2_DIFF_H
-#define AAPT2_DIFF_H
-
+#pragma once
#include "Command.h"
namespace aapt {
@@ -25,11 +23,16 @@ class DiffCommand : public Command {
public:
explicit DiffCommand() : Command("diff") {
SetDescription("Prints the differences in resources of two apks.");
+ AddOptionalSwitch("--ignore-id-shift",
+ "Match the resources when their IDs shift, e.g. because of the added\n"
+ "or deleted entries.",
+ &ignore_id_shift_);
}
int Action(const std::vector<std::string>& args) override;
-};
-}// namespace aapt
+ private:
+ bool ignore_id_shift_ = false;
+};
-#endif //AAPT2_DIFF_H
+} // namespace aapt