summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ADPF_OWNERS5
-rw-r--r--AconfigFlags.bp7
-rw-r--r--apct-tests/perftests/core/src/android/os/TracePerfTest.java4
-rw-r--r--boot/boot-image-profile-extra.txt8
-rw-r--r--core/api/current.txt4
-rw-r--r--core/api/module-lib-current.txt10
-rw-r--r--core/api/test-current.txt2
-rw-r--r--core/java/android/app/Activity.java26
-rw-r--r--core/java/android/app/ActivityManagerInternal.java5
-rw-r--r--core/java/android/app/AppOpsManagerInternal.java5
-rw-r--r--core/java/android/app/Instrumentation.java13
-rw-r--r--core/java/android/app/Notification.java22
-rw-r--r--core/java/android/app/admin/DevicePolicyManager.java14
-rw-r--r--core/java/android/app/supervision/flags.aconfig8
-rw-r--r--core/java/android/content/ContentResolver.java6
-rw-r--r--core/java/android/content/res/Resources.java2
-rw-r--r--core/java/android/content/res/ResourcesImpl.java1
-rw-r--r--core/java/android/content/res/TypedArray.java1
-rw-r--r--core/java/android/graphics/fonts/FontFamilyUpdateRequest.java1
-rw-r--r--core/java/android/graphics/fonts/FontFileUpdateRequest.java1
-rw-r--r--core/java/android/hardware/contexthub/HubEndpoint.java11
-rw-r--r--core/java/android/hardware/contexthub/HubEndpointSession.java1
-rw-r--r--core/java/android/os/CombinedMessageQueue/MessageQueue.java11
-rw-r--r--core/java/android/os/PerfettoTrace.java20
-rw-r--r--core/java/android/os/PerfettoTrackEventExtra.java599
-rw-r--r--core/java/android/os/UserManager.java3
-rw-r--r--core/java/android/permission/flags.aconfig9
-rw-r--r--core/java/android/text/AlteredCharSequence.java1
-rw-r--r--core/java/android/text/AndroidBidi.java1
-rw-r--r--core/java/android/text/AndroidCharacter.java1
-rw-r--r--core/java/android/text/Annotation.java1
-rw-r--r--core/java/android/text/AutoGrowArray.java1
-rw-r--r--core/java/android/text/AutoText.java1
-rw-r--r--core/java/android/text/BidiFormatter.java1
-rw-r--r--core/java/android/text/BoringLayout.java1
-rw-r--r--core/java/android/text/CharSequenceCharacterIterator.java1
-rw-r--r--core/java/android/text/ClipboardManager.java1
-rw-r--r--core/java/android/text/DynamicLayout.java1
-rw-r--r--core/java/android/text/Editable.java1
-rw-r--r--core/java/android/text/Emoji.java1
-rw-r--r--core/java/android/text/EmojiConsistency.java1
-rw-r--r--core/java/android/text/FontConfig.java1
-rw-r--r--core/java/android/text/GetChars.java1
-rw-r--r--core/java/android/text/GraphemeClusterSegmentFinder.java1
-rw-r--r--core/java/android/text/GraphicsOperations.java1
-rw-r--r--core/java/android/text/Highlights.java1
-rw-r--r--core/java/android/text/Html.java41
-rw-r--r--core/java/android/text/Hyphenator.java1
-rw-r--r--core/java/android/text/InputFilter.java1
-rw-r--r--core/java/android/text/InputType.java1
-rw-r--r--core/java/android/text/Layout.java1
-rw-r--r--core/java/android/text/LoginFilter.java1
-rw-r--r--core/java/android/text/MeasuredParagraph.java1
-rw-r--r--core/java/android/text/NoCopySpan.java1
-rw-r--r--core/java/android/text/PackedIntVector.java1
-rw-r--r--core/java/android/text/PackedObjectVector.java1
-rw-r--r--core/java/android/text/ParcelableSpan.java1
-rw-r--r--core/java/android/text/PrecomputedText.java1
-rw-r--r--core/java/android/text/SegmentFinder.java1
-rw-r--r--core/java/android/text/Selection.java1
-rw-r--r--core/java/android/text/SpanColors.java1
-rw-r--r--core/java/android/text/SpanSet.java1
-rw-r--r--core/java/android/text/SpanWatcher.java1
-rw-r--r--core/java/android/text/Spannable.java1
-rw-r--r--core/java/android/text/SpannableString.java1
-rw-r--r--core/java/android/text/SpannableStringBuilder.java1
-rw-r--r--core/java/android/text/SpannableStringInternal.java1
-rw-r--r--core/java/android/text/Spanned.java1
-rw-r--r--core/java/android/text/SpannedString.java1
-rw-r--r--core/java/android/text/StaticLayout.java1
-rw-r--r--core/java/android/text/TextDirectionHeuristic.java1
-rw-r--r--core/java/android/text/TextDirectionHeuristics.java1
-rw-r--r--core/java/android/text/TextLine.java1
-rw-r--r--core/java/android/text/TextPaint.java1
-rw-r--r--core/java/android/text/TextShaper.java1
-rw-r--r--core/java/android/text/TextUtils.java44
-rw-r--r--core/java/android/text/TextWatcher.java1
-rw-r--r--core/java/android/text/WordSegmentFinder.java1
-rw-r--r--core/java/android/text/format/DateFormat.java1
-rw-r--r--core/java/android/text/format/DateIntervalFormat.java1
-rw-r--r--core/java/android/text/format/DateTimeFormat.java1
-rw-r--r--core/java/android/text/format/DateUtils.java1
-rw-r--r--core/java/android/text/format/DateUtilsBridge.java1
-rw-r--r--core/java/android/text/format/Formatter.java1
-rw-r--r--core/java/android/text/format/RelativeDateTimeFormatter.java1
-rw-r--r--core/java/android/text/format/Time.java1
-rw-r--r--core/java/android/text/format/TimeFormatter.java1
-rw-r--r--core/java/android/text/format/TimeMigrationUtils.java1
-rw-r--r--core/java/android/text/method/AllCapsTransformationMethod.java1
-rw-r--r--core/java/android/text/method/ArrowKeyMovementMethod.java1
-rw-r--r--core/java/android/text/method/BaseKeyListener.java1
-rw-r--r--core/java/android/text/method/BaseMovementMethod.java1
-rw-r--r--core/java/android/text/method/CharacterPickerDialog.java1
-rw-r--r--core/java/android/text/method/DateKeyListener.java1
-rw-r--r--core/java/android/text/method/DateTimeKeyListener.java1
-rw-r--r--core/java/android/text/method/DialerKeyListener.java1
-rw-r--r--core/java/android/text/method/DigitsKeyListener.java1
-rw-r--r--core/java/android/text/method/HideReturnsTransformationMethod.java1
-rw-r--r--core/java/android/text/method/InsertModeTransformationMethod.java1
-rw-r--r--core/java/android/text/method/KeyListener.java1
-rw-r--r--core/java/android/text/method/LinkMovementMethod.java1
-rw-r--r--core/java/android/text/method/MetaKeyKeyListener.java1
-rw-r--r--core/java/android/text/method/MovementMethod.java1
-rw-r--r--core/java/android/text/method/MultiTapKeyListener.java1
-rw-r--r--core/java/android/text/method/NumberKeyListener.java1
-rw-r--r--core/java/android/text/method/OffsetMapping.java1
-rw-r--r--core/java/android/text/method/PasswordTransformationMethod.java1
-rw-r--r--core/java/android/text/method/QwertyKeyListener.java1
-rw-r--r--core/java/android/text/method/ReplacementTransformationMethod.java1
-rw-r--r--core/java/android/text/method/ScrollingMovementMethod.java1
-rw-r--r--core/java/android/text/method/SingleLineTransformationMethod.java1
-rw-r--r--core/java/android/text/method/TextKeyListener.java1
-rw-r--r--core/java/android/text/method/TimeKeyListener.java1
-rw-r--r--core/java/android/text/method/Touch.java1
-rw-r--r--core/java/android/text/method/TransformationMethod.java1
-rw-r--r--core/java/android/text/method/TransformationMethod2.java1
-rw-r--r--core/java/android/text/method/TranslationTransformationMethod.java1
-rw-r--r--core/java/android/text/method/WordIterator.java1
-rw-r--r--core/java/android/text/style/AbsoluteSizeSpan.java1
-rw-r--r--core/java/android/text/style/AccessibilityClickableSpan.java1
-rw-r--r--core/java/android/text/style/AccessibilityReplacementSpan.java1
-rw-r--r--core/java/android/text/style/AccessibilityURLSpan.java1
-rw-r--r--core/java/android/text/style/AlignmentSpan.java1
-rw-r--r--core/java/android/text/style/BackgroundColorSpan.java1
-rw-r--r--core/java/android/text/style/BulletSpan.java1
-rw-r--r--core/java/android/text/style/CharacterStyle.java1
-rw-r--r--core/java/android/text/style/ClickableSpan.java1
-rw-r--r--core/java/android/text/style/ForegroundColorSpan.java1
-rw-r--r--core/java/android/text/style/IconMarginSpan.java1
-rw-r--r--core/java/android/text/style/LeadingMarginSpan.java1
-rw-r--r--core/java/android/text/style/LineBackgroundSpan.java1
-rw-r--r--core/java/android/text/style/LineBreakConfigSpan.java1
-rw-r--r--core/java/android/text/style/LineHeightSpan.java1
-rw-r--r--core/java/android/text/style/LocaleSpan.java1
-rw-r--r--core/java/android/text/style/MaskFilterSpan.java1
-rw-r--r--core/java/android/text/style/MetricAffectingSpan.java1
-rw-r--r--core/java/android/text/style/NoWritingToolsSpan.java1
-rw-r--r--core/java/android/text/style/ParagraphStyle.java1
-rw-r--r--core/java/android/text/style/QuoteSpan.java1
-rw-r--r--core/java/android/text/style/RasterizerSpan.java1
-rw-r--r--core/java/android/text/style/RelativeSizeSpan.java1
-rw-r--r--core/java/android/text/style/ReplacementSpan.java1
-rw-r--r--core/java/android/text/style/ScaleXSpan.java1
-rw-r--r--core/java/android/text/style/SpanUtils.java1
-rw-r--r--core/java/android/text/style/SpellCheckSpan.java1
-rw-r--r--core/java/android/text/style/StrikethroughSpan.java1
-rw-r--r--core/java/android/text/style/StyleSpan.java1
-rw-r--r--core/java/android/text/style/SubscriptSpan.java1
-rw-r--r--core/java/android/text/style/SuggestionRangeSpan.java1
-rw-r--r--core/java/android/text/style/SuggestionSpan.java1
-rw-r--r--core/java/android/text/style/SuperscriptSpan.java1
-rw-r--r--core/java/android/text/style/TabStopSpan.java1
-rw-r--r--core/java/android/text/style/TextAppearanceSpan.java1
-rw-r--r--core/java/android/text/style/TtsSpan.java1
-rw-r--r--core/java/android/text/style/TypefaceSpan.java1
-rw-r--r--core/java/android/text/style/URLSpan.java1
-rw-r--r--core/java/android/text/style/UnderlineSpan.java1
-rw-r--r--core/java/android/text/style/UpdateAppearance.java1
-rw-r--r--core/java/android/text/style/UpdateLayout.java1
-rw-r--r--core/java/android/text/style/WrapTogetherSpan.java1
-rw-r--r--core/java/android/text/util/Rfc822Token.java1
-rw-r--r--core/java/android/text/util/Rfc822Tokenizer.java1
-rw-r--r--core/java/android/view/SurfaceControl.java75
-rw-r--r--core/java/android/view/SurfaceView.java15
-rw-r--r--core/java/android/view/WindowManager.java37
-rw-r--r--core/java/android/view/flags/view_flags.aconfig8
-rw-r--r--core/java/android/view/inputmethod/InputMethodManager.java1
-rw-r--r--core/java/android/view/textclassifier/intent/OWNERS1
-rw-r--r--core/java/android/widget/RemoteViews.java2
-rw-r--r--core/java/android/window/DesktopModeFlags.java7
-rw-r--r--core/java/android/window/TransitionFilter.java6
-rw-r--r--core/java/android/window/TransitionInfo.java38
-rw-r--r--core/java/android/window/flags/lse_desktop_experience.aconfig34
-rw-r--r--core/java/android/window/flags/windowing_sdk.aconfig10
-rw-r--r--core/java/com/android/internal/accessibility/AccessibilityShortcutController.java9
-rw-r--r--core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java14
-rw-r--r--core/java/com/android/internal/app/MediaRouteControllerContentManager.java132
-rw-r--r--core/java/com/android/internal/app/MediaRouteControllerDialog.java119
-rw-r--r--core/java/com/android/internal/os/LongArrayMultiStateCounter.java9
-rw-r--r--core/java/com/android/internal/os/LongArrayMultiStateCounter_ravenwood.java20
-rw-r--r--core/jni/Android.bp7
-rw-r--r--core/jni/android_graphics_BLASTBufferQueue.cpp3
-rw-r--r--core/jni/android_media_ImageReader.cpp75
-rw-r--r--core/jni/android_media_PublicFormatUtils.cpp9
-rw-r--r--core/jni/android_media_Utils.cpp12
-rw-r--r--core/jni/com_android_internal_os_LongArrayMultiStateCounter.cpp25
-rw-r--r--core/jni/jni_wrappers.h2
-rw-r--r--core/jni/platform/host/HostRuntime.cpp6
-rw-r--r--core/res/AndroidManifest.xml12
-rw-r--r--core/res/res/color-night/surface_effect_2_color.xml20
-rw-r--r--core/res/res/color-night/surface_effect_3_color.xml20
-rw-r--r--core/res/res/color/surface_effect_2_color.xml20
-rw-r--r--core/res/res/color/surface_effect_3_color.xml20
-rw-r--r--core/res/res/layout/notification_2025_template_collapsed_call.xml188
-rw-r--r--core/res/res/layout/notification_2025_template_expanded_call.xml86
-rw-r--r--core/res/res/layout/notification_2025_template_header.xml26
-rw-r--r--core/res/res/layout/notification_2025_top_line_views.xml36
-rw-r--r--core/res/res/layout/notification_template_header.xml24
-rw-r--r--core/res/res/values-af/strings.xml60
-rw-r--r--core/res/res/values-am/strings.xml60
-rw-r--r--core/res/res/values-as/strings.xml60
-rw-r--r--core/res/res/values-az/strings.xml60
-rw-r--r--core/res/res/values-b+sr+Latn/strings.xml60
-rw-r--r--core/res/res/values-be/strings.xml62
-rw-r--r--core/res/res/values-bg/strings.xml60
-rw-r--r--core/res/res/values-bn/strings.xml60
-rw-r--r--core/res/res/values-bs/strings.xml62
-rw-r--r--core/res/res/values-ca/strings.xml60
-rw-r--r--core/res/res/values-cs/strings.xml62
-rw-r--r--core/res/res/values-da/strings.xml60
-rw-r--r--core/res/res/values-de/strings.xml60
-rw-r--r--core/res/res/values-el/strings.xml60
-rw-r--r--core/res/res/values-en-rAU/strings.xml60
-rw-r--r--core/res/res/values-en-rCA/strings.xml60
-rw-r--r--core/res/res/values-en-rGB/strings.xml60
-rw-r--r--core/res/res/values-en-rIN/strings.xml60
-rw-r--r--core/res/res/values-es-rUS/strings.xml64
-rw-r--r--core/res/res/values-es/strings.xml60
-rw-r--r--core/res/res/values-et/strings.xml60
-rw-r--r--core/res/res/values-eu/strings.xml60
-rw-r--r--core/res/res/values-fa/strings.xml62
-rw-r--r--core/res/res/values-fi/strings.xml60
-rw-r--r--core/res/res/values-fr-rCA/strings.xml60
-rw-r--r--core/res/res/values-fr/strings.xml60
-rw-r--r--core/res/res/values-gl/strings.xml60
-rw-r--r--core/res/res/values-gu/strings.xml62
-rw-r--r--core/res/res/values-hi/strings.xml60
-rw-r--r--core/res/res/values-hr/strings.xml60
-rw-r--r--core/res/res/values-hu/strings.xml60
-rw-r--r--core/res/res/values-hy/strings.xml60
-rw-r--r--core/res/res/values-in/strings.xml62
-rw-r--r--core/res/res/values-is/strings.xml60
-rw-r--r--core/res/res/values-it/strings.xml60
-rw-r--r--core/res/res/values-ja/strings.xml60
-rw-r--r--core/res/res/values-ka/strings.xml60
-rw-r--r--core/res/res/values-kk/strings.xml60
-rw-r--r--core/res/res/values-km/strings.xml60
-rw-r--r--core/res/res/values-kn/strings.xml60
-rw-r--r--core/res/res/values-ko/strings.xml60
-rw-r--r--core/res/res/values-ky/strings.xml60
-rw-r--r--core/res/res/values-lo/strings.xml62
-rw-r--r--core/res/res/values-lt/strings.xml60
-rw-r--r--core/res/res/values-lv/strings.xml60
-rw-r--r--core/res/res/values-mk/strings.xml60
-rw-r--r--core/res/res/values-ml/strings.xml60
-rw-r--r--core/res/res/values-mn/strings.xml60
-rw-r--r--core/res/res/values-mr/strings.xml60
-rw-r--r--core/res/res/values-ms/strings.xml60
-rw-r--r--core/res/res/values-my/strings.xml60
-rw-r--r--core/res/res/values-nb/strings.xml60
-rw-r--r--core/res/res/values-ne/strings.xml64
-rw-r--r--core/res/res/values-night/colors.xml2
-rw-r--r--core/res/res/values-nl/strings.xml60
-rw-r--r--core/res/res/values-or/strings.xml64
-rw-r--r--core/res/res/values-pa/strings.xml60
-rw-r--r--core/res/res/values-pl/strings.xml60
-rw-r--r--core/res/res/values-pt-rBR/strings.xml60
-rw-r--r--core/res/res/values-pt-rPT/strings.xml60
-rw-r--r--core/res/res/values-pt/strings.xml60
-rw-r--r--core/res/res/values-ro/strings.xml60
-rw-r--r--core/res/res/values-ru/strings.xml62
-rw-r--r--core/res/res/values-si/strings.xml60
-rw-r--r--core/res/res/values-sk/strings.xml60
-rw-r--r--core/res/res/values-sl/strings.xml60
-rw-r--r--core/res/res/values-sr/strings.xml60
-rw-r--r--core/res/res/values-sv/strings.xml60
-rw-r--r--core/res/res/values-sw/strings.xml60
-rw-r--r--core/res/res/values-ta/strings.xml60
-rw-r--r--core/res/res/values-te/strings.xml64
-rw-r--r--core/res/res/values-th/strings.xml60
-rw-r--r--core/res/res/values-tl/strings.xml60
-rw-r--r--core/res/res/values-tr/strings.xml60
-rw-r--r--core/res/res/values-uk/strings.xml62
-rw-r--r--core/res/res/values-ur/strings.xml62
-rw-r--r--core/res/res/values-uz/strings.xml60
-rw-r--r--core/res/res/values-vi/strings.xml60
-rw-r--r--core/res/res/values-zh-rCN/strings.xml62
-rw-r--r--core/res/res/values-zh-rHK/strings.xml60
-rw-r--r--core/res/res/values-zh-rTW/strings.xml60
-rw-r--r--core/res/res/values-zu/strings.xml60
-rw-r--r--core/res/res/values/attrs_manifest.xml58
-rw-r--r--core/res/res/values/colors.xml2
-rw-r--r--core/res/res/values/config.xml5
-rw-r--r--core/res/res/values/strings.xml3
-rw-r--r--core/res/res/values/symbols.xml6
-rw-r--r--core/tests/coretests/Android.bp27
-rw-r--r--core/tests/coretests/src/android/content/res/FontScaleConverterTest.kt5
-rw-r--r--core/tests/coretests/src/android/graphics/BitmapFactoryTest.java3
-rw-r--r--core/tests/coretests/src/android/graphics/BitmapTest.java3
-rw-r--r--core/tests/coretests/src/android/graphics/PaintTest.java3
-rw-r--r--core/tests/coretests/src/android/graphics/TypefaceSystemFallbackTest.java10
-rw-r--r--core/tests/coretests/src/android/graphics/TypefaceTest.java2
-rw-r--r--core/tests/coretests/src/android/os/PerfettoTraceTest.java4
-rw-r--r--core/tests/coretests/src/android/text/AndroidCharacterTest.java2
-rw-r--r--core/tests/coretests/src/android/text/SpanColorsTest.java2
-rw-r--r--core/tests/coretests/src/android/text/SpannableTest.java10
-rw-r--r--core/tests/coretests/src/android/text/StaticLayoutTest.java2
-rw-r--r--core/tests/coretests/src/android/text/TextUtilsTest.java4
-rw-r--r--core/tests/coretests/src/android/text/format/DateFormatTest.java5
-rw-r--r--core/tests/coretests/src/android/text/format/DateIntervalFormatTest.java2
-rw-r--r--core/tests/coretests/src/android/text/format/DateUtilsTest.java2
-rw-r--r--core/tests/coretests/src/android/text/format/TimeMigrationUtilsTest.java2
-rw-r--r--core/tests/coretests/src/android/text/format/TimeTest.java2
-rw-r--r--core/tests/coretests/src/android/text/method/BackspaceTest.java2
-rw-r--r--core/tests/coretests/src/android/text/method/EditorState.java3
-rw-r--r--core/tests/coretests/src/android/text/method/ForwardDeleteTest.java2
-rw-r--r--core/tests/coretests/src/android/text/method/InsertModeTransformationMethodTest.java2
-rw-r--r--core/tests/coretests/src/android/text/util/LinkifyTest.java2
-rw-r--r--core/tests/coretests/src/android/widget/RemoteViewsTest.java17
-rw-r--r--core/tests/coretests/src/com/android/internal/os/KernelSingleUidTimeReaderTest.java2
-rw-r--r--core/tests/coretests/src/com/android/internal/os/LongArrayMultiStateCounterTest.java2
-rw-r--r--graphics/java/android/graphics/AvoidXfermode.java1
-rw-r--r--graphics/java/android/graphics/BLASTBufferQueue.java1
-rw-r--r--graphics/java/android/graphics/BaseCanvas.java1
-rw-r--r--graphics/java/android/graphics/BaseRecordingCanvas.java1
-rw-r--r--graphics/java/android/graphics/Bitmap.java1
-rw-r--r--graphics/java/android/graphics/BitmapFactory.java1
-rw-r--r--graphics/java/android/graphics/BitmapRegionDecoder.java1
-rw-r--r--graphics/java/android/graphics/BitmapShader.java1
-rw-r--r--graphics/java/android/graphics/BlendMode.java1
-rw-r--r--graphics/java/android/graphics/BlendModeColorFilter.java1
-rw-r--r--graphics/java/android/graphics/BlurMaskFilter.java1
-rw-r--r--graphics/java/android/graphics/Camera.java1
-rw-r--r--graphics/java/android/graphics/Canvas.java1
-rw-r--r--graphics/java/android/graphics/CanvasProperty.java1
-rw-r--r--graphics/java/android/graphics/ColorFilter.java1
-rw-r--r--graphics/java/android/graphics/ColorMatrixColorFilter.java1
-rw-r--r--graphics/java/android/graphics/Compatibility.java1
-rw-r--r--graphics/java/android/graphics/ComposePathEffect.java1
-rw-r--r--graphics/java/android/graphics/ComposeShader.java1
-rw-r--r--graphics/java/android/graphics/CornerPathEffect.java1
-rw-r--r--graphics/java/android/graphics/DashPathEffect.java1
-rw-r--r--graphics/java/android/graphics/DiscretePathEffect.java1
-rw-r--r--graphics/java/android/graphics/DrawFilter.java1
-rw-r--r--graphics/java/android/graphics/EmbossMaskFilter.java1
-rw-r--r--graphics/java/android/graphics/FontFamily.java1
-rw-r--r--graphics/java/android/graphics/FontListParser.java1
-rw-r--r--graphics/java/android/graphics/ForceDarkType.java1
-rw-r--r--graphics/java/android/graphics/FrameInfo.java1
-rw-r--r--graphics/java/android/graphics/Gainmap.java1
-rw-r--r--graphics/java/android/graphics/GraphicBuffer.java1
-rw-r--r--graphics/java/android/graphics/GraphicsProtos.java1
-rw-r--r--graphics/java/android/graphics/GraphicsStatsService.java1
-rw-r--r--graphics/java/android/graphics/HardwareBufferRenderer.java1
-rw-r--r--graphics/java/android/graphics/HardwareRenderer.java1
-rw-r--r--graphics/java/android/graphics/HardwareRendererObserver.java1
-rw-r--r--graphics/java/android/graphics/ImageDecoder.java5
-rw-r--r--graphics/java/android/graphics/ImageFormat.java1
-rw-r--r--graphics/java/android/graphics/LayerRasterizer.java1
-rw-r--r--graphics/java/android/graphics/LeakyTypefaceStorage.java1
-rw-r--r--graphics/java/android/graphics/LightingColorFilter.java1
-rw-r--r--graphics/java/android/graphics/LinearGradient.java1
-rw-r--r--graphics/java/android/graphics/MaskFilter.java1
-rw-r--r--graphics/java/android/graphics/Mesh.java1
-rw-r--r--graphics/java/android/graphics/MeshSpecification.java1
-rw-r--r--graphics/java/android/graphics/Movie.java1
-rw-r--r--graphics/java/android/graphics/NinePatch.java1
-rw-r--r--graphics/java/android/graphics/Paint.java1
-rw-r--r--graphics/java/android/graphics/PaintFlagsDrawFilter.java1
-rw-r--r--graphics/java/android/graphics/PathDashPathEffect.java1
-rw-r--r--graphics/java/android/graphics/PathEffect.java1
-rw-r--r--graphics/java/android/graphics/PathIterator.java16
-rw-r--r--graphics/java/android/graphics/PathMeasure.java1
-rw-r--r--graphics/java/android/graphics/Picture.java1
-rw-r--r--graphics/java/android/graphics/PixelXorXfermode.java1
-rw-r--r--graphics/java/android/graphics/PorterDuff.java1
-rw-r--r--graphics/java/android/graphics/PorterDuffColorFilter.java1
-rw-r--r--graphics/java/android/graphics/PorterDuffXfermode.java1
-rw-r--r--graphics/java/android/graphics/PostProcessor.java1
-rw-r--r--graphics/java/android/graphics/RadialGradient.java1
-rw-r--r--graphics/java/android/graphics/Rasterizer.java1
-rw-r--r--graphics/java/android/graphics/RecordingCanvas.java1
-rw-r--r--graphics/java/android/graphics/Region.java1
-rw-r--r--graphics/java/android/graphics/RegionIterator.java1
-rw-r--r--graphics/java/android/graphics/RenderEffect.java1
-rw-r--r--graphics/java/android/graphics/RenderNode.java1
-rw-r--r--graphics/java/android/graphics/RuntimeColorFilter.java1
-rw-r--r--graphics/java/android/graphics/RuntimeShader.java1
-rw-r--r--graphics/java/android/graphics/RuntimeXfermode.java1
-rw-r--r--graphics/java/android/graphics/Shader.java1
-rw-r--r--graphics/java/android/graphics/SumPathEffect.java1
-rw-r--r--graphics/java/android/graphics/SurfaceTexture.java1
-rw-r--r--graphics/java/android/graphics/SweepGradient.java1
-rw-r--r--graphics/java/android/graphics/TableMaskFilter.java1
-rw-r--r--graphics/java/android/graphics/TemporaryBuffer.java1
-rw-r--r--graphics/java/android/graphics/TextureLayer.java1
-rw-r--r--graphics/java/android/graphics/Typeface.java45
-rw-r--r--graphics/java/android/graphics/Xfermode.java1
-rw-r--r--graphics/java/android/graphics/YuvImage.java1
-rw-r--r--graphics/java/android/graphics/fonts/Font.java11
-rw-r--r--graphics/java/android/graphics/fonts/FontCustomizationParser.java1
-rw-r--r--graphics/java/android/graphics/fonts/FontFamily.java1
-rw-r--r--graphics/java/android/graphics/fonts/FontFileUtil.java1
-rw-r--r--graphics/java/android/graphics/fonts/FontStyle.java1
-rw-r--r--graphics/java/android/graphics/fonts/FontVariationAxis.java1
-rw-r--r--graphics/java/android/graphics/fonts/SystemFonts.java31
-rw-r--r--graphics/java/android/graphics/text/GraphemeBreak.java1
-rw-r--r--graphics/java/android/graphics/text/LineBreakConfig.java10
-rw-r--r--graphics/java/android/graphics/text/LineBreaker.java1
-rw-r--r--graphics/java/android/graphics/text/MeasuredText.java1
-rw-r--r--graphics/java/android/graphics/text/PositionedGlyphs.java1
-rw-r--r--graphics/java/android/graphics/text/TextRunShaper.java1
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java3
-rw-r--r--libs/WindowManager/Shell/aconfig/multitasking.aconfig10
-rw-r--r--libs/WindowManager/Shell/multivalentTests/AndroidManifest.xml1
-rw-r--r--libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleTaskViewListenerTest.kt161
-rw-r--r--libs/WindowManager/Shell/res/values-af/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-am/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-as/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-az/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml4
-rw-r--r--libs/WindowManager/Shell/res/values-bg/strings.xml14
-rw-r--r--libs/WindowManager/Shell/res/values-bn/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-bs/strings.xml8
-rw-r--r--libs/WindowManager/Shell/res/values-ca/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-da/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-de/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-el/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-en-rAU/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-en-rGB/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-en-rIN/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-es-rUS/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-es/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-et/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-eu/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-fa/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-fi/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-fr/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-gl/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-hi/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-hu/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-hy/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-in/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-is/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-it/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-iw/strings.xml14
-rw-r--r--libs/WindowManager/Shell/res/values-kk/strings.xml14
-rw-r--r--libs/WindowManager/Shell/res/values-km/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-kn/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-ky/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-lo/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-lv/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-mk/strings.xml14
-rw-r--r--libs/WindowManager/Shell/res/values-ml/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-mn/strings.xml14
-rw-r--r--libs/WindowManager/Shell/res/values-mr/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-my/strings.xml14
-rw-r--r--libs/WindowManager/Shell/res/values-nb/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-ne/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-or/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-pl/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-pt-rPT/strings.xml2
-rw-r--r--libs/WindowManager/Shell/res/values-ro/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-si/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-sk/strings.xml2
-rw-r--r--libs/WindowManager/Shell/res/values-sq/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-sr/strings.xml4
-rw-r--r--libs/WindowManager/Shell/res/values-sv/strings.xml2
-rw-r--r--libs/WindowManager/Shell/res/values-sw/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-ta/strings.xml14
-rw-r--r--libs/WindowManager/Shell/res/values-tl/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-tr/strings.xml14
-rw-r--r--libs/WindowManager/Shell/res/values-uk/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-ur/strings.xml14
-rw-r--r--libs/WindowManager/Shell/res/values-uz/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-vi/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-zh-rCN/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-zh-rHK/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-zh-rTW/strings.xml12
-rw-r--r--libs/WindowManager/Shell/res/values-zu/strings.xml12
-rw-r--r--libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/GroupedTaskInfo.java62
-rw-r--r--libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/animation/Interpolators.java6
-rw-r--r--libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/animation/MinimizeAnimator.kt50
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java14
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationSpec.java44
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingController.java4
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java2
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java65
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTaskViewListener.java23
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTransitions.java3
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java8
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipBoundsAlgorithm.java9
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellConcurrencyModule.java29
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java15
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/CloseDesktopTaskTransitionHandler.kt5
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandler.kt36
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt3
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt72
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt25
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/docs/README.md1
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/docs/transitions.md118
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java48
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip2/PipSurfaceTransactionHelper.java12
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip2/animation/PipResizeAnimator.java2
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipController.java4
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java4
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java16
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java128
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentsTransitionHandler.java115
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java4
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java16
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java78
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java18
-rw-r--r--libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/functional/AltTabSwitchInDesktopModeTest.kt27
-rw-r--r--libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/AltTabSwitchInDesktopMode.kt80
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java53
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java34
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandlerTest.kt8
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt144
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt82
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/GroupedTaskInfoTest.kt51
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java8
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentsTransitionHandlerTest.java85
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/animation/MinimizeAnimatorTest.kt118
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java84
-rw-r--r--libs/hostgraphics/Fence.cpp2
-rw-r--r--libs/hostgraphics/include/gui/BufferItemConsumer.h29
-rw-r--r--libs/hostgraphics/include/gui/Surface.h4
-rw-r--r--libs/hostgraphics/include/ui/Fence.h4
-rw-r--r--libs/hwui/Android.bp12
-rw-r--r--libs/hwui/framework-graphics-ravenwood-policies.txt1
-rw-r--r--libs/hwui/jni/Bitmap.cpp12
-rw-r--r--libs/hwui/jni/Region.cpp6
-rw-r--r--libs/hwui/jni/ScopedParcel.cpp4
-rw-r--r--libs/hwui/jni/ScopedParcel.h4
-rw-r--r--libs/hwui/jni/graphics_jni_helpers.h1
-rw-r--r--media/java/android/media/AudioDeviceVolumeManager.java57
-rw-r--r--packages/InputDevices/res/values-af/strings.xml3
-rw-r--r--packages/InputDevices/res/values-am/strings.xml3
-rw-r--r--packages/InputDevices/res/values-as/strings.xml3
-rw-r--r--packages/InputDevices/res/values-az/strings.xml3
-rw-r--r--packages/InputDevices/res/values-bg/strings.xml3
-rw-r--r--packages/InputDevices/res/values-bn/strings.xml3
-rw-r--r--packages/InputDevices/res/values-ca/strings.xml3
-rw-r--r--packages/InputDevices/res/values-da/strings.xml3
-rw-r--r--packages/InputDevices/res/values-de/strings.xml3
-rw-r--r--packages/InputDevices/res/values-el/strings.xml3
-rw-r--r--packages/InputDevices/res/values-en-rAU/strings.xml3
-rw-r--r--packages/InputDevices/res/values-en-rGB/strings.xml3
-rw-r--r--packages/InputDevices/res/values-en-rIN/strings.xml3
-rw-r--r--packages/InputDevices/res/values-es-rUS/strings.xml3
-rw-r--r--packages/InputDevices/res/values-es/strings.xml3
-rw-r--r--packages/InputDevices/res/values-et/strings.xml3
-rw-r--r--packages/InputDevices/res/values-eu/strings.xml3
-rw-r--r--packages/InputDevices/res/values-fa/strings.xml3
-rw-r--r--packages/InputDevices/res/values-fi/strings.xml3
-rw-r--r--packages/InputDevices/res/values-fr/strings.xml3
-rw-r--r--packages/InputDevices/res/values-gl/strings.xml3
-rw-r--r--packages/InputDevices/res/values-hi/strings.xml3
-rw-r--r--packages/InputDevices/res/values-hu/strings.xml3
-rw-r--r--packages/InputDevices/res/values-hy/strings.xml3
-rw-r--r--packages/InputDevices/res/values-in/strings.xml3
-rw-r--r--packages/InputDevices/res/values-is/strings.xml3
-rw-r--r--packages/InputDevices/res/values-it/strings.xml3
-rw-r--r--packages/InputDevices/res/values-iw/strings.xml3
-rw-r--r--packages/InputDevices/res/values-kk/strings.xml3
-rw-r--r--packages/InputDevices/res/values-km/strings.xml3
-rw-r--r--packages/InputDevices/res/values-kn/strings.xml3
-rw-r--r--packages/InputDevices/res/values-ky/strings.xml3
-rw-r--r--packages/InputDevices/res/values-lo/strings.xml3
-rw-r--r--packages/InputDevices/res/values-lv/strings.xml3
-rw-r--r--packages/InputDevices/res/values-mk/strings.xml3
-rw-r--r--packages/InputDevices/res/values-ml/strings.xml3
-rw-r--r--packages/InputDevices/res/values-mn/strings.xml3
-rw-r--r--packages/InputDevices/res/values-mr/strings.xml3
-rw-r--r--packages/InputDevices/res/values-my/strings.xml3
-rw-r--r--packages/InputDevices/res/values-nb/strings.xml3
-rw-r--r--packages/InputDevices/res/values-ne/strings.xml3
-rw-r--r--packages/InputDevices/res/values-or/strings.xml3
-rw-r--r--packages/InputDevices/res/values-pl/strings.xml3
-rw-r--r--packages/InputDevices/res/values-ro/strings.xml3
-rw-r--r--packages/InputDevices/res/values-si/strings.xml3
-rw-r--r--packages/InputDevices/res/values-sq/strings.xml3
-rw-r--r--packages/InputDevices/res/values-sw/strings.xml3
-rw-r--r--packages/InputDevices/res/values-ta/strings.xml3
-rw-r--r--packages/InputDevices/res/values-tl/strings.xml3
-rw-r--r--packages/InputDevices/res/values-tr/strings.xml3
-rw-r--r--packages/InputDevices/res/values-uk/strings.xml3
-rw-r--r--packages/InputDevices/res/values-ur/strings.xml3
-rw-r--r--packages/InputDevices/res/values-uz/strings.xml3
-rw-r--r--packages/InputDevices/res/values-vi/strings.xml3
-rw-r--r--packages/InputDevices/res/values-zh-rCN/strings.xml3
-rw-r--r--packages/InputDevices/res/values-zh-rHK/strings.xml3
-rw-r--r--packages/InputDevices/res/values-zh-rTW/strings.xml3
-rw-r--r--packages/InputDevices/res/values-zu/strings.xml3
-rw-r--r--packages/SettingsLib/ActionButtonsPreference/res/layout-v36/settingslib_expressive_action_buttons.xml (renamed from packages/SettingsLib/ActionButtonsPreference/res/layout-v35/settingslib_expressive_action_buttons.xml)0
-rw-r--r--packages/SettingsLib/ActionButtonsPreference/res/values-v36/styles_expressive.xml (renamed from packages/SettingsLib/ActionButtonsPreference/res/values-v35/styles_expressive.xml)0
-rw-r--r--packages/SettingsLib/BannerMessagePreference/res/drawable-v36/settingslib_expressive_card_background.xml (renamed from packages/SettingsLib/BannerMessagePreference/res/drawable-v35/settingslib_expressive_card_background.xml)0
-rw-r--r--packages/SettingsLib/BannerMessagePreference/res/drawable-v36/settingslib_resolved_banner_avd.xml (renamed from packages/SettingsLib/BannerMessagePreference/res/drawable-v35/settingslib_resolved_banner_avd.xml)0
-rw-r--r--packages/SettingsLib/BannerMessagePreference/res/layout-v36/settingslib_expressive_banner_message.xml (renamed from packages/SettingsLib/BannerMessagePreference/res/layout-v35/settingslib_expressive_banner_message.xml)0
-rw-r--r--packages/SettingsLib/BannerMessagePreference/res/values-v36/styles_expressive.xml (renamed from packages/SettingsLib/BannerMessagePreference/res/values-v35/styles_expressive.xml)0
-rw-r--r--packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_filled.xml (renamed from packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_filled.xml)0
-rw-r--r--packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_filled_extra.xml (renamed from packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_filled_extra.xml)0
-rw-r--r--packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_filled_large.xml (renamed from packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_filled_large.xml)0
-rw-r--r--packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_outline.xml (renamed from packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_outline.xml)0
-rw-r--r--packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_outline_extra.xml (renamed from packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_outline_extra.xml)0
-rw-r--r--packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_outline_large.xml (renamed from packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_outline_large.xml)0
-rw-r--r--packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_tonal.xml (renamed from packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_tonal.xml)0
-rw-r--r--packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_tonal_extra.xml (renamed from packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_tonal_extra.xml)0
-rw-r--r--packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_tonal_large.xml (renamed from packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_tonal_large.xml)0
-rw-r--r--packages/SettingsLib/CollapsingToolbarBaseActivity/res/drawable-v36/settingslib_expressive_icon_back.xml (renamed from packages/SettingsLib/CollapsingToolbarBaseActivity/res/drawable-v35/settingslib_expressive_icon_back.xml)0
-rw-r--r--packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_base_layout.xml (renamed from packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v35/settingslib_expressive_collapsing_toolbar_base_layout.xml)0
-rw-r--r--packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml (renamed from packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v35/settingslib_expressive_collapsing_toolbar_content_layout.xml)0
-rw-r--r--packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-night-v36/themes.xml (renamed from packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-night-v35/themes.xml)0
-rw-r--r--packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/styles.xml (renamed from packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/styles.xml)0
-rw-r--r--packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/styles_expressive.xml (renamed from packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/styles_expressive.xml)0
-rw-r--r--packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/themes.xml (renamed from packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/themes.xml)0
-rw-r--r--packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/themes_expressive.xml (renamed from packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/themes_expressive.xml)0
-rw-r--r--packages/SettingsLib/MainSwitchPreference/res/color-night-v36/settingslib_main_switch_text_color.xml (renamed from packages/SettingsLib/MainSwitchPreference/res/color-night-v35/settingslib_main_switch_text_color.xml)0
-rw-r--r--packages/SettingsLib/MainSwitchPreference/res/color-v36/settingslib_main_switch_text_color.xml (renamed from packages/SettingsLib/MainSwitchPreference/res/color-v35/settingslib_main_switch_text_color.xml)0
-rw-r--r--packages/SettingsLib/MainSwitchPreference/res/drawable-v36/settingslib_expressive_switch_bar_bg.xml (renamed from packages/SettingsLib/MainSwitchPreference/res/drawable-v35/settingslib_expressive_switch_bar_bg.xml)0
-rw-r--r--packages/SettingsLib/MainSwitchPreference/res/layout-v36/settingslib_expressive_main_switch_bar.xml (renamed from packages/SettingsLib/MainSwitchPreference/res/layout-v35/settingslib_expressive_main_switch_bar.xml)0
-rw-r--r--packages/SettingsLib/MainSwitchPreference/res/layout-v36/settingslib_expressive_main_switch_layout.xml (renamed from packages/SettingsLib/MainSwitchPreference/res/layout-v35/settingslib_expressive_main_switch_layout.xml)0
-rw-r--r--packages/SettingsLib/ProfileSelector/res/color-night-v36/settingslib_tabs_indicator_color.xml (renamed from packages/SettingsLib/ProfileSelector/res/color-night-v35/settingslib_tabs_indicator_color.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/color-night-v36/settingslib_switch_track_outline_color.xml (renamed from packages/SettingsLib/SettingsTheme/res/color-night-v35/settingslib_switch_track_outline_color.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_expressive_color_main_switch_track.xml (renamed from packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_expressive_color_main_switch_track.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_preference_bg_color.xml (renamed from packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_preference_bg_color.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_switch_track_outline_color.xml (renamed from packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_switch_track_outline_color.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_text_color_primary.xml (renamed from packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_text_color_primary.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_text_color_secondary.xml (renamed from packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_text_color_secondary.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_arrow_drop_down.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_arrow_drop_down.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_list_divider.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_list_divider.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_progress_horizontal.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_progress_horizontal.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_bottom.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_highlighted.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_bottom_highlighted.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_selected.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_bottom_selected.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_center.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_highlighted.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_center_highlighted.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_selected.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_center_selected.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_highlighted.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_highlighted.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_selected.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_selected.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_top.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_highlighted.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_top_highlighted.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_selected.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_top_selected.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_spinner_background.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_spinner_background.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_spinner_dropdown_background.xml (renamed from packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_spinner_dropdown_background.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/layout-v36/settingslib_expressive_preference.xml (renamed from packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_preference.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/layout-v36/settingslib_expressive_preference_icon_frame.xml (renamed from packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_preference_icon_frame.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/layout-v36/settingslib_expressive_preference_switch.xml (renamed from packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_preference_switch.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/layout-v36/settingslib_expressive_two_target_divider.xml (renamed from packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_two_target_divider.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/values-night-v36/colors.xml (renamed from packages/SettingsLib/SettingsTheme/res/values-night-v35/colors.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/values-v36/colors.xml (renamed from packages/SettingsLib/SettingsTheme/res/values-v35/colors.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/values-v36/dimens.xml (renamed from packages/SettingsLib/SettingsTheme/res/values-v35/dimens.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/values-v36/styles_expressive.xml (renamed from packages/SettingsLib/SettingsTheme/res/values-v35/styles_expressive.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/values-v36/styles_preference_expressive.xml (renamed from packages/SettingsLib/SettingsTheme/res/values-v35/styles_preference_expressive.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/values-v36/themes.xml (renamed from packages/SettingsLib/SettingsTheme/res/values-v35/themes.xml)4
-rw-r--r--packages/SettingsLib/SettingsTheme/res/values-v36/themes_expressive.xml (renamed from packages/SettingsLib/SettingsTheme/res/values-v35/themes_expressive.xml)0
-rw-r--r--packages/SettingsLib/SettingsTheme/res/values-v36/themes_preference_expressive.xml (renamed from packages/SettingsLib/SettingsTheme/res/values-v35/themes_preference_expressive.xml)0
-rw-r--r--packages/SettingsLib/TwoTargetPreference/res/layout-v36/settingslib_expressive_preference_two_target.xml (renamed from packages/SettingsLib/TwoTargetPreference/res/layout-v35/settingslib_expressive_preference_two_target.xml)0
-rw-r--r--packages/SettingsLib/res/values-af/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-am/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-ar/strings.xml39
-rw-r--r--packages/SettingsLib/res/values-as/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-az/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-b+sr+Latn/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-be/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-bg/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-bn/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-bs/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-ca/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-cs/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-da/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-de/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-el/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-en-rAU/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-en-rCA/strings.xml3
-rw-r--r--packages/SettingsLib/res/values-en-rGB/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-en-rIN/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-es-rUS/strings.xml44
-rw-r--r--packages/SettingsLib/res/values-es/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-et/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-eu/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-fa/strings.xml50
-rw-r--r--packages/SettingsLib/res/values-fi/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-fr-rCA/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-fr/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-gl/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-gu/strings.xml52
-rw-r--r--packages/SettingsLib/res/values-hi/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-hr/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-hu/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-hy/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-in/strings.xml44
-rw-r--r--packages/SettingsLib/res/values-is/strings.xml44
-rw-r--r--packages/SettingsLib/res/values-it/strings.xml44
-rw-r--r--packages/SettingsLib/res/values-iw/strings.xml39
-rw-r--r--packages/SettingsLib/res/values-ja/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-ka/arrays.xml4
-rw-r--r--packages/SettingsLib/res/values-ka/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-kk/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-km/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-kn/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-ko/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-ky/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-lo/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-lt/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-lv/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-mk/strings.xml44
-rw-r--r--packages/SettingsLib/res/values-ml/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-mn/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-mr/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-ms/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-my/strings.xml46
-rw-r--r--packages/SettingsLib/res/values-nb/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-ne/strings.xml44
-rw-r--r--packages/SettingsLib/res/values-nl/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-or/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-pa/strings.xml46
-rw-r--r--packages/SettingsLib/res/values-pl/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-pt-rBR/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-pt-rPT/strings.xml44
-rw-r--r--packages/SettingsLib/res/values-pt/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-ro/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-ru/strings.xml44
-rw-r--r--packages/SettingsLib/res/values-si/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-sk/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-sl/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-sq/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-sr/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-sv/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-sw/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-ta/strings.xml44
-rw-r--r--packages/SettingsLib/res/values-te/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-th/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-tl/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-tr/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-uk/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-ur/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-uz/strings.xml44
-rw-r--r--packages/SettingsLib/res/values-vi/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-zh-rCN/strings.xml44
-rw-r--r--packages/SettingsLib/res/values-zh-rHK/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-zh-rTW/strings.xml42
-rw-r--r--packages/SettingsLib/res/values-zu/strings.xml42
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java53
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java22
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/connectivity/OWNERS1
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/qrcode/OWNERS1
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/AmbientVolumeControllerTest.java6
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java84
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java6
-rw-r--r--packages/SystemUI/Android.bp12
-rw-r--r--packages/SystemUI/aconfig/systemui.aconfig10
-rw-r--r--packages/SystemUI/animation/src/com/android/systemui/animation/FontInterpolator.kt93
-rw-r--r--packages/SystemUI/animation/src/com/android/systemui/animation/FontVariationUtils.kt32
-rw-r--r--packages/SystemUI/animation/src/com/android/systemui/animation/GSFAxes.kt98
-rw-r--r--packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/BouncerOverlayModule.kt (renamed from packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/BouncerSceneModule.kt)11
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerContent.kt42
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerOverlay.kt (renamed from packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt)32
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerOverlayLayout.kt (renamed from packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerSceneLayout.kt)30
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationLockscreenScrim.kt5
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettings.kt3
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerInterruptionHandler.kt8
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerTransitions.kt29
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromBouncerToGoneTransition.kt4
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/OverlayShade.kt10
-rw-r--r--packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/ObservableTransitionState.kt61
-rw-r--r--packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayout.kt18
-rw-r--r--packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockController.kt30
-rw-r--r--packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockFaceController.kt2
-rw-r--r--packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FontUtils.kt43
-rw-r--r--packages/SystemUI/customization/src/com/android/systemui/shared/clocks/view/SimpleDigitalClockTextView.kt31
-rw-r--r--packages/SystemUI/lint.xml5
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt86
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/animation/FontVariationUtilsTest.kt5
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerActionButtonInteractorTest.kt4
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerOverlayLayoutTest.kt (renamed from packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerSceneLayoutTest.kt)18
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerPredictiveBackTest.kt38
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerOverlayContentViewModelTest.kt (renamed from packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModelTest.kt)6
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerUserActionsViewModelTest.kt7
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PasswordBouncerViewModelTest.kt42
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PatternBouncerViewModelTest.kt34
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PinBouncerViewModelTest.kt40
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalUserActionsViewModelTest.kt9
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/communal/view/viewmodel/CommunalViewModelTest.kt5
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/data/repository/DeviceEntryFaceAuthRepositoryTest.kt83
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryFaceAuthInteractorTest.kt8
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt24
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntrySourceInteractorTest.kt35
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt5
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModelTest.kt9
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/inputdevice/tutorial/ui/viewmodel/KeyboardTouchpadTutorialViewModelTest.kt22
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ResourceTrimmerTest.kt12
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractorTest.kt21
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt11
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractorTest.kt44
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractorTest.kt60
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractorTest.kt52
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/scenetransition/LockscreenSceneTransitionInteractorTest.kt16
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModelTest.kt14
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenUserActionsViewModelTest.kt41
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterLegacyTest.java17
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModelTest.kt14
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/CastTileTest.java10
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt14
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt240
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneBackInteractorTest.kt35
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt84
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt187
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/ScrimStartableTest.kt101
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/StatusBarStartableTest.kt21
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/scene/shared/model/SceneDataSourceDelegatorTest.kt14
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/view/SceneJankMonitorTest.kt13
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerHapticsViewModelTest.kt4
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/PanelExpansionInteractorImplTest.kt4
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/NotificationShadeWindowModelTest.kt13
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt26
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt18
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/ui/viewmodel/OngoingActivityChipsViewModelTest.kt74
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorControllerTest.kt6
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderTest.kt3
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManagerTest.kt4
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapperTest.kt11
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackStateAnimatorTest.kt3
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt17
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/domain/interactor/KeyguardBypassInteractorTest.kt8
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt15
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt8
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModelTest.kt3
-rw-r--r--packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QS.java2
-rw-r--r--packages/SystemUI/pods/Android.bp11
-rw-r--r--packages/SystemUI/pods/com/android/systemui/dagger/Android.bp9
-rw-r--r--packages/SystemUI/pods/com/android/systemui/retail/Android.bp15
-rw-r--r--packages/SystemUI/pods/com/android/systemui/retail/data/Android.bp32
-rw-r--r--packages/SystemUI/pods/com/android/systemui/retail/domain/Android.bp24
-rw-r--r--packages/SystemUI/pods/com/android/systemui/util/settings/Android.bp12
-rw-r--r--packages/SystemUI/res-keyguard/values-es-rUS/strings.xml14
-rw-r--r--packages/SystemUI/res-keyguard/values-es/strings.xml6
-rw-r--r--packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml6
-rw-r--r--packages/SystemUI/res-keyguard/values-hi/strings.xml6
-rw-r--r--packages/SystemUI/res-keyguard/values-km/strings.xml4
-rw-r--r--packages/SystemUI/res-keyguard/values-ky/strings.xml6
-rw-r--r--packages/SystemUI/res-keyguard/values-mn/strings.xml6
-rw-r--r--packages/SystemUI/res-keyguard/values-ne/strings.xml2
-rw-r--r--packages/SystemUI/res-keyguard/values-pa/strings.xml2
-rw-r--r--packages/SystemUI/res-keyguard/values-ru/strings.xml2
-rw-r--r--packages/SystemUI/res-keyguard/values-sk/strings.xml6
-rw-r--r--packages/SystemUI/res-keyguard/values-te/strings.xml4
-rw-r--r--packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml2
-rw-r--r--packages/SystemUI/res/anim/volume_dialog_ringer_close.xml22
-rw-r--r--packages/SystemUI/res/anim/volume_dialog_ringer_open.xml22
-rw-r--r--packages/SystemUI/res/layout/media_output_list_group_divider.xml4
-rw-r--r--packages/SystemUI/res/layout/media_output_list_item_advanced.xml37
-rw-r--r--packages/SystemUI/res/values-af/strings.xml33
-rw-r--r--packages/SystemUI/res/values-af/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-am/strings.xml33
-rw-r--r--packages/SystemUI/res/values-am/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-ar/strings.xml35
-rw-r--r--packages/SystemUI/res/values-as/strings.xml31
-rw-r--r--packages/SystemUI/res/values-as/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-az/strings.xml33
-rw-r--r--packages/SystemUI/res/values-az/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-b+sr+Latn/strings.xml27
-rw-r--r--packages/SystemUI/res/values-b+sr+Latn/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-be/strings.xml29
-rw-r--r--packages/SystemUI/res/values-be/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-bg/strings.xml33
-rw-r--r--packages/SystemUI/res/values-bg/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-bn/strings.xml33
-rw-r--r--packages/SystemUI/res/values-bn/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-bs/strings.xml27
-rw-r--r--packages/SystemUI/res/values-bs/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-ca/strings.xml33
-rw-r--r--packages/SystemUI/res/values-ca/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-cs/strings.xml33
-rw-r--r--packages/SystemUI/res/values-cs/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-da/strings.xml33
-rw-r--r--packages/SystemUI/res/values-da/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-de/strings.xml35
-rw-r--r--packages/SystemUI/res/values-de/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-el/strings.xml35
-rw-r--r--packages/SystemUI/res/values-el/tiles_states_strings.xml12
-rw-r--r--packages/SystemUI/res/values-en-rAU/strings.xml33
-rw-r--r--packages/SystemUI/res/values-en-rAU/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-en-rCA/strings.xml15
-rw-r--r--packages/SystemUI/res/values-en-rCA/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-en-rGB/strings.xml33
-rw-r--r--packages/SystemUI/res/values-en-rGB/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-en-rIN/strings.xml33
-rw-r--r--packages/SystemUI/res/values-en-rIN/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-es-rUS/strings.xml39
-rw-r--r--packages/SystemUI/res/values-es-rUS/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-es/strings.xml33
-rw-r--r--packages/SystemUI/res/values-es/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-et/strings.xml33
-rw-r--r--packages/SystemUI/res/values-et/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-eu/strings.xml33
-rw-r--r--packages/SystemUI/res/values-eu/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-fa/strings.xml35
-rw-r--r--packages/SystemUI/res/values-fa/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-fi/strings.xml35
-rw-r--r--packages/SystemUI/res/values-fi/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-fr-rCA/strings.xml35
-rw-r--r--packages/SystemUI/res/values-fr-rCA/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-fr/strings.xml29
-rw-r--r--packages/SystemUI/res/values-fr/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-gl/strings.xml33
-rw-r--r--packages/SystemUI/res/values-gl/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-gu/strings.xml33
-rw-r--r--packages/SystemUI/res/values-gu/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-hi/strings.xml29
-rw-r--r--packages/SystemUI/res/values-hi/tiles_states_strings.xml10
-rw-r--r--packages/SystemUI/res/values-hr/strings.xml27
-rw-r--r--packages/SystemUI/res/values-hr/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-hu/strings.xml33
-rw-r--r--packages/SystemUI/res/values-hu/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-hy/strings.xml33
-rw-r--r--packages/SystemUI/res/values-hy/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-in/strings.xml33
-rw-r--r--packages/SystemUI/res/values-in/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-is/strings.xml33
-rw-r--r--packages/SystemUI/res/values-is/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-it/strings.xml27
-rw-r--r--packages/SystemUI/res/values-it/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-iw/strings.xml33
-rw-r--r--packages/SystemUI/res/values-ja/strings.xml29
-rw-r--r--packages/SystemUI/res/values-ja/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-ka/strings.xml25
-rw-r--r--packages/SystemUI/res/values-ka/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-kk/strings.xml39
-rw-r--r--packages/SystemUI/res/values-kk/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-km/strings.xml35
-rw-r--r--packages/SystemUI/res/values-km/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-kn/strings.xml33
-rw-r--r--packages/SystemUI/res/values-kn/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-ko/strings.xml33
-rw-r--r--packages/SystemUI/res/values-ko/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-ky/strings.xml33
-rw-r--r--packages/SystemUI/res/values-ky/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-land-television/dimens.xml2
-rw-r--r--packages/SystemUI/res/values-lo/strings.xml33
-rw-r--r--packages/SystemUI/res/values-lo/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-lt/strings.xml27
-rw-r--r--packages/SystemUI/res/values-lt/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-lv/strings.xml33
-rw-r--r--packages/SystemUI/res/values-lv/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-mk/strings.xml33
-rw-r--r--packages/SystemUI/res/values-mk/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-ml/strings.xml33
-rw-r--r--packages/SystemUI/res/values-ml/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-mn/strings.xml33
-rw-r--r--packages/SystemUI/res/values-mn/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-mr/strings.xml29
-rw-r--r--packages/SystemUI/res/values-mr/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-ms/strings.xml33
-rw-r--r--packages/SystemUI/res/values-ms/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-my/strings.xml35
-rw-r--r--packages/SystemUI/res/values-my/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-nb/strings.xml33
-rw-r--r--packages/SystemUI/res/values-nb/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-ne/strings.xml37
-rw-r--r--packages/SystemUI/res/values-ne/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-nl/strings.xml33
-rw-r--r--packages/SystemUI/res/values-nl/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-or/strings.xml43
-rw-r--r--packages/SystemUI/res/values-or/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-pa/strings.xml27
-rw-r--r--packages/SystemUI/res/values-pa/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-pl/strings.xml33
-rw-r--r--packages/SystemUI/res/values-pl/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-pt-rBR/strings.xml33
-rw-r--r--packages/SystemUI/res/values-pt-rBR/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-pt-rPT/strings.xml29
-rw-r--r--packages/SystemUI/res/values-pt-rPT/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-pt/strings.xml33
-rw-r--r--packages/SystemUI/res/values-pt/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-ro/strings.xml33
-rw-r--r--packages/SystemUI/res/values-ro/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-ru/strings.xml35
-rw-r--r--packages/SystemUI/res/values-ru/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-si/strings.xml33
-rw-r--r--packages/SystemUI/res/values-si/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-sk/strings.xml33
-rw-r--r--packages/SystemUI/res/values-sk/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-sl/strings.xml29
-rw-r--r--packages/SystemUI/res/values-sl/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-sq/strings.xml33
-rw-r--r--packages/SystemUI/res/values-sr/strings.xml27
-rw-r--r--packages/SystemUI/res/values-sr/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-sv/strings.xml37
-rw-r--r--packages/SystemUI/res/values-sv/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-sw/strings.xml33
-rw-r--r--packages/SystemUI/res/values-sw/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-ta/strings.xml33
-rw-r--r--packages/SystemUI/res/values-ta/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-te/strings.xml35
-rw-r--r--packages/SystemUI/res/values-te/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-th/strings.xml29
-rw-r--r--packages/SystemUI/res/values-th/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-tl/strings.xml35
-rw-r--r--packages/SystemUI/res/values-tl/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-tr/strings.xml33
-rw-r--r--packages/SystemUI/res/values-tr/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-uk/strings.xml33
-rw-r--r--packages/SystemUI/res/values-uk/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-ur/strings.xml27
-rw-r--r--packages/SystemUI/res/values-ur/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-uz/strings.xml33
-rw-r--r--packages/SystemUI/res/values-uz/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-vi/strings.xml33
-rw-r--r--packages/SystemUI/res/values-vi/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-zh-rCN/strings.xml33
-rw-r--r--packages/SystemUI/res/values-zh-rCN/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-zh-rHK/strings.xml27
-rw-r--r--packages/SystemUI/res/values-zh-rHK/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-zh-rTW/strings.xml27
-rw-r--r--packages/SystemUI/res/values-zh-rTW/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values-zu/strings.xml33
-rw-r--r--packages/SystemUI/res/values-zu/tiles_states_strings.xml8
-rw-r--r--packages/SystemUI/res/values/dimens.xml7
-rw-r--r--packages/SystemUI/res/values/strings.xml8
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java9
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/BouncerViewBinder.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/ComposeBouncerViewBinder.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/bouncer/ui/composable/BouncerContainer.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerOverlayContentViewModel.kt (renamed from packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModel.kt)6
-rw-r--r--packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerUserActionsViewModel.kt23
-rw-r--r--packages/SystemUI/src/com/android/systemui/common/shared/colors/SurfaceEffectColors.kt17
-rw-r--r--packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalEditModeViewModel.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalUserActionsViewModel.kt9
-rw-r--r--packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalViewModel.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/deviceentry/data/repository/DeviceEntryFaceAuthRepository.kt66
-rw-r--r--packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractor.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntrySourceInteractor.kt26
-rw-r--r--packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/SystemUIDeviceEntryFaceAuthInteractor.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModel.kt9
-rw-r--r--packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/TouchpadTutorialScreensProvider.kt12
-rw-r--r--packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/ActionTutorialContent.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/TutorialScreenConfig.kt1
-rw-r--r--packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/view/KeyboardTouchpadTutorialActivity.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/viewmodel/KeyboardTouchpadTutorialViewModel.kt16
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ResourceTrimmer.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractor.kt11
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardBypassInteractor.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardOcclusionInteractor.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractor.kt21
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt128
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt37
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/shared/model/Edge.kt25
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardState.kt7
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerToPrimaryBouncerTransitionViewModel.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodToPrimaryBouncerTransitionViewModel.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DozingToPrimaryBouncerTransitionViewModel.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt7
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModel.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenUserActionsViewModel.kt7
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToAodTransitionViewModel.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToDozingTransitionViewModel.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToLockscreenTransitionViewModel.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt19
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/controls/util/MediaUiEventLogger.kt26
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dagger/MediaModule.java22
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapterLegacy.java55
-rw-r--r--packages/SystemUI/src/com/android/systemui/model/SceneContainerPlugin.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModel.kt13
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt53
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModel.kt8
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModel.kt13
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt10
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/ShadelessSceneContainerFrameworkModule.kt10
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneContainerOcclusionInteractor.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt89
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/domain/interactor/WindowRootViewVisibilityInteractor.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/domain/startable/SceneContainerStartable.kt123
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/domain/startable/ScrimStartable.kt14
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/domain/startable/StatusBarStartable.kt9
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/shared/model/Overlays.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/shared/model/Scenes.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneJankMonitor.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/NotificationShadeWindowModel.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt94
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/chips/ui/compose/OngoingActivityChip.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/domain/interactor/StatusBarKeyguardViewManagerInteractor.kt9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/featurepods/media/ui/compose/MediaControlPopup.kt56
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopup.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopupChip.kt140
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopupChipsContainer.kt27
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorController.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/BundleEntry.java34
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/GroupEntry.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListAttachState.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListEntry.java37
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineEntry.java66
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java138
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/SuppressedAttachState.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BundleCoordinator.kt10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinator.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinator.kt18
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DataStoreCoordinator.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DismissibilityCoordinator.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GroupCountCoordinator.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GroupWhenCoordinator.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GutsCoordinator.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt24
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinator.kt10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/OriginalUnseenKeyguardCoordinator.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java19
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAlertTimeCoordinator.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinator.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinator.kt16
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ShadeEventCoordinator.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/StackCoordinator.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java15
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProvider.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnAfterRenderListListener.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeFinalizeFilterListener.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeRenderListListener.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeSortListener.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeTransformGroupsListener.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderHelper.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderLogger.kt22
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifComparator.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifSectioner.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifStabilityManager.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/HighPriorityProvider.java27
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionStyleProvider.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupMembershipManager.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupMembershipManagerImpl.java20
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewBarn.kt10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewRenderer.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/domain/interactor/RenderNotificationListInteractor.kt14
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/ConnectedDisplaysStatusBarNotificationIconViewStore.kt18
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/KeyguardNotificationVisibilityProvider.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleNotificationIdentifier.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java37
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java29
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCallTemplateViewWrapper.kt39
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt3
-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/row/wrapper/NotificationTemplateViewWrapper.java37
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MediaContainerView.kt33
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModel.kt7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java24
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt14
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt15
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/pipeline/shared/ui/composable/StatusBarRoot.kt27
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModel.kt1
-rw-r--r--packages/SystemUI/src/com/android/systemui/touchpad/tutorial/TouchpadTutorialModule.kt8
-rw-r--r--packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/BackGestureTutorialScreen.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/GestureTutorialScreen.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/HomeGestureTutorialScreen.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserLockedInteractor.kt12
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/Events.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/binder/VolumeDialogRingerViewBinder.kt16
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt14
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/viewmodel/VolumeDialogSettingsButtonViewModel.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt13
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModel.kt23
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/ui/VolumeDialogUiEvent.kt60
-rw-r--r--packages/SystemUI/src/com/android/systemui/volume/dialog/ui/viewmodel/VolumeDialogPluginViewModel.kt33
-rw-r--r--packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java6
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/animation/FontInterpolatorTest.kt6
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/composable/BouncerContentTest.kt6
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/animation/ColorSchemeTransitionTest.kt21
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerTest.kt7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManagerTest.kt33
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/tiles/BluetoothTileTest.kt8
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilderTest.java34
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerWithScenesTest.kt2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ScrimControllerTest.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/unfold/UnfoldLatencyTrackerTest.kt3
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java13
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelKosmos.kt16
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt4
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryUtil.kt66
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeSceneDataSource.kt13
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java6
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/user/domain/interactor/UserLockedInteractorKosmos.kt5
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelKosmos.kt2
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/settings/ui/viewmodel/VolumeDialogSettingsButtonViewModelKosmos.kt2
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModelKosmos.kt2
-rw-r--r--ravenwood/Android.bp10
-rw-r--r--ravenwood/Framework.bp4
-rw-r--r--ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodContext.java10
-rw-r--r--ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodNativeLoader.java39
-rw-r--r--ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java13
-rw-r--r--ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodJdkPatch.java19
-rw-r--r--ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodRuntimeNative.java2
-rw-r--r--ravenwood/runtime-helper-src/libcore-fake/dalvik/system/CloseGuard.java198
-rw-r--r--ravenwood/runtime-helper-src/libcore-fake/libcore/io/IoBridge.java63
-rw-r--r--ravenwood/runtime-helper-src/libcore-fake/libcore/util/NativeAllocationRegistry.java63
-rw-r--r--ravenwood/runtime-jni/ravenwood_runtime.cpp6
-rw-r--r--ravenwood/texts/ravenwood-annotation-allowed-classes.txt231
-rw-r--r--ravenwood/texts/ravenwood-build.prop6
-rw-r--r--ravenwood/texts/ravenwood-common-policies.txt4
-rw-r--r--ravenwood/texts/ravenwood-framework-policies.txt19
-rw-r--r--services/accessibility/accessibility.aconfig10
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java4
-rw-r--r--services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickIndicatorView.java1
-rw-r--r--services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java129
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java31
-rw-r--r--services/accessibility/java/com/android/server/accessibility/magnification/MagnificationGestureHandler.java3
-rw-r--r--services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java6
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java11
-rw-r--r--services/core/java/com/android/server/am/ProcessList.java17
-rw-r--r--services/core/java/com/android/server/appop/AppOpsService.java92
-rw-r--r--services/core/java/com/android/server/audio/AudioService.java206
-rw-r--r--services/core/java/com/android/server/audio/HardeningEnforcer.java62
-rw-r--r--services/core/java/com/android/server/biometrics/BiometricService.java20
-rw-r--r--services/core/java/com/android/server/content/ContentService.java9
-rw-r--r--services/core/java/com/android/server/inputmethod/ClientController.java26
-rw-r--r--services/core/java/com/android/server/inputmethod/ClientState.java34
-rw-r--r--services/core/java/com/android/server/inputmethod/IInputMethodClientInvoker.java16
-rw-r--r--services/core/java/com/android/server/inputmethod/IInputMethodManagerImpl.java12
-rw-r--r--services/core/java/com/android/server/inputmethod/ImeBindingState.java35
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java106
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodMenuControllerNew.java23
-rw-r--r--services/core/java/com/android/server/inputmethod/UserData.java6
-rw-r--r--services/core/java/com/android/server/inputmethod/ZeroJankProxy.java10
-rw-r--r--services/core/java/com/android/server/location/contexthub/ContextHubEndpointBroker.java27
-rw-r--r--services/core/java/com/android/server/location/contexthub/ContextHubEndpointManager.java3
-rw-r--r--services/core/java/com/android/server/location/contexthub/ContextHubService.java4
-rw-r--r--services/core/java/com/android/server/location/injector/SystemEmergencyHelper.java32
-rw-r--r--services/core/java/com/android/server/om/OverlayManagerSettings.java1
-rw-r--r--services/core/java/com/android/server/pm/AppDataHelper.java6
-rw-r--r--services/core/java/com/android/server/pm/BackgroundInstallControlService.java3
-rw-r--r--services/core/java/com/android/server/pm/DeletePackageHelper.java25
-rw-r--r--services/core/java/com/android/server/pm/InstallPackageHelper.java2
-rw-r--r--services/core/java/com/android/server/pm/PackageFreezer.java6
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerInternalBase.java2
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java71
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerServiceInjector.java8
-rw-r--r--services/core/java/com/android/server/pm/PreferredActivityHelper.java4
-rw-r--r--services/core/java/com/android/server/pm/RemovePackageHelper.java14
-rw-r--r--services/core/java/com/android/server/pm/Settings.java3
-rw-r--r--services/core/java/com/android/server/pm/permission/PermissionManagerService.java3
-rw-r--r--services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java3
-rw-r--r--services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java3
-rw-r--r--services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java3
-rw-r--r--services/core/java/com/android/server/power/stats/BatteryStatsImpl.java14
-rw-r--r--services/core/java/com/android/server/power/stats/processor/AmbientDisplayPowerStatsProcessor.java10
-rw-r--r--services/core/java/com/android/server/power/stats/processor/CpuPowerStatsProcessor.java35
-rw-r--r--services/core/java/com/android/server/power/stats/processor/MobileRadioPowerStatsProcessor.java4
-rw-r--r--services/core/java/com/android/server/power/stats/processor/MultiStateStats.java29
-rw-r--r--services/core/java/com/android/server/power/stats/processor/PhoneCallPowerStatsProcessor.java15
-rw-r--r--services/core/java/com/android/server/power/stats/processor/PowerComponentAggregatedPowerStats.java35
-rw-r--r--services/core/java/com/android/server/power/stats/processor/SensorPowerStatsProcessor.java10
-rw-r--r--services/core/java/com/android/server/security/CertificateRevocationStatusManager.java281
-rw-r--r--services/core/java/com/android/server/security/UpdateCertificateRevocationStatusJobService.java28
-rw-r--r--services/core/java/com/android/server/storage/ImmutableVolumeInfo.java5
-rw-r--r--services/core/java/com/android/server/storage/WatchedVolumeInfo.java5
-rw-r--r--services/core/java/com/android/server/wallpaper/WallpaperCropper.java53
-rw-r--r--services/core/java/com/android/server/wallpaper/WallpaperManagerService.java26
-rw-r--r--services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java6
-rw-r--r--services/core/java/com/android/server/wm/AppCompatCameraOverrides.java37
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java35
-rw-r--r--services/core/java/com/android/server/wm/InsetsPolicy.java112
-rw-r--r--services/core/java/com/android/server/wm/TaskFragment.java4
-rw-r--r--services/core/java/com/android/server/wm/Transition.java76
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java9
-rw-r--r--services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidManifest.xml4
-rw-r--r--services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidTest.xml7
-rw-r--r--services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java15
-rw-r--r--services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/ClientControllerTest.java39
-rw-r--r--services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java4
-rw-r--r--services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java5
-rw-r--r--services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceWindowGainedFocusTest.java2
-rw-r--r--services/tests/mockingservicestests/res/xml/expectedUserWakeupList_1.xml20
-rw-r--r--services/tests/mockingservicestests/res/xml/expectedUserWakeupList_2.xml19
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/alarm/UserWakeupStoreTest.java56
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/crashrecovery/AndroidTest.xml5
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt5
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java2
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/rollback/AndroidTest.xml5
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperCropperTest.java194
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java100
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/AggregatedPowerStatsTest.java4
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/AmbientDisplayPowerStatsProcessorTest.java2
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/BasePowerStatsProcessorTest.java16
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/BinaryStatePowerStatsProcessorTest.java21
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/BluetoothPowerStatsProcessorTest.java4
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/CameraPowerStatsTest.java11
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/CustomEnergyConsumerPowerStatsTest.java2
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/GnssPowerStatsTest.java31
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/MobileRadioPowerStatsProcessorTest.java2
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/MultiStateStatsTest.java6
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/PhoneCallPowerStatsProcessorTest.java2
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/ScreenPowerStatsProcessorTest.java2
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/SensorPowerStatsProcessorTest.java2
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/WakelockPowerStatsProcessorTest.java2
-rw-r--r--services/tests/powerstatstests/src/com/android/server/power/stats/processor/WifiPowerStatsProcessorTest.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickTypePanelTest.java105
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java50
-rw-r--r--services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationGestureHandlerTest.java37
-rw-r--r--services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java12
-rw-r--r--services/tests/servicestests/src/com/android/server/om/OverlayManagerSettingsTests.java46
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java36
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java2
-rw-r--r--services/tests/vibrator/src/com/android/server/vibrator/VibrationThreadTest.java727
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java30
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java92
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TransitionTests.java24
-rw-r--r--services/voiceinteraction/java/com/android/server/soundtrigger/PhoneCallStateHandler.java35
-rw-r--r--tests/AttestationVerificationTest/src/com/android/server/security/CertificateRevocationStatusManagerTest.java267
-rw-r--r--tests/PackageWatchdog/Android.bp1
-rw-r--r--tests/PackageWatchdog/AndroidManifest.xml6
-rw-r--r--tests/PackageWatchdog/AndroidTest.xml36
-rw-r--r--tests/vcn/Android.bp5
-rw-r--r--tests/vcn/AndroidManifest.xml2
-rw-r--r--tools/aapt2/link/FlaggedResources_test.cpp14
1332 files changed, 15294 insertions, 12489 deletions
diff --git a/ADPF_OWNERS b/ADPF_OWNERS
index bcdc33825a13..c7ff4640b185 100644
--- a/ADPF_OWNERS
+++ b/ADPF_OWNERS
@@ -1,4 +1,5 @@
-sumir@google.com
+adyabr@google.com
chingtangyu@google.com
-xwxw@google.com
mattbuckley@google.com
+sumir@google.com
+xwxw@google.com \ No newline at end of file
diff --git a/AconfigFlags.bp b/AconfigFlags.bp
index 8b95679f318f..8bfac03060b5 100644
--- a/AconfigFlags.bp
+++ b/AconfigFlags.bp
@@ -610,6 +610,13 @@ cc_aconfig_library {
vendor_available: true,
}
+java_aconfig_library {
+ name: "android.os.vibrator.flags-aconfig-java-host",
+ aconfig_declarations: "android.os.vibrator.flags-aconfig",
+ host_supported: true,
+ defaults: ["framework-minus-apex-aconfig-java-defaults"],
+}
+
// View
aconfig_declarations {
name: "android.view.flags-aconfig",
diff --git a/apct-tests/perftests/core/src/android/os/TracePerfTest.java b/apct-tests/perftests/core/src/android/os/TracePerfTest.java
index 0b941c9d83c0..d9051240d399 100644
--- a/apct-tests/perftests/core/src/android/os/TracePerfTest.java
+++ b/apct-tests/perftests/core/src/android/os/TracePerfTest.java
@@ -127,14 +127,14 @@ public class TracePerfTest {
public void testInstantPerfettoWithArgs() {
PerfettoTrace.instant(FOO_CATEGORY, "testInstantP")
.addArg("foo", "bar")
- .addFlow(1)
+ .setFlow(1)
.emit();
BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
while (state.keepRunning()) {
PerfettoTrace.instant(FOO_CATEGORY, "testInstantP")
.addArg("foo", "bar")
- .addFlow(1)
+ .setFlow(1)
.emit();
}
}
diff --git a/boot/boot-image-profile-extra.txt b/boot/boot-image-profile-extra.txt
index ced0d176f174..ce99bfed1ce3 100644
--- a/boot/boot-image-profile-extra.txt
+++ b/boot/boot-image-profile-extra.txt
@@ -45,11 +45,15 @@ HSPLandroid/os/MessageQueue$OnFileDescriptorEventListener;->*
HSPLandroid/os/MessageQueue$StackNodeType;->*
HSPLandroid/os/MessageQueue$StateNode;->*
HSPLandroid/os/MessageQueue$TimedParkStateNode;->*
+
+# For now, compile all methods in PerfettoTrace and PerfettoTrackEventExtra.
+# Similar to the existing Trace APIs, these new APIs can impact the performance
+# of many subsystems including MessageQueue. This also keeps benchmark
+# comparisons between both APIs fair.
HSPLandroid/os/PerfettoTrace$Category;->*
HSPLandroid/os/PerfettoTrace;->*
HSPLandroid/os/PerfettoTrackEventExtra;->*
-HSPLandroid/os/PerfettoTrackEventExtra$BuilderImpl;->*
-HSPLandroid/os/PerfettoTrackEventExtra$NoOpBuilder;->*
+HSPLandroid/os/PerfettoTrackEventExtra$Builder;->*
HSPLandroid/os/PerfettoTrackEventExtra$ArgBool;->*
HSPLandroid/os/PerfettoTrackEventExtra$ArgInt64;->*
HSPLandroid/os/PerfettoTrackEventExtra$ArgDouble;->*
diff --git a/core/api/current.txt b/core/api/current.txt
index 9ebb5068bf19..4862236a35e3 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -53802,8 +53802,8 @@ package android.view {
method @FlaggedApi("com.android.graphics.hwui.flags.limited_hdr") public void setDesiredHdrHeadroom(@FloatRange(from=0.0f, to=10000.0) float);
method public void setSecure(boolean);
method public void setSurfaceLifecycle(int);
- method public void setZOrderMediaOverlay(boolean);
- method public void setZOrderOnTop(boolean);
+ method @Deprecated @FlaggedApi("android.view.flags.deprecate_surface_view_z_order_apis") public void setZOrderMediaOverlay(boolean);
+ method @Deprecated @FlaggedApi("android.view.flags.deprecate_surface_view_z_order_apis") public void setZOrderOnTop(boolean);
field public static final int SURFACE_LIFECYCLE_DEFAULT = 0; // 0x0
field public static final int SURFACE_LIFECYCLE_FOLLOWS_ATTACHMENT = 2; // 0x2
field public static final int SURFACE_LIFECYCLE_FOLLOWS_VISIBILITY = 1; // 0x1
diff --git a/core/api/module-lib-current.txt b/core/api/module-lib-current.txt
index 40069aa00106..526a213a6003 100644
--- a/core/api/module-lib-current.txt
+++ b/core/api/module-lib-current.txt
@@ -165,6 +165,16 @@ package android.hardware.usb {
package android.media {
+ public class AudioDeviceVolumeManager {
+ method @FlaggedApi("android.media.audio.unify_absolute_volume_management") @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED, android.Manifest.permission.BLUETOOTH_PRIVILEGED, android.Manifest.permission.BLUETOOTH_STACK}) public void setDeviceAbsoluteMultiVolumeBehavior(@NonNull android.media.AudioDeviceAttributes, @NonNull java.util.List<android.media.VolumeInfo>, @NonNull java.util.concurrent.Executor, @NonNull android.media.AudioDeviceVolumeManager.OnAudioDeviceVolumeChangedListener);
+ method @FlaggedApi("android.media.audio.unify_absolute_volume_management") @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED, android.Manifest.permission.BLUETOOTH_PRIVILEGED, android.Manifest.permission.BLUETOOTH_STACK}) public void setDeviceAbsoluteVolumeBehavior(@NonNull android.media.AudioDeviceAttributes, @NonNull android.media.VolumeInfo, @NonNull java.util.concurrent.Executor, @NonNull android.media.AudioDeviceVolumeManager.OnAudioDeviceVolumeChangedListener);
+ }
+
+ @FlaggedApi("android.media.audio.unify_absolute_volume_management") public static interface AudioDeviceVolumeManager.OnAudioDeviceVolumeChangedListener {
+ method public void onAudioDeviceVolumeAdjusted(@NonNull android.media.AudioDeviceAttributes, @NonNull android.media.VolumeInfo, int, int);
+ method public void onAudioDeviceVolumeChanged(@NonNull android.media.AudioDeviceAttributes, @NonNull android.media.VolumeInfo);
+ }
+
public class AudioManager {
method public void adjustStreamVolumeForUid(int, int, int, @NonNull String, int, int, int);
method public void adjustSuggestedStreamVolumeForUid(int, int, int, @NonNull String, int, int, int);
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 4222c7c64672..514a58244aa2 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -2586,7 +2586,7 @@ package android.os {
}
public class UserManager {
- method @FlaggedApi("android.os.allow_private_profile") @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}, conditional=true) public boolean canAddPrivateProfile();
+ method @FlaggedApi("android.os.allow_private_profile") @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean canAddPrivateProfile();
method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createProfileForUser(@Nullable String, @NonNull String, int, int, @Nullable String[]);
method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createRestrictedProfile(@Nullable String);
method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createUser(@Nullable String, @NonNull String, int);
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index ee9c64f97382..b4f653354e07 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -7684,16 +7684,19 @@ public class Activity extends ContextThemeWrapper
/**
* Change the desired orientation of this activity. If the activity is currently in the
* foreground or otherwise impacting the screen orientation, the screen is immediately changed
- * (possibly causing the activity to be restarted). Otherwise, the requested orientation is used
- * the next time the activity is visible.
+ * (possibly causing the activity to be restarted). Otherwise, the new orientation is used the
+ * next time the activity is visible.
*
* <aside class="note"><b>Note:</b>
* <ul>
- * <li>Device manufacturers can configure devices to override (ignore) calls to this
- * method to improve the layout of orientation-restricted apps.</li>
+ * <li>To improve the layout of apps on form factors with smallest width >= 600dp, the
+ * system ignores calls to this method for apps that target Android 16 (API level
+ * 36) or higher.</li>
+ * <li>Device manufacturers can configure devices to ignore calls to this method to
+ * improve the layout of orientation-restricted apps.</li>
* <li>On devices with Android 16 (API level 36) or higher installed, virtual device
- * owners (limited to select trusted and privileged apps) can optimize app layout on
- * displays they manage by ignoring calls to this method. See also
+ * owners (select trusted and privileged apps) can optimize app layout on displays
+ * they manage by ignoring calls to this method. See also
* <a href="https://source.android.com/docs/core/permissions/app-streaming">
* Companion app streaming</a>.</li>
* </ul>
@@ -7717,17 +7720,20 @@ public class Activity extends ContextThemeWrapper
}
/**
- * Return the current requested orientation of the activity. This is either the orientation
- * requested in the app manifest, or the last requested orientation given to
+ * Returns the current requested orientation of the activity, which is either the orientation
+ * requested in the app manifest or the last orientation given to
* {@link #setRequestedOrientation(int)}.
*
* <aside class="note"><b>Note:</b>
* <ul>
+ * <li>To improve the layout of apps on form factors with smallest width >= 600dp, the
+ * system ignores calls to this method for apps that target Android 16 (API level
+ * 36) or higher.</li>
* <li>Device manufacturers can configure devices to ignore calls to this method to
* improve the layout of orientation-restricted apps.</li>
* <li>On devices with Android 16 (API level 36) or higher installed, virtual device
- * owners (limited to select trusted and privileged apps) can optimize app layout on
- * displays they manage by ignoring calls to this method. See also
+ * owners (select trusted and privileged apps) can optimize app layout on displays
+ * they manage by ignoring calls to this method. See also
* <a href="https://source.android.com/docs/core/permissions/app-streaming">
* Companion app streaming</a>.</li>
* </ul>
diff --git a/core/java/android/app/ActivityManagerInternal.java b/core/java/android/app/ActivityManagerInternal.java
index 6151b8e2ef0a..a12c0674998e 100644
--- a/core/java/android/app/ActivityManagerInternal.java
+++ b/core/java/android/app/ActivityManagerInternal.java
@@ -23,6 +23,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.PermissionMethod;
import android.annotation.PermissionName;
+import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.UserIdInt;
import android.app.ActivityManager.ProcessCapability;
import android.app.ActivityManager.RestrictionLevel;
@@ -1365,8 +1366,8 @@ public abstract class ActivityManagerInternal {
* watchdog reset.
* @hide
*/
- public abstract void killApplicationSync(String pkgName, int appId, int userId,
- String reason, int exitInfoReason);
+ public abstract void killApplicationSync(String pkgName, int appId,
+ @CanBeALL @UserIdInt int userId, String reason, int exitInfoReason);
/**
* Queries the offset data for a given method on a process.
diff --git a/core/java/android/app/AppOpsManagerInternal.java b/core/java/android/app/AppOpsManagerInternal.java
index 8b7ea0f8b46a..a0f193089f4b 100644
--- a/core/java/android/app/AppOpsManagerInternal.java
+++ b/core/java/android/app/AppOpsManagerInternal.java
@@ -233,4 +233,9 @@ public abstract class AppOpsManagerInternal {
*/
public abstract int getOpRestrictionCount(int code, UserHandle user, String pkg,
String attributionTag);
+
+ /**
+ * Invoke when a package is added.
+ */
+ public abstract void onPackageAdded(String pkgName, int uid);
}
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index b611acf79bc3..eb9feb95bf3d 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -50,6 +50,7 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.ravenwood.annotation.RavenwoodKeep;
import android.ravenwood.annotation.RavenwoodKeepPartialClass;
+import android.ravenwood.annotation.RavenwoodKeepWholeClass;
import android.ravenwood.annotation.RavenwoodReplace;
import android.util.AndroidRuntimeException;
import android.util.Log;
@@ -460,6 +461,7 @@ public class Instrumentation {
*
* @param runner The code to run on the main thread.
*/
+ @RavenwoodReplace(blockedBy = ActivityThread.class)
public void runOnMainSync(Runnable runner) {
validateNotAppThread();
SyncRunnable sr = new SyncRunnable(runner);
@@ -467,6 +469,13 @@ public class Instrumentation {
sr.waitForComplete();
}
+ private void runOnMainSync$ravenwood(Runnable runner) {
+ validateNotAppThread();
+ SyncRunnable sr = new SyncRunnable(runner);
+ mInstrContext.getMainExecutor().execute(sr);
+ sr.waitForComplete();
+ }
+
boolean isSdkSandboxAllowedToStartActivities() {
return Process.isSdkSandbox()
&& mThread != null
@@ -2442,7 +2451,8 @@ public class Instrumentation {
}
}
- private final void validateNotAppThread() {
+ @RavenwoodKeep
+ private void validateNotAppThread() {
if (Looper.myLooper() == Looper.getMainLooper()) {
throw new RuntimeException(
"This method can not be called from the main application thread");
@@ -2586,6 +2596,7 @@ public class Instrumentation {
}
}
+ @RavenwoodKeepWholeClass
private static final class SyncRunnable implements Runnable {
private final Runnable mTarget;
private boolean mComplete;
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 06047a42e70d..719e4389d92d 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -5966,7 +5966,9 @@ public class Notification implements Parcelable
|| resId == getMessagingCompactHeadsUpLayoutResource()
|| resId == getCollapsedMessagingLayoutResource()
|| resId == getCollapsedMediaLayoutResource()
- || resId == getCollapsedConversationLayoutResource());
+ || resId == getCollapsedConversationLayoutResource()
+ || (notificationsRedesignTemplates()
+ && resId == getCollapsedCallLayoutResource()));
RemoteViews contentView = new BuilderRemoteViews(mContext.getApplicationInfo(), resId);
resetStandardTemplate(contentView);
@@ -11035,6 +11037,7 @@ public class Notification implements Parcelable
private RemoteViews makeCallLayout(int viewType) {
final boolean isCollapsed = viewType == StandardTemplateParams.VIEW_TYPE_NORMAL;
+ final boolean isHeadsUp = viewType == StandardTemplateParams.VIEW_TYPE_HEADS_UP;
Bundle extras = mBuilder.mN.extras;
CharSequence title = mPerson != null ? mPerson.getName() : null;
CharSequence text = mBuilder.processLegacyText(extras.getCharSequence(EXTRA_TEXT));
@@ -11050,22 +11053,31 @@ public class Notification implements Parcelable
.hideLeftIcon(true)
.hideRightIcon(true)
.hideAppName(isCollapsed)
- .titleViewId(R.id.conversation_text)
.title(title)
- .text(text)
- .summaryText(mBuilder.processLegacyText(mVerificationText));
+ .text(text);
+ if (!notificationsRedesignTemplates()) {
+ // We're using the normal title in the redesign, not a special text.
+ p.titleViewId(R.id.conversation_text)
+ // The verification text is now part of the top line views, so this is no
+ // longer necessary.
+ .summaryText(mBuilder.processLegacyText(mVerificationText));
+ }
mBuilder.mActions = getActionsListWithSystemActions();
final RemoteViews contentView;
if (isCollapsed) {
contentView = mBuilder.applyStandardTemplate(
mBuilder.getCollapsedCallLayoutResource(), p, null /* result */);
+ } else if (notificationsRedesignTemplates() && isHeadsUp) {
+ contentView = mBuilder.applyStandardTemplateWithActions(
+ mBuilder.getCollapsedCallLayoutResource(), p, null /* result */);
} else {
contentView = mBuilder.applyStandardTemplateWithActions(
mBuilder.getExpandedCallLayoutResource(), p, null /* result */);
}
// Bind some extra conversation-specific header fields.
- if (!p.mHideAppName) {
+ if (!notificationsRedesignTemplates() && !p.mHideAppName) {
+ // Redesign note: This special divider is no longer needed.
mBuilder.setTextViewColorSecondary(contentView, R.id.app_name_divider, p);
contentView.setViewVisibility(R.id.app_name_divider, View.VISIBLE);
}
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 500f7585b673..5359ba44a3d2 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -17647,9 +17647,17 @@ public class DevicePolicyManager {
android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS
})
public boolean isFinancedDevice() {
- return isDeviceManaged()
- && getDeviceOwnerType(getDeviceOwnerComponentOnAnyUser())
- == DEVICE_OWNER_TYPE_FINANCED;
+ try {
+ return isDeviceManaged()
+ && getDeviceOwnerType(getDeviceOwnerComponentOnAnyUser())
+ == DEVICE_OWNER_TYPE_FINANCED;
+ } catch (IllegalStateException e) {
+ // getDeviceOwnerType() will throw IllegalStateException if the device does not have a
+ // DO. This can happen under a race condition when the DO is removed after
+ // isDeviceManaged() (so it still returns true) but before getDeviceOwnerType().
+ // In this case, the device should not be considered a financed device.
+ return false;
+ }
}
// TODO(b/315298076): revert ag/25574027 and update the doc
diff --git a/core/java/android/app/supervision/flags.aconfig b/core/java/android/app/supervision/flags.aconfig
index 94de03877fd7..709418393479 100644
--- a/core/java/android/app/supervision/flags.aconfig
+++ b/core/java/android/app/supervision/flags.aconfig
@@ -72,3 +72,11 @@ flag {
description: "Flag that enables system APIs in Supervision Manager"
bug: "382034839"
}
+
+flag {
+ name: "enable_web_content_filters_screen"
+ is_exported: true
+ namespace: "supervision"
+ description: "Flag that enables the web content filters screen with Supervision settings entry point"
+ bug: "395134536"
+}
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index efcaa0ea6f07..a753cbf956c6 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -23,6 +23,8 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
+import android.annotation.SpecialUsers.CanBeALL;
+import android.annotation.SpecialUsers.CanBeCURRENT;
import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.TestApi;
@@ -2709,7 +2711,7 @@ public abstract class ContentResolver implements ContentInterface {
public final void registerContentObserverAsUser(@NonNull Uri uri,
boolean notifyForDescendants,
@NonNull ContentObserver observer,
- @NonNull UserHandle userHandle) {
+ @NonNull @CanBeALL @CanBeCURRENT UserHandle userHandle) {
Objects.requireNonNull(uri, "uri");
Objects.requireNonNull(observer, "observer");
Objects.requireNonNull(userHandle, "userHandle");
@@ -2723,7 +2725,7 @@ public abstract class ContentResolver implements ContentInterface {
/** @hide - designated user version */
@UnsupportedAppUsage
public final void registerContentObserver(Uri uri, boolean notifyForDescendants,
- ContentObserver observer, @UserIdInt int userHandle) {
+ ContentObserver observer, @CanBeALL @CanBeCURRENT @UserIdInt int userHandle) {
try {
getContentService().registerContentObserver(uri, notifyForDescendants,
observer.getContentObserver(), userHandle, mTargetSdkVersion);
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 05596318aef5..2658efab0e44 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -482,7 +482,6 @@ public class Resources {
*
* @return Typeface The Typeface data associated with the resource.
*/
- @RavenwoodThrow(blockedBy = Typeface.class)
@NonNull public Typeface getFont(@FontRes int id) throws NotFoundException {
final TypedValue value = obtainTempTypedValue();
try {
@@ -507,7 +506,6 @@ public class Resources {
/**
* @hide
*/
- @RavenwoodThrow(blockedBy = Typeface.class)
public void preloadFonts(@ArrayRes int id) {
final TypedArray array = obtainTypedArray(id);
try {
diff --git a/core/java/android/content/res/ResourcesImpl.java b/core/java/android/content/res/ResourcesImpl.java
index eec30f38b415..8c76fd70afd9 100644
--- a/core/java/android/content/res/ResourcesImpl.java
+++ b/core/java/android/content/res/ResourcesImpl.java
@@ -1068,7 +1068,6 @@ public class ResourcesImpl {
* Loads a font from XML or resources stream.
*/
@Nullable
- @RavenwoodThrow(blockedBy = Typeface.class)
public Typeface loadFont(Resources wrapper, TypedValue value, int id) {
if (value.string == null) {
throw new NotFoundException("Resource \"" + getResourceName(id) + "\" ("
diff --git a/core/java/android/content/res/TypedArray.java b/core/java/android/content/res/TypedArray.java
index 79185a10e156..ee7d008cf314 100644
--- a/core/java/android/content/res/TypedArray.java
+++ b/core/java/android/content/res/TypedArray.java
@@ -1043,7 +1043,6 @@ public class TypedArray implements AutoCloseable {
* not a font resource.
*/
@Nullable
- @RavenwoodThrow(blockedBy = Typeface.class)
public Typeface getFont(@StyleableRes int index) {
if (mRecycled) {
throw new RuntimeException("Cannot make calls to a recycled instance!");
diff --git a/core/java/android/graphics/fonts/FontFamilyUpdateRequest.java b/core/java/android/graphics/fonts/FontFamilyUpdateRequest.java
index bfbcfd828114..1bf01f4beb1b 100644
--- a/core/java/android/graphics/fonts/FontFamilyUpdateRequest.java
+++ b/core/java/android/graphics/fonts/FontFamilyUpdateRequest.java
@@ -68,6 +68,7 @@ import java.util.Objects;
* @hide
*/
@SystemApi
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class FontFamilyUpdateRequest {
/**
diff --git a/core/java/android/graphics/fonts/FontFileUpdateRequest.java b/core/java/android/graphics/fonts/FontFileUpdateRequest.java
index cf1dca965216..1f2be6fa5050 100644
--- a/core/java/android/graphics/fonts/FontFileUpdateRequest.java
+++ b/core/java/android/graphics/fonts/FontFileUpdateRequest.java
@@ -28,6 +28,7 @@ import java.util.Objects;
* @hide
*/
@SystemApi
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class FontFileUpdateRequest {
private final ParcelFileDescriptor mParcelFileDescriptor;
diff --git a/core/java/android/hardware/contexthub/HubEndpoint.java b/core/java/android/hardware/contexthub/HubEndpoint.java
index b7edef619a67..47ba51d98323 100644
--- a/core/java/android/hardware/contexthub/HubEndpoint.java
+++ b/core/java/android/hardware/contexthub/HubEndpoint.java
@@ -126,7 +126,16 @@ public class HubEndpoint {
if (sessionExists) {
Log.w(
TAG,
- "onSessionOpenComplete: session already exists, id=" + sessionId);
+ "onSessionOpenRequest: session already exists, id=" + sessionId);
+ }
+
+ if (mLifecycleCallback == null) {
+ Log.w(
+ TAG,
+ "onSessionOpenRequest: "
+ + "failed to open session, no lifecycle callback attached",
+ new Exception());
+ rejectSession(sessionId);
}
if (!sessionExists && mLifecycleCallback != null) {
diff --git a/core/java/android/hardware/contexthub/HubEndpointSession.java b/core/java/android/hardware/contexthub/HubEndpointSession.java
index ca59be8fcc65..c5e2d7a1d9f9 100644
--- a/core/java/android/hardware/contexthub/HubEndpointSession.java
+++ b/core/java/android/hardware/contexthub/HubEndpointSession.java
@@ -88,7 +88,6 @@ public class HubEndpointSession implements AutoCloseable {
: ContextHubTransaction.TYPE_HUB_MESSAGE_DEFAULT);
if (!isResponseRequired) {
// If the message doesn't require acknowledgement, respond with success immediately
- // TODO(b/379162322): Improve handling of synchronous failures.
mHubEndpoint.sendMessage(this, message, null);
ret.setResponse(
new ContextHubTransaction.Response<>(
diff --git a/core/java/android/os/CombinedMessageQueue/MessageQueue.java b/core/java/android/os/CombinedMessageQueue/MessageQueue.java
index 3c03bb5626c8..74972346bf2e 100644
--- a/core/java/android/os/CombinedMessageQueue/MessageQueue.java
+++ b/core/java/android/os/CombinedMessageQueue/MessageQueue.java
@@ -130,7 +130,7 @@ public final class MessageQueue {
MessageQueue(boolean quitAllowed) {
initIsProcessAllowedToUseConcurrent();
- mUseConcurrent = sIsProcessAllowedToUseConcurrent && !isInstrumenting();
+ mUseConcurrent = sIsProcessAllowedToUseConcurrent;
mQuitAllowed = quitAllowed;
mPtr = nativeInit();
mThread = Thread.currentThread();
@@ -202,15 +202,6 @@ public final class MessageQueue {
return;
}
- private static boolean isInstrumenting() {
- final ActivityThread activityThread = ActivityThread.currentActivityThread();
- if (activityThread == null) {
- return false;
- }
- final Instrumentation instrumentation = activityThread.getInstrumentation();
- return instrumentation != null && instrumentation.isInstrumenting();
- }
-
@Override
protected void finalize() throws Throwable {
try {
diff --git a/core/java/android/os/PerfettoTrace.java b/core/java/android/os/PerfettoTrace.java
index 741d542ecb3b..932836f8a050 100644
--- a/core/java/android/os/PerfettoTrace.java
+++ b/core/java/android/os/PerfettoTrace.java
@@ -232,10 +232,6 @@ public final class PerfettoTrace {
* @param eventName The event name to appear in the trace.
*/
public static PerfettoTrackEventExtra.Builder instant(Category category, String eventName) {
- if (!category.isEnabled()) {
- return PerfettoTrackEventExtra.noOpBuilder();
- }
-
return PerfettoTrackEventExtra.builder().init(PERFETTO_TE_TYPE_INSTANT, category)
.setEventName(eventName);
}
@@ -247,10 +243,6 @@ public final class PerfettoTrace {
* @param eventName The event name to appear in the trace.
*/
public static PerfettoTrackEventExtra.Builder begin(Category category, String eventName) {
- if (!category.isEnabled()) {
- return PerfettoTrackEventExtra.noOpBuilder();
- }
-
return PerfettoTrackEventExtra.builder().init(PERFETTO_TE_TYPE_SLICE_BEGIN, category)
.setEventName(eventName);
}
@@ -261,10 +253,6 @@ public final class PerfettoTrace {
* @param category The perfetto category.
*/
public static PerfettoTrackEventExtra.Builder end(Category category) {
- if (!category.isEnabled()) {
- return PerfettoTrackEventExtra.noOpBuilder();
- }
-
return PerfettoTrackEventExtra.builder().init(PERFETTO_TE_TYPE_SLICE_END, category);
}
@@ -275,10 +263,6 @@ public final class PerfettoTrace {
* @param value The value of the counter.
*/
public static PerfettoTrackEventExtra.Builder counter(Category category, long value) {
- if (!category.isEnabled()) {
- return PerfettoTrackEventExtra.noOpBuilder();
- }
-
return PerfettoTrackEventExtra.builder().init(PERFETTO_TE_TYPE_COUNTER, category)
.setCounter(value);
}
@@ -302,10 +286,6 @@ public final class PerfettoTrace {
* @param value The value of the counter.
*/
public static PerfettoTrackEventExtra.Builder counter(Category category, double value) {
- if (!category.isEnabled()) {
- return PerfettoTrackEventExtra.noOpBuilder();
- }
-
return PerfettoTrackEventExtra.builder().init(PERFETTO_TE_TYPE_COUNTER, category)
.setCounter(value);
}
diff --git a/core/java/android/os/PerfettoTrackEventExtra.java b/core/java/android/os/PerfettoTrackEventExtra.java
index 68442293c3a3..f4b5dfe76f88 100644
--- a/core/java/android/os/PerfettoTrackEventExtra.java
+++ b/core/java/android/os/PerfettoTrackEventExtra.java
@@ -35,8 +35,8 @@ import java.util.function.Supplier;
*/
@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class PerfettoTrackEventExtra {
+ private static final boolean DEBUG = false;
private static final int DEFAULT_EXTRA_CACHE_SIZE = 5;
- private static final Builder NO_OP_BUILDER = new NoOpBuilder();
private static final ThreadLocal<PerfettoTrackEventExtra> sTrackEventExtra =
new ThreadLocal<PerfettoTrackEventExtra>() {
@Override
@@ -46,7 +46,7 @@ public final class PerfettoTrackEventExtra {
};
private static final AtomicLong sNamedTrackId = new AtomicLong();
private static final Supplier<Flow> sFlowSupplier = Flow::new;
- private static final Supplier<BuilderImpl> sBuilderSupplier = BuilderImpl::new;
+ private static final Supplier<Builder> sBuilderSupplier = Builder::new;
private static final Supplier<FieldInt64> sFieldInt64Supplier = FieldInt64::new;
private static final Supplier<FieldDouble> sFieldDoubleSupplier = FieldDouble::new;
private static final Supplier<FieldString> sFieldStringSupplier = FieldString::new;
@@ -56,6 +56,8 @@ public final class PerfettoTrackEventExtra {
private CounterInt64 mCounterInt64;
private CounterDouble mCounterDouble;
private Proto mProto;
+ private Flow mFlow;
+ private Flow mTerminatingFlow;
/**
* Represents a native pointer to a Perfetto C SDK struct. E.g. PerfettoTeHlExtra.
@@ -135,245 +137,10 @@ public final class PerfettoTrackEventExtra {
}
}
- public interface Builder {
- /**
- * Emits the track event.
- */
- void emit();
-
- /**
- * Initialize the builder for a new trace event.
- */
- Builder init(int traceType, PerfettoTrace.Category category);
-
- /**
- * Sets the event name for the track event.
- */
- Builder setEventName(String eventName);
-
- /**
- * Adds a debug arg with key {@code name} and value {@code val}.
- */
- Builder addArg(String name, long val);
-
- /**
- * Adds a debug arg with key {@code name} and value {@code val}.
- */
- Builder addArg(String name, boolean val);
-
- /**
- * Adds a debug arg with key {@code name} and value {@code val}.
- */
- Builder addArg(String name, double val);
-
- /**
- * Adds a debug arg with key {@code name} and value {@code val}.
- */
- Builder addArg(String name, String val);
-
- /**
- * Adds a flow with {@code id}.
- */
- Builder addFlow(int id);
-
- /**
- * Adds a terminating flow with {@code id}.
- */
- Builder addTerminatingFlow(int id);
-
- /**
- * Adds the events to a named track instead of the thread track where the
- * event occurred.
- */
- Builder usingNamedTrack(long parentUuid, String name);
-
- /**
- * Adds the events to a process scoped named track instead of the thread track where the
- * event occurred.
- */
- Builder usingProcessNamedTrack(String name);
-
- /**
- * Adds the events to a thread scoped named track instead of the thread track where the
- * event occurred.
- */
- Builder usingThreadNamedTrack(long tid, String name);
-
- /**
- * Adds the events to a counter track instead. This is required for
- * setting counter values.
- */
- Builder usingCounterTrack(long parentUuid, String name);
-
- /**
- * Adds the events to a process scoped counter track instead. This is required for
- * setting counter values.
- */
- Builder usingProcessCounterTrack(String name);
-
- /**
- * Adds the events to a thread scoped counter track instead. This is required for
- * setting counter values.
- */
- Builder usingThreadCounterTrack(long tid, String name);
-
- /**
- * Sets a long counter value on the event.
- *
- */
- Builder setCounter(long val);
-
- /**
- * Sets a double counter value on the event.
- *
- */
- Builder setCounter(double val);
-
- /**
- * Adds a proto field with field id {@code id} and value {@code val}.
- */
- Builder addField(long id, long val);
-
- /**
- * Adds a proto field with field id {@code id} and value {@code val}.
- */
- Builder addField(long id, double val);
-
- /**
- * Adds a proto field with field id {@code id} and value {@code val}.
- */
- Builder addField(long id, String val);
-
- /**
- * Begins a proto field with field
- * Fields can be added from this point and there must be a corresponding
- * {@link endProto}.
- *
- * The proto field is a singleton and all proto fields get added inside the
- * one {@link beginProto} and {@link endProto} within the {@link Builder}.
- */
- Builder beginProto();
-
- /**
- * Ends a proto field.
- */
- Builder endProto();
-
- /**
- * Begins a nested proto field with field id {@code id}.
- * Fields can be added from this point and there must be a corresponding
- * {@link endNested}.
- */
- Builder beginNested(long id);
-
- /**
- * Ends a nested proto field.
- */
- Builder endNested();
- }
-
- @android.ravenwood.annotation.RavenwoodKeepWholeClass
- public static final class NoOpBuilder implements Builder {
- @Override
- public void emit() {}
- @Override
- public Builder init(int traceType, PerfettoTrace.Category category) {
- return this;
- }
- @Override
- public Builder setEventName(String eventName) {
- return this;
- }
- @Override
- public Builder addArg(String name, long val) {
- return this;
- }
- @Override
- public Builder addArg(String name, boolean val) {
- return this;
- }
- @Override
- public Builder addArg(String name, double val) {
- return this;
- }
- @Override
- public Builder addArg(String name, String val) {
- return this;
- }
- @Override
- public Builder addFlow(int id) {
- return this;
- }
- @Override
- public Builder addTerminatingFlow(int id) {
- return this;
- }
- @Override
- public Builder usingNamedTrack(long parentUuid, String name) {
- return this;
- }
- @Override
- public Builder usingProcessNamedTrack(String name) {
- return this;
- }
- @Override
- public Builder usingThreadNamedTrack(long tid, String name) {
- return this;
- }
- @Override
- public Builder usingCounterTrack(long parentUuid, String name) {
- return this;
- }
- @Override
- public Builder usingProcessCounterTrack(String name) {
- return this;
- }
- @Override
- public Builder usingThreadCounterTrack(long tid, String name) {
- return this;
- }
- @Override
- public Builder setCounter(long val) {
- return this;
- }
- @Override
- public Builder setCounter(double val) {
- return this;
- }
- @Override
- public Builder addField(long id, long val) {
- return this;
- }
- @Override
- public Builder addField(long id, double val) {
- return this;
- }
- @Override
- public Builder addField(long id, String val) {
- return this;
- }
- @Override
- public Builder beginProto() {
- return this;
- }
- @Override
- public Builder endProto() {
- return this;
- }
- @Override
- public Builder beginNested(long id) {
- return this;
- }
- @Override
- public Builder endNested() {
- return this;
- }
- }
-
/**
* Builder for Perfetto track event extras.
*/
- public static final class BuilderImpl implements Builder {
+ public static final class Builder {
// For performance reasons, we hold a reference to mExtra as a holder for
// perfetto pointers being added. This way, we avoid an additional list to hold
// the pointers in Java and we can pass them down directly to native code.
@@ -386,10 +153,13 @@ public final class PerfettoTrackEventExtra {
private Builder mParent;
private FieldContainer mCurrentContainer;
+ private boolean mIsCategoryEnabled;
private final CounterInt64 mCounterInt64;
private final CounterDouble mCounterDouble;
private final Proto mProto;
+ private final Flow mFlow;
+ private final Flow mTerminatingFlow;
private final RingBuffer<NamedTrack> mNamedTrackCache;
private final RingBuffer<CounterTrack> mCounterTrackCache;
@@ -403,9 +173,9 @@ public final class PerfettoTrackEventExtra {
private final Pool<FieldString> mFieldStringCache;
private final Pool<FieldNested> mFieldNestedCache;
private final Pool<Flow> mFlowCache;
- private final Pool<BuilderImpl> mBuilderCache;
+ private final Pool<Builder> mBuilderCache;
- private BuilderImpl() {
+ private Builder() {
mExtra = sTrackEventExtra.get();
mNamedTrackCache = mExtra.mNamedTrackCache;
mCounterTrackCache = mExtra.mCounterTrackCache;
@@ -423,20 +193,32 @@ public final class PerfettoTrackEventExtra {
mCounterInt64 = mExtra.getCounterInt64();
mCounterDouble = mExtra.getCounterDouble();
mProto = mExtra.getProto();
+ mFlow = mExtra.getFlow();
+ mTerminatingFlow = mExtra.getTerminatingFlow();
}
- @Override
+ /**
+ * Emits the track event.
+ */
public void emit() {
- checkParent();
- mIsBuilt = true;
+ if (!mIsCategoryEnabled) {
+ return;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
+ mIsBuilt = true;
native_emit(mTraceType, mCategory.getPtr(), mEventName, mExtra.getPtr());
- // Reset after emitting to free any the extras used to trace the event.
- mExtra.reset();
}
- @Override
+ /**
+ * Initialize the builder for a new trace event.
+ */
public Builder init(int traceType, PerfettoTrace.Category category) {
+ if (!category.isEnabled()) {
+ return this;
+ }
mTraceType = traceType;
mCategory = category;
mEventName = "";
@@ -449,18 +231,27 @@ public final class PerfettoTrackEventExtra {
mExtra.reset();
// Reset after on init in case the thread created builders without calling emit
- return initInternal(this, null);
+ return initInternal(this, null, true);
}
- @Override
+ /**
+ * Sets the event name for the track event.
+ */
public Builder setEventName(String eventName) {
mEventName = eventName;
return this;
}
- @Override
+ /**
+ * Adds a debug arg with key {@code name} and value {@code val}.
+ */
public Builder addArg(String name, long val) {
- checkParent();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
ArgInt64 arg = mArgInt64Cache.get(name.hashCode());
if (arg == null || !arg.getName().equals(name)) {
arg = new ArgInt64(name);
@@ -471,9 +262,16 @@ public final class PerfettoTrackEventExtra {
return this;
}
- @Override
+ /**
+ * Adds a debug arg with key {@code name} and value {@code val}.
+ */
public Builder addArg(String name, boolean val) {
- checkParent();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
ArgBool arg = mArgBoolCache.get(name.hashCode());
if (arg == null || !arg.getName().equals(name)) {
arg = new ArgBool(name);
@@ -484,9 +282,16 @@ public final class PerfettoTrackEventExtra {
return this;
}
- @Override
+ /**
+ * Adds a debug arg with key {@code name} and value {@code val}.
+ */
public Builder addArg(String name, double val) {
- checkParent();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
ArgDouble arg = mArgDoubleCache.get(name.hashCode());
if (arg == null || !arg.getName().equals(name)) {
arg = new ArgDouble(name);
@@ -497,9 +302,16 @@ public final class PerfettoTrackEventExtra {
return this;
}
- @Override
+ /**
+ * Adds a debug arg with key {@code name} and value {@code val}.
+ */
public Builder addArg(String name, String val) {
- checkParent();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
ArgString arg = mArgStringCache.get(name.hashCode());
if (arg == null || !arg.getName().equals(name)) {
arg = new ArgString(name);
@@ -510,27 +322,79 @@ public final class PerfettoTrackEventExtra {
return this;
}
- @Override
+ /**
+ * Adds a flow with {@code id}.
+ */
public Builder addFlow(int id) {
- checkParent();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
Flow flow = mFlowCache.get(sFlowSupplier);
flow.setProcessFlow(id);
mExtra.addPerfettoPointer(flow);
return this;
}
- @Override
+ /**
+ * Adds a terminating flow with {@code id}.
+ */
public Builder addTerminatingFlow(int id) {
- checkParent();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
Flow flow = mFlowCache.get(sFlowSupplier);
flow.setProcessTerminatingFlow(id);
mExtra.addPerfettoPointer(flow);
return this;
}
- @Override
+ /**
+ * Adds a flow with {@code id}.
+ */
+ public Builder setFlow(int id) {
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
+ mFlow.setProcessFlow(id);
+ mExtra.addPerfettoPointer(mFlow);
+ return this;
+ }
+
+ /**
+ * Adds a terminating flow with {@code id}.
+ */
+ public Builder setTerminatingFlow(int id) {
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
+ mTerminatingFlow.setProcessTerminatingFlow(id);
+ mExtra.addPerfettoPointer(mTerminatingFlow);
+ return this;
+ }
+
+ /**
+ * Adds the events to a named track instead of the thread track where the
+ * event occurred.
+ */
public Builder usingNamedTrack(long parentUuid, String name) {
- checkParent();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
NamedTrack track = mNamedTrackCache.get(name.hashCode());
if (track == null || !track.getName().equals(name)) {
@@ -541,19 +405,39 @@ public final class PerfettoTrackEventExtra {
return this;
}
- @Override
+ /**
+ * Adds the events to a process scoped named track instead of the thread track where the
+ * event occurred.
+ */
public Builder usingProcessNamedTrack(String name) {
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
return usingNamedTrack(PerfettoTrace.getProcessTrackUuid(), name);
}
- @Override
+ /**
+ * Adds the events to a thread scoped named track instead of the thread track where the
+ * event occurred.
+ */
public Builder usingThreadNamedTrack(long tid, String name) {
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
return usingNamedTrack(PerfettoTrace.getThreadTrackUuid(tid), name);
}
- @Override
+ /**
+ * Adds the events to a counter track instead. This is required for
+ * setting counter values.
+ */
public Builder usingCounterTrack(long parentUuid, String name) {
- checkParent();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
CounterTrack track = mCounterTrackCache.get(name.hashCode());
if (track == null || !track.getName().equals(name)) {
@@ -564,95 +448,178 @@ public final class PerfettoTrackEventExtra {
return this;
}
- @Override
+ /**
+ * Adds the events to a process scoped counter track instead. This is required for
+ * setting counter values.
+ */
public Builder usingProcessCounterTrack(String name) {
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
return usingCounterTrack(PerfettoTrace.getProcessTrackUuid(), name);
}
- @Override
+ /**
+ * Adds the events to a thread scoped counter track instead. This is required for
+ * setting counter values.
+ */
public Builder usingThreadCounterTrack(long tid, String name) {
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
return usingCounterTrack(PerfettoTrace.getThreadTrackUuid(tid), name);
}
- @Override
+ /**
+ * Sets a long counter value on the event.
+ *
+ */
public Builder setCounter(long val) {
- checkParent();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
mCounterInt64.setValue(val);
mExtra.addPerfettoPointer(mCounterInt64);
return this;
}
- @Override
+ /**
+ * Sets a double counter value on the event.
+ *
+ */
public Builder setCounter(double val) {
- checkParent();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
mCounterDouble.setValue(val);
mExtra.addPerfettoPointer(mCounterDouble);
return this;
}
- @Override
+ /**
+ * Adds a proto field with field id {@code id} and value {@code val}.
+ */
public Builder addField(long id, long val) {
- checkContainer();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkContainer();
+ }
FieldInt64 field = mFieldInt64Cache.get(sFieldInt64Supplier);
field.setValue(id, val);
mExtra.addPerfettoPointer(mCurrentContainer, field);
return this;
}
- @Override
+ /**
+ * Adds a proto field with field id {@code id} and value {@code val}.
+ */
public Builder addField(long id, double val) {
- checkContainer();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkContainer();
+ }
FieldDouble field = mFieldDoubleCache.get(sFieldDoubleSupplier);
field.setValue(id, val);
mExtra.addPerfettoPointer(mCurrentContainer, field);
return this;
}
- @Override
+ /**
+ * Adds a proto field with field id {@code id} and value {@code val}.
+ */
public Builder addField(long id, String val) {
- checkContainer();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkContainer();
+ }
FieldString field = mFieldStringCache.get(sFieldStringSupplier);
field.setValue(id, val);
mExtra.addPerfettoPointer(mCurrentContainer, field);
return this;
}
- @Override
+ /**
+ * Begins a proto field.
+ * Fields can be added from this point and there must be a corresponding
+ * {@link endProto}.
+ *
+ * The proto field is a singleton and all proto fields get added inside the
+ * one {@link beginProto} and {@link endProto} within the {@link Builder}.
+ */
public Builder beginProto() {
- checkParent();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkParent();
+ }
mProto.clearFields();
mExtra.addPerfettoPointer(mProto);
- return mBuilderCache.get(sBuilderSupplier).initInternal(this, mProto);
+ return mBuilderCache.get(sBuilderSupplier).initInternal(this, mProto, true);
}
- @Override
+ /**
+ * Ends a proto field.
+ */
public Builder endProto() {
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
if (mParent == null || mCurrentContainer == null) {
throw new IllegalStateException("No proto to end");
}
return mParent;
}
- @Override
+ /**
+ * Begins a nested proto field with field id {@code id}.
+ * Fields can be added from this point and there must be a corresponding
+ * {@link endNested}.
+ */
public Builder beginNested(long id) {
- checkContainer();
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
+ if (DEBUG) {
+ checkContainer();
+ }
FieldNested field = mFieldNestedCache.get(sFieldNestedSupplier);
field.setId(id);
mExtra.addPerfettoPointer(mCurrentContainer, field);
- return mBuilderCache.get(sBuilderSupplier).initInternal(this, field);
+ return mBuilderCache.get(sBuilderSupplier).initInternal(this, field, true);
}
- @Override
+ /**
+ * Ends a nested proto field.
+ */
public Builder endNested() {
+ if (!mIsCategoryEnabled) {
+ return this;
+ }
if (mParent == null || mCurrentContainer == null) {
throw new IllegalStateException("No nested field to end");
}
return mParent;
}
- private Builder initInternal(Builder parent, FieldContainer container) {
+
+ private Builder initInternal(Builder parent, FieldContainer field,
+ boolean isCategoryEnabled) {
mParent = parent;
- mCurrentContainer = container;
+ mCurrentContainer = field;
+ mIsCategoryEnabled = isCategoryEnabled;
mIsBuilt = false;
return this;
@@ -685,14 +652,8 @@ public final class PerfettoTrackEventExtra {
* Start a {@link Builder} to build a {@link PerfettoTrackEventExtra}.
*/
public static Builder builder() {
- return sTrackEventExtra.get().mBuilderCache.get(sBuilderSupplier).initInternal(null, null);
- }
-
- /**
- * Returns a no-op {@link Builder}. Useful if a category is disabled.
- */
- public static Builder noOpBuilder() {
- return NO_OP_BUILDER;
+ return sTrackEventExtra.get().mBuilderCache.get(sBuilderSupplier).initInternal(null, null,
+ false);
}
private final RingBuffer<NamedTrack> mNamedTrackCache =
@@ -710,7 +671,7 @@ public final class PerfettoTrackEventExtra {
private final Pool<FieldString> mFieldStringCache = new Pool(DEFAULT_EXTRA_CACHE_SIZE);
private final Pool<FieldNested> mFieldNestedCache = new Pool(DEFAULT_EXTRA_CACHE_SIZE);
private final Pool<Flow> mFlowCache = new Pool(DEFAULT_EXTRA_CACHE_SIZE);
- private final Pool<BuilderImpl> mBuilderCache = new Pool(DEFAULT_EXTRA_CACHE_SIZE);
+ private final Pool<Builder> mBuilderCache = new Pool(DEFAULT_EXTRA_CACHE_SIZE);
private static final NativeAllocationRegistry sRegistry =
NativeAllocationRegistry.createMalloced(
@@ -757,6 +718,7 @@ public final class PerfettoTrackEventExtra {
mPendingPointers.clear();
}
+ @android.ravenwood.annotation.RavenwoodReplace
private CounterInt64 getCounterInt64() {
if (mCounterInt64 == null) {
mCounterInt64 = new CounterInt64();
@@ -764,6 +726,7 @@ public final class PerfettoTrackEventExtra {
return mCounterInt64;
}
+ @android.ravenwood.annotation.RavenwoodReplace
private CounterDouble getCounterDouble() {
if (mCounterDouble == null) {
mCounterDouble = new CounterDouble();
@@ -771,6 +734,7 @@ public final class PerfettoTrackEventExtra {
return mCounterDouble;
}
+ @android.ravenwood.annotation.RavenwoodReplace
private Proto getProto() {
if (mProto == null) {
mProto = new Proto();
@@ -778,6 +742,22 @@ public final class PerfettoTrackEventExtra {
return mProto;
}
+ @android.ravenwood.annotation.RavenwoodReplace
+ private Flow getFlow() {
+ if (mFlow == null) {
+ mFlow = new Flow();
+ }
+ return mFlow;
+ }
+
+ @android.ravenwood.annotation.RavenwoodReplace
+ private Flow getTerminatingFlow() {
+ if (mTerminatingFlow == null) {
+ mTerminatingFlow = new Flow();
+ }
+ return mTerminatingFlow;
+ }
+
private static final class Flow implements PerfettoPointer {
private static final NativeAllocationRegistry sRegistry =
NativeAllocationRegistry.createMalloced(
@@ -1337,4 +1317,29 @@ public final class PerfettoTrackEventExtra {
// Tracing currently completely disabled under Ravenwood
return 0;
}
+
+ private CounterInt64 getCounterInt64$ravenwood() {
+ // Tracing currently completely disabled under Ravenwood
+ return null;
+ }
+
+ private CounterDouble getCounterDouble$ravenwood() {
+ // Tracing currently completely disabled under Ravenwood
+ return null;
+ }
+
+ private Proto getProto$ravenwood() {
+ // Tracing currently completely disabled under Ravenwood
+ return null;
+ }
+
+ private Flow getFlow$ravenwood() {
+ // Tracing currently completely disabled under Ravenwood
+ return null;
+ }
+
+ private Flow getTerminatingFlow$ravenwood() {
+ // Tracing currently completely disabled under Ravenwood
+ return null;
+ }
}
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 33bf4a29ecc6..767019d97758 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -3324,8 +3324,7 @@ public class UserManager {
@FlaggedApi(android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE)
@RequiresPermission(anyOf = {
Manifest.permission.MANAGE_USERS,
- Manifest.permission.CREATE_USERS},
- conditional = true)
+ Manifest.permission.CREATE_USERS})
@UserHandleAware
public boolean canAddPrivateProfile() {
if (!android.multiuser.Flags.enablePrivateSpaceFeatures()) return false;
diff --git a/core/java/android/permission/flags.aconfig b/core/java/android/permission/flags.aconfig
index d469a2f985fa..ca24c0c6c376 100644
--- a/core/java/android/permission/flags.aconfig
+++ b/core/java/android/permission/flags.aconfig
@@ -514,3 +514,12 @@ flag {
description: "Force AttributionSource.myAttributionSource() to return a default device id"
bug: "343121936"
}
+
+flag {
+ name: "grant_read_blocked_numbers_to_system_ui_intelligence"
+ is_exported: true
+ is_fixed_read_only: true
+ namespace: "permissions"
+ description: "This flag is used to add role protection to READ_BLOCKED_NUMBERS for SYSTEM_UI_INTELLIGENCE"
+ bug: "354758615"
+}
diff --git a/core/java/android/text/AlteredCharSequence.java b/core/java/android/text/AlteredCharSequence.java
index 971a47dba6e8..a05c690a9e30 100644
--- a/core/java/android/text/AlteredCharSequence.java
+++ b/core/java/android/text/AlteredCharSequence.java
@@ -24,6 +24,7 @@ package android.text;
* @deprecated The functionality this class offers is easily implemented outside the framework.
*/
@Deprecated
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class AlteredCharSequence
implements CharSequence, GetChars
{
diff --git a/core/java/android/text/AndroidBidi.java b/core/java/android/text/AndroidBidi.java
index 31da79995172..fcdd50abc02a 100644
--- a/core/java/android/text/AndroidBidi.java
+++ b/core/java/android/text/AndroidBidi.java
@@ -28,6 +28,7 @@ import com.android.internal.annotations.VisibleForTesting;
* @hide
*/
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class AndroidBidi {
/**
diff --git a/core/java/android/text/AndroidCharacter.java b/core/java/android/text/AndroidCharacter.java
index c5f1a01f5927..37c4fdbef915 100644
--- a/core/java/android/text/AndroidCharacter.java
+++ b/core/java/android/text/AndroidCharacter.java
@@ -22,6 +22,7 @@ package android.text;
* @deprecated Use various methods from {@link android.icu.lang.UCharacter}, instead.
*/
@Deprecated
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class AndroidCharacter
{
public static final int EAST_ASIAN_WIDTH_NEUTRAL = 0;
diff --git a/core/java/android/text/Annotation.java b/core/java/android/text/Annotation.java
index bb5d3ea7da4b..ac3e5a964a33 100644
--- a/core/java/android/text/Annotation.java
+++ b/core/java/android/text/Annotation.java
@@ -23,6 +23,7 @@ import android.os.Parcel;
* TextView save/restore cycles and can be used to keep application-specific
* data that needs to be maintained for regions of text.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Annotation implements ParcelableSpan {
private final String mKey;
private final String mValue;
diff --git a/core/java/android/text/AutoGrowArray.java b/core/java/android/text/AutoGrowArray.java
index e428377a0a31..06c74c3370c1 100644
--- a/core/java/android/text/AutoGrowArray.java
+++ b/core/java/android/text/AutoGrowArray.java
@@ -30,6 +30,7 @@ import libcore.util.EmptyArray;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class AutoGrowArray {
private static final int MIN_CAPACITY_INCREMENT = 12;
private static final int MAX_CAPACITY_TO_BE_KEPT = 10000;
diff --git a/core/java/android/text/AutoText.java b/core/java/android/text/AutoText.java
index c5339a42cbd1..d7b0547e6c4c 100644
--- a/core/java/android/text/AutoText.java
+++ b/core/java/android/text/AutoText.java
@@ -31,6 +31,7 @@ import java.util.Locale;
/**
* This class accesses a dictionary of corrections to frequent misspellings.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class AutoText {
// struct trie {
// char c;
diff --git a/core/java/android/text/BidiFormatter.java b/core/java/android/text/BidiFormatter.java
index dfa172df72ea..6d4103cee7a6 100644
--- a/core/java/android/text/BidiFormatter.java
+++ b/core/java/android/text/BidiFormatter.java
@@ -82,6 +82,7 @@ import java.util.Locale;
* first-strong estimation algorithm. It can also be configured to use a custom directionality
* estimation object.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class BidiFormatter {
/**
diff --git a/core/java/android/text/BoringLayout.java b/core/java/android/text/BoringLayout.java
index 4fdcecc4f782..2b410e6284bf 100644
--- a/core/java/android/text/BoringLayout.java
+++ b/core/java/android/text/BoringLayout.java
@@ -45,6 +45,7 @@ import com.android.text.flags.Flags;
* {@link android.graphics.Canvas#drawText(java.lang.CharSequence, int, int, float, float, android.graphics.Paint)
* Canvas.drawText()} directly.</p>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class BoringLayout extends Layout implements TextUtils.EllipsizeCallback {
/**
diff --git a/core/java/android/text/CharSequenceCharacterIterator.java b/core/java/android/text/CharSequenceCharacterIterator.java
index 9b07d29bd9dd..1599be8237d4 100644
--- a/core/java/android/text/CharSequenceCharacterIterator.java
+++ b/core/java/android/text/CharSequenceCharacterIterator.java
@@ -24,6 +24,7 @@ import java.text.CharacterIterator;
* An implementation of {@link java.text.CharacterIterator} that iterates over a given CharSequence.
* {@hide}
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class CharSequenceCharacterIterator implements CharacterIterator {
private final int mBeginIndex, mEndIndex;
private int mIndex;
diff --git a/core/java/android/text/ClipboardManager.java b/core/java/android/text/ClipboardManager.java
index d0309100b0f2..41990f0fc8dd 100644
--- a/core/java/android/text/ClipboardManager.java
+++ b/core/java/android/text/ClipboardManager.java
@@ -21,6 +21,7 @@ package android.text;
* {@link android.content.ClipboardManager} for the modern API.
*/
@Deprecated
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class ClipboardManager {
/**
* Returns the text on the clipboard. It will eventually be possible
diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java
index 6b1aef710e50..3b66ce0167c4 100644
--- a/core/java/android/text/DynamicLayout.java
+++ b/core/java/android/text/DynamicLayout.java
@@ -53,6 +53,7 @@ import java.lang.ref.WeakReference;
* {@link android.graphics.Canvas#drawText(java.lang.CharSequence, int, int, float, float, android.graphics.Paint)
* Canvas.drawText()} directly.</p>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class DynamicLayout extends Layout {
private static final int PRIORITY = 128;
private static final int BLOCK_MINIMUM_CHARACTER_LENGTH = 400;
diff --git a/core/java/android/text/Editable.java b/core/java/android/text/Editable.java
index a942f6ce2879..53d819f52a5c 100644
--- a/core/java/android/text/Editable.java
+++ b/core/java/android/text/Editable.java
@@ -22,6 +22,7 @@ package android.text;
* to immutable text like Strings). If you make a {@link DynamicLayout}
* of an Editable, the layout will be reflowed as the text is changed.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface Editable
extends CharSequence, GetChars, Spannable, Appendable
{
diff --git a/core/java/android/text/Emoji.java b/core/java/android/text/Emoji.java
index cf0e3c26daac..28c37c00d66e 100644
--- a/core/java/android/text/Emoji.java
+++ b/core/java/android/text/Emoji.java
@@ -23,6 +23,7 @@ import android.icu.lang.UProperty;
* An utility class for Emoji.
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Emoji {
public static int COMBINING_ENCLOSING_KEYCAP = 0x20E3;
diff --git a/core/java/android/text/EmojiConsistency.java b/core/java/android/text/EmojiConsistency.java
index dfaa217c0cca..9823305ec72a 100644
--- a/core/java/android/text/EmojiConsistency.java
+++ b/core/java/android/text/EmojiConsistency.java
@@ -48,6 +48,7 @@ import java.util.Set;
* </ol>
* </p>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class EmojiConsistency {
/* Cannot construct */
private EmojiConsistency() { }
diff --git a/core/java/android/text/FontConfig.java b/core/java/android/text/FontConfig.java
index 783f3b7aa64b..5a4d3a867032 100644
--- a/core/java/android/text/FontConfig.java
+++ b/core/java/android/text/FontConfig.java
@@ -55,6 +55,7 @@ import java.util.Objects;
*/
@SystemApi
@TestApi
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class FontConfig implements Parcelable {
private final @NonNull List<FontFamily> mFamilies;
private final @NonNull List<Alias> mAliases;
diff --git a/core/java/android/text/GetChars.java b/core/java/android/text/GetChars.java
index 348a911a442f..229f5437e76b 100644
--- a/core/java/android/text/GetChars.java
+++ b/core/java/android/text/GetChars.java
@@ -21,6 +21,7 @@ package android.text;
* getChars() method like the one in String that is faster than
* calling charAt() multiple times.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface GetChars
extends CharSequence
{
diff --git a/core/java/android/text/GraphemeClusterSegmentFinder.java b/core/java/android/text/GraphemeClusterSegmentFinder.java
index 0f6fdaf23c65..996223dd1a84 100644
--- a/core/java/android/text/GraphemeClusterSegmentFinder.java
+++ b/core/java/android/text/GraphemeClusterSegmentFinder.java
@@ -31,6 +31,7 @@ import android.graphics.text.GraphemeBreak;
* @see <a href="https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries">Unicode Text
* Segmentation - Grapheme Cluster Boundaries</a>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class GraphemeClusterSegmentFinder extends SegmentFinder {
private static AutoGrowArray.FloatArray sTempAdvances = null;
private final boolean[] mIsGraphemeBreak;
diff --git a/core/java/android/text/GraphicsOperations.java b/core/java/android/text/GraphicsOperations.java
index 6c1544644eab..f7fe805e53a4 100644
--- a/core/java/android/text/GraphicsOperations.java
+++ b/core/java/android/text/GraphicsOperations.java
@@ -26,6 +26,7 @@ import android.graphics.Paint;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface GraphicsOperations extends CharSequence {
/**
* Just like {@link Canvas#drawText}.
diff --git a/core/java/android/text/Highlights.java b/core/java/android/text/Highlights.java
index 693dbcf84e84..217a38b6edd5 100644
--- a/core/java/android/text/Highlights.java
+++ b/core/java/android/text/Highlights.java
@@ -30,6 +30,7 @@ import java.util.Objects;
/**
* A class that represents of the highlight of the text.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Highlights {
private final List<Pair<Paint, int[]>> mHighlights;
diff --git a/core/java/android/text/Html.java b/core/java/android/text/Html.java
index a42eece57eec..d412071bf3b9 100644
--- a/core/java/android/text/Html.java
+++ b/core/java/android/text/Html.java
@@ -17,13 +17,13 @@
package android.text;
import android.app.ActivityThread;
-import android.app.Application;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Build;
+import android.ravenwood.annotation.RavenwoodReplace;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.AlignmentSpan;
import android.text.style.BackgroundColorSpan;
@@ -65,6 +65,7 @@ import java.util.regex.Pattern;
* This class processes HTML strings into displayable styled text.
* Not all HTML tags are supported.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Html {
/**
* Retrieves images for HTML &lt;img&gt; tags.
@@ -506,6 +507,15 @@ public class Html {
out.append("</p>\n");
}
+ @RavenwoodReplace(blockedBy = ActivityThread.class)
+ private static float getDisplayMetricsDensity() {
+ return ActivityThread.currentApplication().getResources().getDisplayMetrics().density;
+ }
+
+ private static float getDisplayMetricsDensity$ravenwood() {
+ return Resources.getSystem().getDisplayMetrics().density;
+ }
+
private static void withinParagraph(StringBuilder out, Spanned text, int start, int end) {
int next;
for (int i = start; i < end; i = next) {
@@ -559,8 +569,7 @@ public class Html {
AbsoluteSizeSpan s = ((AbsoluteSizeSpan) style[j]);
float sizeDip = s.getSize();
if (!s.getDip()) {
- Application application = ActivityThread.currentApplication();
- sizeDip /= application.getResources().getDisplayMetrics().density;
+ sizeDip /= getDisplayMetricsDensity();
}
// px in CSS is the equivalance of dip in Android
@@ -669,6 +678,7 @@ public class Html {
}
}
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
class HtmlToSpannedConverter implements ContentHandler {
private static final float[] HEADING_SIZES = {
@@ -843,6 +853,16 @@ class HtmlToSpannedConverter implements ContentHandler {
}
}
+ @RavenwoodReplace(blockedBy = ActivityThread.class)
+ private static int getFontWeightAdjustment() {
+ return ActivityThread.currentApplication().getResources()
+ .getConfiguration().fontWeightAdjustment;
+ }
+
+ private static int getFontWeightAdjustment$ravenwood() {
+ return Resources.getSystem().getConfiguration().fontWeightAdjustment;
+ }
+
private void handleEndTag(String tag) {
if (tag.equalsIgnoreCase("br")) {
handleBr(mSpannableStringBuilder);
@@ -858,17 +878,11 @@ class HtmlToSpannedConverter implements ContentHandler {
} else if (tag.equalsIgnoreCase("span")) {
endCssStyle(mSpannableStringBuilder);
} else if (tag.equalsIgnoreCase("strong")) {
- Application application = ActivityThread.currentApplication();
- int fontWeightAdjustment =
- application.getResources().getConfiguration().fontWeightAdjustment;
end(mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD,
- fontWeightAdjustment));
+ getFontWeightAdjustment()));
} else if (tag.equalsIgnoreCase("b")) {
- Application application = ActivityThread.currentApplication();
- int fontWeightAdjustment =
- application.getResources().getConfiguration().fontWeightAdjustment;
end(mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD,
- fontWeightAdjustment));
+ getFontWeightAdjustment()));
} else if (tag.equalsIgnoreCase("em")) {
end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC));
} else if (tag.equalsIgnoreCase("cite")) {
@@ -1036,11 +1050,8 @@ class HtmlToSpannedConverter implements ContentHandler {
// Their ranges should not include the newlines at the end
Heading h = getLast(text, Heading.class);
if (h != null) {
- Application application = ActivityThread.currentApplication();
- int fontWeightAdjustment =
- application.getResources().getConfiguration().fontWeightAdjustment;
setSpanFromMark(text, h, new RelativeSizeSpan(HEADING_SIZES[h.mLevel]),
- new StyleSpan(Typeface.BOLD, fontWeightAdjustment));
+ new StyleSpan(Typeface.BOLD, getFontWeightAdjustment()));
}
endBlockElement(text);
diff --git a/core/java/android/text/Hyphenator.java b/core/java/android/text/Hyphenator.java
index 6f0628ad38e6..7f9a8a1c0806 100644
--- a/core/java/android/text/Hyphenator.java
+++ b/core/java/android/text/Hyphenator.java
@@ -21,6 +21,7 @@ package android.text;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Hyphenator {
private Hyphenator() {}
diff --git a/core/java/android/text/InputFilter.java b/core/java/android/text/InputFilter.java
index 96e7bd0fef4c..ed5de03e5528 100644
--- a/core/java/android/text/InputFilter.java
+++ b/core/java/android/text/InputFilter.java
@@ -27,6 +27,7 @@ import java.util.Locale;
* InputFilters can be attached to {@link Editable}s to constrain the
* changes that can be made to them.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface InputFilter
{
/**
diff --git a/core/java/android/text/InputType.java b/core/java/android/text/InputType.java
index 4ebecb7494fa..03c9c023d9ce 100644
--- a/core/java/android/text/InputType.java
+++ b/core/java/android/text/InputType.java
@@ -44,6 +44,7 @@ import java.util.List;
* TYPE_DATETIME_VARIATION_TIME
* </dl>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface InputType {
/**
* Mask of bits that determine the overall class
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java
index b273a7f7c271..44c3f9a8244e 100644
--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -69,6 +69,7 @@ import java.util.Locale;
* which will be updated as the text changes.
* For text that will not change, use a {@link StaticLayout}.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class Layout {
// These should match the constants in framework/base/libs/hwui/hwui/DrawTextFunctor.h
diff --git a/core/java/android/text/LoginFilter.java b/core/java/android/text/LoginFilter.java
index 0e4eec4488ee..94f196f7ef6b 100644
--- a/core/java/android/text/LoginFilter.java
+++ b/core/java/android/text/LoginFilter.java
@@ -23,6 +23,7 @@ package android.text;
* handle non-BMP characters.
*/
@Deprecated
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class LoginFilter implements InputFilter {
private boolean mAppendInvalid; // whether to append or ignore invalid characters
/**
diff --git a/core/java/android/text/MeasuredParagraph.java b/core/java/android/text/MeasuredParagraph.java
index 31a226341907..b2e44598a548 100644
--- a/core/java/android/text/MeasuredParagraph.java
+++ b/core/java/android/text/MeasuredParagraph.java
@@ -68,6 +68,7 @@ import java.util.Arrays;
* @hide
*/
@TestApi
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class MeasuredParagraph {
private static final char OBJECT_REPLACEMENT_CHARACTER = '\uFFFC';
diff --git a/core/java/android/text/NoCopySpan.java b/core/java/android/text/NoCopySpan.java
index e754d765e14c..4cd3d04dc4e6 100644
--- a/core/java/android/text/NoCopySpan.java
+++ b/core/java/android/text/NoCopySpan.java
@@ -21,6 +21,7 @@ package android.text;
* into a new Spanned when performing a slice or copy operation on the original
* Spanned it was placed in.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface NoCopySpan {
/**
* Convenience equivalent for when you would just want a new Object() for
diff --git a/core/java/android/text/PackedIntVector.java b/core/java/android/text/PackedIntVector.java
index 3e5bf5677853..11dd0c38182b 100644
--- a/core/java/android/text/PackedIntVector.java
+++ b/core/java/android/text/PackedIntVector.java
@@ -29,6 +29,7 @@ import com.android.internal.util.GrowingArrayUtils;
* @hide
*/
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class PackedIntVector {
private final int mColumns;
private int mRows;
diff --git a/core/java/android/text/PackedObjectVector.java b/core/java/android/text/PackedObjectVector.java
index b777e16a153d..beb5ea4ee28c 100644
--- a/core/java/android/text/PackedObjectVector.java
+++ b/core/java/android/text/PackedObjectVector.java
@@ -21,6 +21,7 @@ import com.android.internal.util.GrowingArrayUtils;
import libcore.util.EmptyArray;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
class PackedObjectVector<E>
{
private int mColumns;
diff --git a/core/java/android/text/ParcelableSpan.java b/core/java/android/text/ParcelableSpan.java
index d7c1a4bc26e8..a9a4893d3692 100644
--- a/core/java/android/text/ParcelableSpan.java
+++ b/core/java/android/text/ParcelableSpan.java
@@ -24,6 +24,7 @@ import android.os.Parcelable;
* This can only be used by code in the framework; it is not intended for
* applications to implement their own Parcelable spans.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface ParcelableSpan extends Parcelable {
/**
* Return a special type identifier for this span class.
diff --git a/core/java/android/text/PrecomputedText.java b/core/java/android/text/PrecomputedText.java
index 5f6a9bd068c9..71cacd9b199a 100644
--- a/core/java/android/text/PrecomputedText.java
+++ b/core/java/android/text/PrecomputedText.java
@@ -75,6 +75,7 @@ import java.util.Objects;
* Note that any {@link android.text.NoCopySpan} attached to the original text won't be passed to
* PrecomputedText.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class PrecomputedText implements Spannable {
private static final char LINE_FEED = '\n';
diff --git a/core/java/android/text/SegmentFinder.java b/core/java/android/text/SegmentFinder.java
index 047d07a2e3e0..b7ab0e62753a 100644
--- a/core/java/android/text/SegmentFinder.java
+++ b/core/java/android/text/SegmentFinder.java
@@ -39,6 +39,7 @@ import java.util.Objects;
*
* @see Layout#getRangeForRect(RectF, SegmentFinder, Layout.TextInclusionStrategy)
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class SegmentFinder {
/**
* Return value of previousStartBoundary(int), previousEndBoundary(int), nextStartBoundary(int),
diff --git a/core/java/android/text/Selection.java b/core/java/android/text/Selection.java
index 711578c1482f..674b47372482 100644
--- a/core/java/android/text/Selection.java
+++ b/core/java/android/text/Selection.java
@@ -27,6 +27,7 @@ import java.text.BreakIterator;
* Utility class for manipulating cursors and selections in CharSequences.
* A cursor is a selection where the start and end are at the same offset.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Selection {
private Selection() { /* cannot be instantiated */ }
diff --git a/core/java/android/text/SpanColors.java b/core/java/android/text/SpanColors.java
index fcd242b62700..3b6a0418dcb0 100644
--- a/core/java/android/text/SpanColors.java
+++ b/core/java/android/text/SpanColors.java
@@ -27,6 +27,7 @@ import android.text.style.CharacterStyle;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class SpanColors {
public static final @ColorInt int NO_COLOR_FOUND = Color.TRANSPARENT;
diff --git a/core/java/android/text/SpanSet.java b/core/java/android/text/SpanSet.java
index d464278c714c..4ad8106eb459 100644
--- a/core/java/android/text/SpanSet.java
+++ b/core/java/android/text/SpanSet.java
@@ -31,6 +31,7 @@ import java.util.Arrays;
* Note that empty spans are ignored by this class.
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class SpanSet<E> {
private final Class<? extends E> classType;
diff --git a/core/java/android/text/SpanWatcher.java b/core/java/android/text/SpanWatcher.java
index 01e82c815ac8..31d63206a144 100644
--- a/core/java/android/text/SpanWatcher.java
+++ b/core/java/android/text/SpanWatcher.java
@@ -21,6 +21,7 @@ package android.text;
* will be called to notify it that other markup objects have been
* added, changed, or removed.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface SpanWatcher extends NoCopySpan {
/**
* This method is called to notify you that the specified object
diff --git a/core/java/android/text/Spannable.java b/core/java/android/text/Spannable.java
index 8315b2aa52c6..fac5131c035a 100644
--- a/core/java/android/text/Spannable.java
+++ b/core/java/android/text/Spannable.java
@@ -21,6 +21,7 @@ package android.text;
* attached and detached. Not all Spannable classes have mutable text;
* see {@link Editable} for that.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface Spannable
extends Spanned
{
diff --git a/core/java/android/text/SpannableString.java b/core/java/android/text/SpannableString.java
index afb5df809bc0..ee04a86a808f 100644
--- a/core/java/android/text/SpannableString.java
+++ b/core/java/android/text/SpannableString.java
@@ -21,6 +21,7 @@ package android.text;
* markup objects can be attached and detached.
* For mutable text, see {@link SpannableStringBuilder}.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class SpannableString
extends SpannableStringInternal
implements CharSequence, GetChars, Spannable
diff --git a/core/java/android/text/SpannableStringBuilder.java b/core/java/android/text/SpannableStringBuilder.java
index 0e61eff86c2b..f8d7283a94b3 100644
--- a/core/java/android/text/SpannableStringBuilder.java
+++ b/core/java/android/text/SpannableStringBuilder.java
@@ -35,6 +35,7 @@ import java.util.IdentityHashMap;
/**
* This is the class for text whose content and markup can both be changed.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class SpannableStringBuilder implements CharSequence, GetChars, Spannable, Editable,
Appendable, GraphicsOperations {
private final static String TAG = "SpannableStringBuilder";
diff --git a/core/java/android/text/SpannableStringInternal.java b/core/java/android/text/SpannableStringInternal.java
index f2ab1bb31fbc..90d83d59eb65 100644
--- a/core/java/android/text/SpannableStringInternal.java
+++ b/core/java/android/text/SpannableStringInternal.java
@@ -27,6 +27,7 @@ import libcore.util.EmptyArray;
import java.lang.reflect.Array;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
/* package */ abstract class SpannableStringInternal
{
/* package */ SpannableStringInternal(CharSequence source,
diff --git a/core/java/android/text/Spanned.java b/core/java/android/text/Spanned.java
index a0d54c26c6d9..6706ffd245c1 100644
--- a/core/java/android/text/Spanned.java
+++ b/core/java/android/text/Spanned.java
@@ -22,6 +22,7 @@ package android.text;
* see {@link Spannable} for mutable markup and {@link Editable} for
* mutable text.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface Spanned
extends CharSequence
{
diff --git a/core/java/android/text/SpannedString.java b/core/java/android/text/SpannedString.java
index acee3c5f1a41..a3f1ee2e3f20 100644
--- a/core/java/android/text/SpannedString.java
+++ b/core/java/android/text/SpannedString.java
@@ -22,6 +22,7 @@ package android.text;
* For mutable markup, see {@link SpannableString}; for mutable text,
* see {@link SpannableStringBuilder}.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class SpannedString
extends SpannableStringInternal
implements CharSequence, GetChars, Spanned
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index a5d52957c40e..8193cd2beb80 100644
--- a/core/java/android/text/StaticLayout.java
+++ b/core/java/android/text/StaticLayout.java
@@ -55,6 +55,7 @@ import java.util.Arrays;
* float, float, android.graphics.Paint)
* Canvas.drawText()} directly.</p>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class StaticLayout extends Layout {
/*
* The break iteration is done in native code. The protocol for using the native code is as
diff --git a/core/java/android/text/TextDirectionHeuristic.java b/core/java/android/text/TextDirectionHeuristic.java
index 8a4ba42bcc91..66cea853cda9 100644
--- a/core/java/android/text/TextDirectionHeuristic.java
+++ b/core/java/android/text/TextDirectionHeuristic.java
@@ -19,6 +19,7 @@ package android.text;
/**
* Interface for objects that use a heuristic for guessing at the paragraph direction by examining text.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface TextDirectionHeuristic {
/**
* Guess if a chars array is in the RTL direction or not.
diff --git a/core/java/android/text/TextDirectionHeuristics.java b/core/java/android/text/TextDirectionHeuristics.java
index 85260f4af2c8..3af8fb7f489d 100644
--- a/core/java/android/text/TextDirectionHeuristics.java
+++ b/core/java/android/text/TextDirectionHeuristics.java
@@ -32,6 +32,7 @@ import java.nio.CharBuffer;
* class.
*
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TextDirectionHeuristics {
/**
diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java
index 3015791ee0a9..091eb6027002 100644
--- a/core/java/android/text/TextLine.java
+++ b/core/java/android/text/TextLine.java
@@ -53,6 +53,7 @@ import java.util.ArrayList;
* @hide
*/
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TextLine {
private static final boolean DEBUG = false;
diff --git a/core/java/android/text/TextPaint.java b/core/java/android/text/TextPaint.java
index 73825b13cb6b..ff063f2ac2f4 100644
--- a/core/java/android/text/TextPaint.java
+++ b/core/java/android/text/TextPaint.java
@@ -25,6 +25,7 @@ import android.graphics.Paint;
* TextPaint is an extension of Paint that leaves room for some extra
* data used during text measuring and drawing.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TextPaint extends Paint {
// Special value 0 means no background paint
diff --git a/core/java/android/text/TextShaper.java b/core/java/android/text/TextShaper.java
index 6da0b63dbc1f..6d1740184763 100644
--- a/core/java/android/text/TextShaper.java
+++ b/core/java/android/text/TextShaper.java
@@ -169,6 +169,7 @@ import android.graphics.text.TextRunShaper;
* @see TextShaper#shapeText(CharSequence, int, int, TextDirectionHeuristic, TextPaint,
* GlyphsConsumer)
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TextShaper {
private TextShaper() {}
diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java
index 6dc82c40ddc5..042966b81b9a 100644
--- a/core/java/android/text/TextUtils.java
+++ b/core/java/android/text/TextUtils.java
@@ -34,6 +34,7 @@ import android.icu.text.Edits;
import android.icu.util.ULocale;
import android.os.Parcel;
import android.os.Parcelable;
+import android.ravenwood.annotation.RavenwoodKeepWholeClass;
import android.sysprop.DisplayProperties;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.AccessibilityClickableSpan;
@@ -85,8 +86,7 @@ import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern;
-@android.ravenwood.annotation.RavenwoodKeepStaticInitializer
-@android.ravenwood.annotation.RavenwoodKeepPartialClass
+@RavenwoodKeepWholeClass
public class TextUtils {
private static final String TAG = "TextUtils";
@@ -147,7 +147,6 @@ public class TextUtils {
private TextUtils() { /* cannot be instantiated */ }
- @android.ravenwood.annotation.RavenwoodKeep
public static void getChars(CharSequence s, int start, int end,
char[] dest, int destoff) {
Class<? extends CharSequence> c = s.getClass();
@@ -166,12 +165,10 @@ public class TextUtils {
}
}
- @android.ravenwood.annotation.RavenwoodKeep
public static int indexOf(CharSequence s, char ch) {
return indexOf(s, ch, 0);
}
- @android.ravenwood.annotation.RavenwoodKeep
public static int indexOf(CharSequence s, char ch, int start) {
Class<? extends CharSequence> c = s.getClass();
@@ -181,7 +178,6 @@ public class TextUtils {
return indexOf(s, ch, start, s.length());
}
- @android.ravenwood.annotation.RavenwoodKeep
public static int indexOf(CharSequence s, char ch, int start, int end) {
Class<? extends CharSequence> c = s.getClass();
@@ -219,12 +215,10 @@ public class TextUtils {
return -1;
}
- @android.ravenwood.annotation.RavenwoodKeep
public static int lastIndexOf(CharSequence s, char ch) {
return lastIndexOf(s, ch, s.length() - 1);
}
- @android.ravenwood.annotation.RavenwoodKeep
public static int lastIndexOf(CharSequence s, char ch, int last) {
Class<? extends CharSequence> c = s.getClass();
@@ -234,7 +228,6 @@ public class TextUtils {
return lastIndexOf(s, ch, 0, last);
}
- @android.ravenwood.annotation.RavenwoodKeep
public static int lastIndexOf(CharSequence s, char ch,
int start, int last) {
if (last < 0)
@@ -280,17 +273,14 @@ public class TextUtils {
return -1;
}
- @android.ravenwood.annotation.RavenwoodKeep
public static int indexOf(CharSequence s, CharSequence needle) {
return indexOf(s, needle, 0, s.length());
}
- @android.ravenwood.annotation.RavenwoodKeep
public static int indexOf(CharSequence s, CharSequence needle, int start) {
return indexOf(s, needle, start, s.length());
}
- @android.ravenwood.annotation.RavenwoodKeep
public static int indexOf(CharSequence s, CharSequence needle,
int start, int end) {
int nlen = needle.length();
@@ -318,7 +308,6 @@ public class TextUtils {
return -1;
}
- @android.ravenwood.annotation.RavenwoodKeep
public static boolean regionMatches(CharSequence one, int toffset,
CharSequence two, int ooffset,
int len) {
@@ -351,7 +340,6 @@ public class TextUtils {
* in that it does not preserve any style runs in the source sequence,
* allowing a more efficient implementation.
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static String substring(CharSequence source, int start, int end) {
if (source instanceof String)
return ((String) source).substring(start, end);
@@ -424,7 +412,6 @@ public class TextUtils {
* calling object.toString(). If tokens is null, a NullPointerException will be thrown. If
* tokens is an empty array, an empty string will be returned.
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static String join(@NonNull CharSequence delimiter, @NonNull Object[] tokens) {
final int length = tokens.length;
if (length == 0) {
@@ -448,7 +435,6 @@ public class TextUtils {
* calling object.toString(). If tokens is null, a NullPointerException will be thrown. If
* tokens is empty, an empty string will be returned.
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static String join(@NonNull CharSequence delimiter, @NonNull Iterable tokens) {
final Iterator<?> it = tokens.iterator();
if (!it.hasNext()) {
@@ -481,7 +467,6 @@ public class TextUtils {
*
* @throws NullPointerException if expression or text is null
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static String[] split(String text, String expression) {
if (text.length() == 0) {
return EmptyArray.STRING;
@@ -507,7 +492,6 @@ public class TextUtils {
*
* @throws NullPointerException if expression or text is null
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static String[] split(String text, Pattern pattern) {
if (text.length() == 0) {
return EmptyArray.STRING;
@@ -545,7 +529,6 @@ public class TextUtils {
* be returned for the empty string after that delimeter. That is, splitting <tt>"a,b,"</tt> on
* comma will return <tt>"a", "b"</tt>, not <tt>"a", "b", ""</tt>.
*/
- @android.ravenwood.annotation.RavenwoodKeepWholeClass
public static class SimpleStringSplitter implements StringSplitter, Iterator<String> {
private String mString;
private char mDelimiter;
@@ -609,31 +592,26 @@ public class TextUtils {
* @param str the string to be examined
* @return true if str is null or zero length
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static boolean isEmpty(@Nullable CharSequence str) {
return str == null || str.length() == 0;
}
/** {@hide} */
- @android.ravenwood.annotation.RavenwoodKeep
public static String nullIfEmpty(@Nullable String str) {
return isEmpty(str) ? null : str;
}
/** {@hide} */
- @android.ravenwood.annotation.RavenwoodKeep
public static String emptyIfNull(@Nullable String str) {
return str == null ? "" : str;
}
/** {@hide} */
- @android.ravenwood.annotation.RavenwoodKeep
public static String firstNotEmpty(@Nullable String a, @NonNull String b) {
return !isEmpty(a) ? a : Preconditions.checkStringNotEmpty(b);
}
/** {@hide} */
- @android.ravenwood.annotation.RavenwoodKeep
public static int length(@Nullable String s) {
return s != null ? s.length() : 0;
}
@@ -642,7 +620,6 @@ public class TextUtils {
* @return interned string if it's null.
* @hide
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static String safeIntern(String s) {
return (s != null) ? s.intern() : null;
}
@@ -652,7 +629,6 @@ public class TextUtils {
* spaces and ASCII control characters were trimmed from the start and end,
* as by {@link String#trim}.
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static int getTrimmedLength(CharSequence s) {
int len = s.length();
@@ -677,7 +653,6 @@ public class TextUtils {
* @param b second CharSequence to check
* @return true if a and b are equal
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static boolean equals(@Nullable CharSequence a, @Nullable CharSequence b) {
if (a == b) return true;
int length;
@@ -1713,7 +1688,6 @@ public class TextUtils {
return true;
}
- @android.ravenwood.annotation.RavenwoodKeep
/* package */ static char[] obtain(int len) {
char[] buf;
@@ -1728,7 +1702,6 @@ public class TextUtils {
return buf;
}
- @android.ravenwood.annotation.RavenwoodKeep
/* package */ static void recycle(char[] temp) {
if (temp.length > 1000)
return;
@@ -1743,7 +1716,6 @@ public class TextUtils {
* @param s the string to be encoded
* @return the encoded string
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static String htmlEncode(String s) {
StringBuilder sb = new StringBuilder();
char c;
@@ -1830,7 +1802,6 @@ public class TextUtils {
/**
* Returns whether the given CharSequence contains any printable characters.
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static boolean isGraphic(CharSequence str) {
final int len = str.length();
for (int cp, i=0; i<len; i+=Character.charCount(cp)) {
@@ -1857,7 +1828,6 @@ public class TextUtils {
* @deprecated Use {@link #isGraphic(CharSequence)} instead.
*/
@Deprecated
- @android.ravenwood.annotation.RavenwoodKeep
public static boolean isGraphic(char c) {
int gc = Character.getType(c);
return gc != Character.CONTROL
@@ -1872,7 +1842,6 @@ public class TextUtils {
/**
* Returns whether the given CharSequence contains only digits.
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static boolean isDigitsOnly(CharSequence str) {
final int len = str.length();
for (int cp, i = 0; i < len; i += Character.charCount(cp)) {
@@ -1887,7 +1856,6 @@ public class TextUtils {
/**
* @hide
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static boolean isPrintableAscii(final char c) {
final int asciiFirst = 0x20;
final int asciiLast = 0x7E; // included
@@ -1898,7 +1866,6 @@ public class TextUtils {
* @hide
*/
@UnsupportedAppUsage
- @android.ravenwood.annotation.RavenwoodKeep
public static boolean isPrintableAsciiOnly(final CharSequence str) {
final int len = str.length();
for (int i = 0; i < len; i++) {
@@ -1950,7 +1917,6 @@ public class TextUtils {
* {@link #CAP_MODE_CHARACTERS}, {@link #CAP_MODE_WORDS}, and
* {@link #CAP_MODE_SENTENCES}.
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static int getCapsMode(CharSequence cs, int off, int reqModes) {
if (off < 0) {
return 0;
@@ -2162,7 +2128,6 @@ public class TextUtils {
*
* Be careful: this code will need to be updated when vertical scripts will be supported
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static int getLayoutDirectionFromLocale(Locale locale) {
return ((locale != null && !locale.equals(Locale.ROOT)
&& ULocale.forLocale(locale).isRightToLeft())
@@ -2197,7 +2162,6 @@ public class TextUtils {
* match the supported grammar described above.
* @hide
*/
- @android.ravenwood.annotation.RavenwoodKeep
public static @NonNull String formatSimple(@NonNull String format, Object... args) {
final StringBuilder sb = new StringBuilder(format);
int j = 0;
@@ -2387,7 +2351,6 @@ public class TextUtils {
}
/** @hide */
- @android.ravenwood.annotation.RavenwoodKeep
public static boolean isNewline(int codePoint) {
int type = Character.getType(codePoint);
return type == Character.PARAGRAPH_SEPARATOR || type == Character.LINE_SEPARATOR
@@ -2395,19 +2358,16 @@ public class TextUtils {
}
/** @hide */
- @android.ravenwood.annotation.RavenwoodKeep
public static boolean isWhitespace(int codePoint) {
return Character.isWhitespace(codePoint) || codePoint == NBSP_CODE_POINT;
}
/** @hide */
- @android.ravenwood.annotation.RavenwoodKeep
public static boolean isWhitespaceExceptNewline(int codePoint) {
return isWhitespace(codePoint) && !isNewline(codePoint);
}
/** @hide */
- @android.ravenwood.annotation.RavenwoodKeep
public static boolean isPunctuation(int codePoint) {
int type = Character.getType(codePoint);
return type == Character.CONNECTOR_PUNCTUATION
diff --git a/core/java/android/text/TextWatcher.java b/core/java/android/text/TextWatcher.java
index a0aef690a1b8..5963ca7d5083 100644
--- a/core/java/android/text/TextWatcher.java
+++ b/core/java/android/text/TextWatcher.java
@@ -20,6 +20,7 @@ package android.text;
* When an object of this type is attached to an Editable, its methods will
* be called when the text is changed.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface TextWatcher extends NoCopySpan {
/**
* This method is called to notify you that, within <code>s</code>,
diff --git a/core/java/android/text/WordSegmentFinder.java b/core/java/android/text/WordSegmentFinder.java
index b0a70eae902a..b8702d72f29c 100644
--- a/core/java/android/text/WordSegmentFinder.java
+++ b/core/java/android/text/WordSegmentFinder.java
@@ -33,6 +33,7 @@ import android.text.method.WordIterator;
* @see <a href="https://unicode.org/reports/tr29/#Word_Boundaries">Unicode Text Segmentation - Word
* Boundaries</a>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class WordSegmentFinder extends SegmentFinder {
private final CharSequence mText;
private final WordIterator mWordIterator;
diff --git a/core/java/android/text/format/DateFormat.java b/core/java/android/text/format/DateFormat.java
index e6dad27d595b..ef60d3058c5c 100644
--- a/core/java/android/text/format/DateFormat.java
+++ b/core/java/android/text/format/DateFormat.java
@@ -63,6 +63,7 @@ import java.util.TimeZone;
* Note that the non-{@code format} methods in this class are implemented by
* {@code SimpleDateFormat}.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class DateFormat {
/**
* @deprecated Use a literal {@code '} instead.
diff --git a/core/java/android/text/format/DateIntervalFormat.java b/core/java/android/text/format/DateIntervalFormat.java
index 8dea3228eb0c..5ec9561b2315 100644
--- a/core/java/android/text/format/DateIntervalFormat.java
+++ b/core/java/android/text/format/DateIntervalFormat.java
@@ -37,6 +37,7 @@ import java.util.TimeZone;
* @hide
*/
@VisibleForTesting(visibility = PACKAGE)
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class DateIntervalFormat {
private static final LruCache<String, android.icu.text.DateIntervalFormat> CACHED_FORMATTERS =
diff --git a/core/java/android/text/format/DateTimeFormat.java b/core/java/android/text/format/DateTimeFormat.java
index 064d7172c44f..c8dd61d0d75c 100644
--- a/core/java/android/text/format/DateTimeFormat.java
+++ b/core/java/android/text/format/DateTimeFormat.java
@@ -29,6 +29,7 @@ import android.util.LruCache;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
class DateTimeFormat {
private static final FormatterCache CACHED_FORMATTERS = new FormatterCache();
diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java
index 518a5498d6ed..12ad76454870 100644
--- a/core/java/android/text/format/DateUtils.java
+++ b/core/java/android/text/format/DateUtils.java
@@ -44,6 +44,7 @@ import java.util.TimeZone;
* This class contains various date-related utilities for creating text for things like
* elapsed time and date ranges, strings for days of the week and months, and AM/PM text etc.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class DateUtils
{
private static final Object sLock = new Object();
diff --git a/core/java/android/text/format/DateUtilsBridge.java b/core/java/android/text/format/DateUtilsBridge.java
index 92ec9cf6d736..752a8c0ef40a 100644
--- a/core/java/android/text/format/DateUtilsBridge.java
+++ b/core/java/android/text/format/DateUtilsBridge.java
@@ -46,6 +46,7 @@ import com.android.internal.annotations.VisibleForTesting;
* @hide
*/
@VisibleForTesting(visibility = PACKAGE)
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class DateUtilsBridge {
/**
diff --git a/core/java/android/text/format/Formatter.java b/core/java/android/text/format/Formatter.java
index 7653bdb7b2d8..e7783dcb2630 100644
--- a/core/java/android/text/format/Formatter.java
+++ b/core/java/android/text/format/Formatter.java
@@ -41,6 +41,7 @@ import java.util.Locale;
* Utility class to aid in formatting common values that are not covered
* by the {@link java.util.Formatter} class in {@link java.util}
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class Formatter {
/** {@hide} */
diff --git a/core/java/android/text/format/RelativeDateTimeFormatter.java b/core/java/android/text/format/RelativeDateTimeFormatter.java
index 9096469699c1..6b940f8cb380 100644
--- a/core/java/android/text/format/RelativeDateTimeFormatter.java
+++ b/core/java/android/text/format/RelativeDateTimeFormatter.java
@@ -42,6 +42,7 @@ import java.util.Locale;
* @hide
*/
@VisibleForTesting(visibility = PACKAGE)
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class RelativeDateTimeFormatter {
public static final long SECOND_IN_MILLIS = 1000;
diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java
index bac7c6cf87d3..1beb57389ef5 100644
--- a/core/java/android/text/format/Time.java
+++ b/core/java/android/text/format/Time.java
@@ -53,6 +53,7 @@ import java.util.TimeZone;
* @deprecated Use {@link java.util.GregorianCalendar} instead.
*/
@Deprecated
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Time {
private static final String Y_M_D_T_H_M_S_000 = "%Y-%m-%dT%H:%M:%S.000";
private static final String Y_M_D_T_H_M_S_000_Z = "%Y-%m-%dT%H:%M:%S.000Z";
diff --git a/core/java/android/text/format/TimeFormatter.java b/core/java/android/text/format/TimeFormatter.java
index e42ad6334649..dd703d85624f 100644
--- a/core/java/android/text/format/TimeFormatter.java
+++ b/core/java/android/text/format/TimeFormatter.java
@@ -40,6 +40,7 @@ import java.util.TimeZone;
*
* <p>This class is not thread safe.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
class TimeFormatter {
// An arbitrary value outside the range representable by a char.
private static final int FORCE_LOWER_CASE = -1;
diff --git a/core/java/android/text/format/TimeMigrationUtils.java b/core/java/android/text/format/TimeMigrationUtils.java
index 17bac8d67b26..b2f5024c73b7 100644
--- a/core/java/android/text/format/TimeMigrationUtils.java
+++ b/core/java/android/text/format/TimeMigrationUtils.java
@@ -22,6 +22,7 @@ package android.text.format;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TimeMigrationUtils {
private TimeMigrationUtils() {}
diff --git a/core/java/android/text/method/AllCapsTransformationMethod.java b/core/java/android/text/method/AllCapsTransformationMethod.java
index 305b056aee72..70dcc52691cd 100644
--- a/core/java/android/text/method/AllCapsTransformationMethod.java
+++ b/core/java/android/text/method/AllCapsTransformationMethod.java
@@ -33,6 +33,7 @@ import java.util.Locale;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class AllCapsTransformationMethod implements TransformationMethod2 {
private static final String TAG = "AllCapsTransformationMethod";
diff --git a/core/java/android/text/method/ArrowKeyMovementMethod.java b/core/java/android/text/method/ArrowKeyMovementMethod.java
index 37474e5645b0..609922073f53 100644
--- a/core/java/android/text/method/ArrowKeyMovementMethod.java
+++ b/core/java/android/text/method/ArrowKeyMovementMethod.java
@@ -30,6 +30,7 @@ import android.widget.TextView;
* A movement method that provides cursor movement and selection.
* Supports displaying the context menu on DPad Center.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class ArrowKeyMovementMethod extends BaseMovementMethod implements MovementMethod {
private static boolean isSelecting(Spannable buffer) {
return ((MetaKeyKeyListener.getMetaState(buffer, MetaKeyKeyListener.META_SHIFT_ON) == 1) ||
diff --git a/core/java/android/text/method/BaseKeyListener.java b/core/java/android/text/method/BaseKeyListener.java
index e427908541e5..5ebfd99c6f6e 100644
--- a/core/java/android/text/method/BaseKeyListener.java
+++ b/core/java/android/text/method/BaseKeyListener.java
@@ -47,6 +47,7 @@ import java.text.BreakIterator;
* with hardware keyboards. Software input methods have no obligation to trigger
* the methods in this class.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class BaseKeyListener extends MetaKeyKeyListener
implements KeyListener {
/* package */ static final Object OLD_SEL_START = new NoCopySpan.Concrete();
diff --git a/core/java/android/text/method/BaseMovementMethod.java b/core/java/android/text/method/BaseMovementMethod.java
index 7a4b3a095ae9..0c2e52e04c1f 100644
--- a/core/java/android/text/method/BaseMovementMethod.java
+++ b/core/java/android/text/method/BaseMovementMethod.java
@@ -27,6 +27,7 @@ import android.widget.TextView;
/**
* Base classes for movement methods.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class BaseMovementMethod implements MovementMethod {
@Override
public boolean canSelectArbitrarily() {
diff --git a/core/java/android/text/method/CharacterPickerDialog.java b/core/java/android/text/method/CharacterPickerDialog.java
index 7d838e06cd68..f084d03cf6dd 100644
--- a/core/java/android/text/method/CharacterPickerDialog.java
+++ b/core/java/android/text/method/CharacterPickerDialog.java
@@ -38,6 +38,7 @@ import com.android.internal.R;
/**
* Dialog for choosing accented characters related to a base character.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class CharacterPickerDialog extends Dialog
implements OnItemClickListener, OnClickListener {
private View mView;
diff --git a/core/java/android/text/method/DateKeyListener.java b/core/java/android/text/method/DateKeyListener.java
index 0accbf6c74e5..acf182263272 100644
--- a/core/java/android/text/method/DateKeyListener.java
+++ b/core/java/android/text/method/DateKeyListener.java
@@ -35,6 +35,7 @@ import java.util.Locale;
* with hardware keyboards. Software input methods have no obligation to trigger
* the methods in this class.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class DateKeyListener extends NumberKeyListener
{
public int getInputType() {
diff --git a/core/java/android/text/method/DateTimeKeyListener.java b/core/java/android/text/method/DateTimeKeyListener.java
index 1593db5de641..a46ae45433b9 100644
--- a/core/java/android/text/method/DateTimeKeyListener.java
+++ b/core/java/android/text/method/DateTimeKeyListener.java
@@ -35,6 +35,7 @@ import java.util.Locale;
* with hardware keyboards. Software input methods have no obligation to trigger
* the methods in this class.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class DateTimeKeyListener extends NumberKeyListener
{
public int getInputType() {
diff --git a/core/java/android/text/method/DialerKeyListener.java b/core/java/android/text/method/DialerKeyListener.java
index 17abed6c363a..9eea51a07593 100644
--- a/core/java/android/text/method/DialerKeyListener.java
+++ b/core/java/android/text/method/DialerKeyListener.java
@@ -28,6 +28,7 @@ import android.view.KeyEvent;
* with hardware keyboards. Software input methods have no obligation to trigger
* the methods in this class.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class DialerKeyListener extends NumberKeyListener
{
@Override
diff --git a/core/java/android/text/method/DigitsKeyListener.java b/core/java/android/text/method/DigitsKeyListener.java
index d9f2dcf2e896..c97d4afef4fa 100644
--- a/core/java/android/text/method/DigitsKeyListener.java
+++ b/core/java/android/text/method/DigitsKeyListener.java
@@ -40,6 +40,7 @@ import java.util.Locale;
* with hardware keyboards. Software input methods have no obligation to trigger
* the methods in this class.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class DigitsKeyListener extends NumberKeyListener
{
private char[] mAccepted;
diff --git a/core/java/android/text/method/HideReturnsTransformationMethod.java b/core/java/android/text/method/HideReturnsTransformationMethod.java
index 40ce8714cf38..8b93b3558f86 100644
--- a/core/java/android/text/method/HideReturnsTransformationMethod.java
+++ b/core/java/android/text/method/HideReturnsTransformationMethod.java
@@ -24,6 +24,7 @@ import android.os.Build;
* to be hidden by displaying them as zero-width non-breaking space
* characters (\uFEFF).
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class HideReturnsTransformationMethod
extends ReplacementTransformationMethod {
private static char[] ORIGINAL = new char[] { '\r' };
diff --git a/core/java/android/text/method/InsertModeTransformationMethod.java b/core/java/android/text/method/InsertModeTransformationMethod.java
index 6c6576f8888e..ace2d256f5b0 100644
--- a/core/java/android/text/method/InsertModeTransformationMethod.java
+++ b/core/java/android/text/method/InsertModeTransformationMethod.java
@@ -58,6 +58,7 @@ import java.lang.reflect.Array;
* the new transformed text: "hello abc\n\n world", and the highlight range will be [5, 11).
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class InsertModeTransformationMethod implements TransformationMethod, TextWatcher {
/** The start offset of the highlight range in the original text, inclusive. */
private int mStart;
diff --git a/core/java/android/text/method/KeyListener.java b/core/java/android/text/method/KeyListener.java
index ce7054c40d01..447c4d9432ed 100644
--- a/core/java/android/text/method/KeyListener.java
+++ b/core/java/android/text/method/KeyListener.java
@@ -34,6 +34,7 @@ import android.view.View;
* targetting Jelly Bean or later, and will only deliver it for some
* key presses to applications targetting Ice Cream Sandwich or earlier.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface KeyListener {
/**
* Return the type of text that this key listener is manipulating,
diff --git a/core/java/android/text/method/LinkMovementMethod.java b/core/java/android/text/method/LinkMovementMethod.java
index 9f4a0aea7207..484bc1ae1a85 100644
--- a/core/java/android/text/method/LinkMovementMethod.java
+++ b/core/java/android/text/method/LinkMovementMethod.java
@@ -33,6 +33,7 @@ import android.widget.TextView;
* A movement method that traverses links in the text buffer and scrolls if necessary.
* Supports clicking on links with DPad Center or Enter.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class LinkMovementMethod extends ScrollingMovementMethod {
private static final int CLICK = 1;
private static final int UP = 2;
diff --git a/core/java/android/text/method/MetaKeyKeyListener.java b/core/java/android/text/method/MetaKeyKeyListener.java
index d1d7c968411f..7c9c2f132793 100644
--- a/core/java/android/text/method/MetaKeyKeyListener.java
+++ b/core/java/android/text/method/MetaKeyKeyListener.java
@@ -71,6 +71,7 @@ import android.view.View;
* }
* </code>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class MetaKeyKeyListener {
/**
* Flag that indicates that the SHIFT key is on.
diff --git a/core/java/android/text/method/MovementMethod.java b/core/java/android/text/method/MovementMethod.java
index f6fe575a9265..5ea439d50561 100644
--- a/core/java/android/text/method/MovementMethod.java
+++ b/core/java/android/text/method/MovementMethod.java
@@ -32,6 +32,7 @@ import android.widget.TextView;
* directly by applications.
* </p>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface MovementMethod {
public void initialize(TextView widget, Spannable text);
public boolean onKeyDown(TextView widget, Spannable text, int keyCode, KeyEvent event);
diff --git a/core/java/android/text/method/MultiTapKeyListener.java b/core/java/android/text/method/MultiTapKeyListener.java
index 5770482b3feb..022853abf450 100644
--- a/core/java/android/text/method/MultiTapKeyListener.java
+++ b/core/java/android/text/method/MultiTapKeyListener.java
@@ -36,6 +36,7 @@ import android.view.View;
* with hardware keyboards. Software input methods have no obligation to trigger
* the methods in this class.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class MultiTapKeyListener extends BaseKeyListener
implements SpanWatcher {
private static MultiTapKeyListener[] sInstance =
diff --git a/core/java/android/text/method/NumberKeyListener.java b/core/java/android/text/method/NumberKeyListener.java
index 2b038dd11348..e32ccd48c7e3 100644
--- a/core/java/android/text/method/NumberKeyListener.java
+++ b/core/java/android/text/method/NumberKeyListener.java
@@ -39,6 +39,7 @@ import java.util.Locale;
* with hardware keyboards. Software input methods have no obligation to trigger
* the methods in this class.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class NumberKeyListener extends BaseKeyListener
implements InputFilter
{
diff --git a/core/java/android/text/method/OffsetMapping.java b/core/java/android/text/method/OffsetMapping.java
index fcf3de6784fb..99613d3ae300 100644
--- a/core/java/android/text/method/OffsetMapping.java
+++ b/core/java/android/text/method/OffsetMapping.java
@@ -27,6 +27,7 @@ import java.lang.annotation.RetentionPolicy;
* {@link TransformationMethod} that alters the text length.
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface OffsetMapping {
/**
* The mapping strategy for a character offset.
diff --git a/core/java/android/text/method/PasswordTransformationMethod.java b/core/java/android/text/method/PasswordTransformationMethod.java
index 53553be6e5a8..4a61d9aa1bd0 100644
--- a/core/java/android/text/method/PasswordTransformationMethod.java
+++ b/core/java/android/text/method/PasswordTransformationMethod.java
@@ -33,6 +33,7 @@ import android.view.View;
import java.lang.ref.WeakReference;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class PasswordTransformationMethod
implements TransformationMethod, TextWatcher
{
diff --git a/core/java/android/text/method/QwertyKeyListener.java b/core/java/android/text/method/QwertyKeyListener.java
index c43864d0f215..27c58ea3a56e 100644
--- a/core/java/android/text/method/QwertyKeyListener.java
+++ b/core/java/android/text/method/QwertyKeyListener.java
@@ -37,6 +37,7 @@ import android.view.View;
* with hardware keyboards. Software input methods have no obligation to trigger
* the methods in this class.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class QwertyKeyListener extends BaseKeyListener {
private static QwertyKeyListener[] sInstance =
new QwertyKeyListener[Capitalize.values().length * 2];
diff --git a/core/java/android/text/method/ReplacementTransformationMethod.java b/core/java/android/text/method/ReplacementTransformationMethod.java
index d6f879aa4353..05899d79b02e 100644
--- a/core/java/android/text/method/ReplacementTransformationMethod.java
+++ b/core/java/android/text/method/ReplacementTransformationMethod.java
@@ -30,6 +30,7 @@ import android.view.View;
* array to be replaced by the corresponding characters in the
* {@link #getReplacement} array.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class ReplacementTransformationMethod
implements TransformationMethod
{
diff --git a/core/java/android/text/method/ScrollingMovementMethod.java b/core/java/android/text/method/ScrollingMovementMethod.java
index 4f422cbf51cb..2e0eda96b7f6 100644
--- a/core/java/android/text/method/ScrollingMovementMethod.java
+++ b/core/java/android/text/method/ScrollingMovementMethod.java
@@ -25,6 +25,7 @@ import android.widget.TextView;
/**
* A movement method that interprets movement keys by scrolling the text buffer.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class ScrollingMovementMethod extends BaseMovementMethod implements MovementMethod {
@Override
protected boolean left(TextView widget, Spannable buffer) {
diff --git a/core/java/android/text/method/SingleLineTransformationMethod.java b/core/java/android/text/method/SingleLineTransformationMethod.java
index 818526a7d795..d6eff86920f8 100644
--- a/core/java/android/text/method/SingleLineTransformationMethod.java
+++ b/core/java/android/text/method/SingleLineTransformationMethod.java
@@ -21,6 +21,7 @@ package android.text.method;
* displayed as spaces instead of causing line breaks, and causes
* carriage return characters (\r) to have no appearance.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class SingleLineTransformationMethod
extends ReplacementTransformationMethod {
private static char[] ORIGINAL = new char[] { '\n', '\r' };
diff --git a/core/java/android/text/method/TextKeyListener.java b/core/java/android/text/method/TextKeyListener.java
index 2eb917b6fd57..1b0ae61c62a4 100644
--- a/core/java/android/text/method/TextKeyListener.java
+++ b/core/java/android/text/method/TextKeyListener.java
@@ -43,6 +43,7 @@ import java.lang.ref.WeakReference;
* with hardware keyboards. Software input methods have no obligation to trigger
* the methods in this class.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TextKeyListener extends BaseKeyListener implements SpanWatcher {
private static TextKeyListener[] sInstance =
new TextKeyListener[Capitalize.values().length * 2];
diff --git a/core/java/android/text/method/TimeKeyListener.java b/core/java/android/text/method/TimeKeyListener.java
index f11f40099d9c..337611c79e3e 100644
--- a/core/java/android/text/method/TimeKeyListener.java
+++ b/core/java/android/text/method/TimeKeyListener.java
@@ -35,6 +35,7 @@ import java.util.Locale;
* with hardware keyboards. Software input methods have no obligation to trigger
* the methods in this class.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TimeKeyListener extends NumberKeyListener
{
public int getInputType() {
diff --git a/core/java/android/text/method/Touch.java b/core/java/android/text/method/Touch.java
index 44811cb3ef8b..85aadba5da2b 100644
--- a/core/java/android/text/method/Touch.java
+++ b/core/java/android/text/method/Touch.java
@@ -25,6 +25,7 @@ import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.widget.TextView;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Touch {
private Touch() { }
diff --git a/core/java/android/text/method/TransformationMethod.java b/core/java/android/text/method/TransformationMethod.java
index 8f3b334abbbd..5246baa39d14 100644
--- a/core/java/android/text/method/TransformationMethod.java
+++ b/core/java/android/text/method/TransformationMethod.java
@@ -24,6 +24,7 @@ import android.view.View;
* characters of passwords with dots, or keeping the newline characters
* from causing line breaks in single-line text fields.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface TransformationMethod
{
/**
diff --git a/core/java/android/text/method/TransformationMethod2.java b/core/java/android/text/method/TransformationMethod2.java
index 8d5ec246640e..6e0feb419f00 100644
--- a/core/java/android/text/method/TransformationMethod2.java
+++ b/core/java/android/text/method/TransformationMethod2.java
@@ -23,6 +23,7 @@ import android.compat.annotation.UnsupportedAppUsage;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface TransformationMethod2 extends TransformationMethod {
/**
* Relax the contract of TransformationMethod to allow length changes,
diff --git a/core/java/android/text/method/TranslationTransformationMethod.java b/core/java/android/text/method/TranslationTransformationMethod.java
index 43d186ee9d21..8f43d3dd1f6f 100644
--- a/core/java/android/text/method/TranslationTransformationMethod.java
+++ b/core/java/android/text/method/TranslationTransformationMethod.java
@@ -33,6 +33,7 @@ import java.util.regex.Pattern;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TranslationTransformationMethod implements TransformationMethod2 {
private static final String TAG = "TranslationTransformationMethod";
diff --git a/core/java/android/text/method/WordIterator.java b/core/java/android/text/method/WordIterator.java
index 2956f8461388..d57fa9b55312 100644
--- a/core/java/android/text/method/WordIterator.java
+++ b/core/java/android/text/method/WordIterator.java
@@ -37,6 +37,7 @@ import java.util.Locale;
* Also provides methods to determine word boundaries.
* {@hide}
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class WordIterator implements Selection.PositionIterator {
// Size of the window for the word iterator, should be greater than the longest word's length
private static final int WINDOW_WIDTH = 50;
diff --git a/core/java/android/text/style/AbsoluteSizeSpan.java b/core/java/android/text/style/AbsoluteSizeSpan.java
index 6d4f05a84a03..1bc5d71fcd37 100644
--- a/core/java/android/text/style/AbsoluteSizeSpan.java
+++ b/core/java/android/text/style/AbsoluteSizeSpan.java
@@ -32,6 +32,7 @@ import android.text.TextUtils;
* <img src="{@docRoot}reference/android/images/text/style/absolutesizespan.png" />
* <figcaption>Text with text size updated.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class AbsoluteSizeSpan extends MetricAffectingSpan implements ParcelableSpan {
private final int mSize;
diff --git a/core/java/android/text/style/AccessibilityClickableSpan.java b/core/java/android/text/style/AccessibilityClickableSpan.java
index ee8d156f9aac..5741f2ae2864 100644
--- a/core/java/android/text/style/AccessibilityClickableSpan.java
+++ b/core/java/android/text/style/AccessibilityClickableSpan.java
@@ -43,6 +43,7 @@ import com.android.internal.R;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class AccessibilityClickableSpan extends ClickableSpan
implements ParcelableSpan {
// The id of the span this one replaces
diff --git a/core/java/android/text/style/AccessibilityReplacementSpan.java b/core/java/android/text/style/AccessibilityReplacementSpan.java
index e4fc14790b53..af3a324668d0 100644
--- a/core/java/android/text/style/AccessibilityReplacementSpan.java
+++ b/core/java/android/text/style/AccessibilityReplacementSpan.java
@@ -31,6 +31,7 @@ import android.view.accessibility.AccessibilityNodeInfo;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class AccessibilityReplacementSpan extends ReplacementSpan
implements ParcelableSpan {
diff --git a/core/java/android/text/style/AccessibilityURLSpan.java b/core/java/android/text/style/AccessibilityURLSpan.java
index e280bdf8b339..1fb76e776b56 100644
--- a/core/java/android/text/style/AccessibilityURLSpan.java
+++ b/core/java/android/text/style/AccessibilityURLSpan.java
@@ -27,6 +27,7 @@ import android.view.accessibility.AccessibilityNodeInfo;
* @hide
*/
@SuppressWarnings("ParcelableCreator")
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class AccessibilityURLSpan extends URLSpan implements Parcelable {
final AccessibilityClickableSpan mAccessibilityClickableSpan;
diff --git a/core/java/android/text/style/AlignmentSpan.java b/core/java/android/text/style/AlignmentSpan.java
index 31db78a51c75..53cbd63a32c7 100644
--- a/core/java/android/text/style/AlignmentSpan.java
+++ b/core/java/android/text/style/AlignmentSpan.java
@@ -25,6 +25,7 @@ import android.text.TextUtils;
/**
* Span that allows defining the alignment of text at the paragraph level.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface AlignmentSpan extends ParagraphStyle {
/**
diff --git a/core/java/android/text/style/BackgroundColorSpan.java b/core/java/android/text/style/BackgroundColorSpan.java
index 13647d92a897..bb04d0ff6178 100644
--- a/core/java/android/text/style/BackgroundColorSpan.java
+++ b/core/java/android/text/style/BackgroundColorSpan.java
@@ -34,6 +34,7 @@ import android.text.TextUtils;
* <img src="{@docRoot}reference/android/images/text/style/backgroundcolorspan.png" />
* <figcaption>Set a background color for the text.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class BackgroundColorSpan extends CharacterStyle
implements UpdateAppearance, ParcelableSpan {
diff --git a/core/java/android/text/style/BulletSpan.java b/core/java/android/text/style/BulletSpan.java
index f70e6c56b5c9..24ae6e25fa59 100644
--- a/core/java/android/text/style/BulletSpan.java
+++ b/core/java/android/text/style/BulletSpan.java
@@ -63,6 +63,7 @@ import android.text.TextUtils;
* <img src="{@docRoot}reference/android/images/text/style/custombulletspan.png" />
* <figcaption>Customized BulletSpan.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class BulletSpan implements LeadingMarginSpan, ParcelableSpan {
// Bullet is slightly bigger to avoid aliasing artifacts on mdpi devices.
private static final int STANDARD_BULLET_RADIUS = 4;
diff --git a/core/java/android/text/style/CharacterStyle.java b/core/java/android/text/style/CharacterStyle.java
index 5b95f1a7816a..2ea05e6ecde0 100644
--- a/core/java/android/text/style/CharacterStyle.java
+++ b/core/java/android/text/style/CharacterStyle.java
@@ -23,6 +23,7 @@ import android.text.TextPaint;
* class. Most extend its subclass {@link MetricAffectingSpan}, but simple
* ones may just implement {@link UpdateAppearance}.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class CharacterStyle {
public abstract void updateDrawState(TextPaint tp);
diff --git a/core/java/android/text/style/ClickableSpan.java b/core/java/android/text/style/ClickableSpan.java
index 238da55526b0..9e35d75c8833 100644
--- a/core/java/android/text/style/ClickableSpan.java
+++ b/core/java/android/text/style/ClickableSpan.java
@@ -36,6 +36,7 @@ import android.view.View;
* <img src="{@docRoot}reference/android/images/text/style/clickablespan.png" />
* <figcaption>Text with <code>ClickableSpan</code>.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class ClickableSpan extends CharacterStyle implements UpdateAppearance {
private static int sIdCounter = 0;
diff --git a/core/java/android/text/style/ForegroundColorSpan.java b/core/java/android/text/style/ForegroundColorSpan.java
index 5c9742622549..337c49fddf16 100644
--- a/core/java/android/text/style/ForegroundColorSpan.java
+++ b/core/java/android/text/style/ForegroundColorSpan.java
@@ -34,6 +34,7 @@ import android.text.TextUtils;
* <img src="{@docRoot}reference/android/images/text/style/foregroundcolorspan.png" />
* <figcaption>Set a text color.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class ForegroundColorSpan extends CharacterStyle
implements UpdateAppearance, ParcelableSpan {
diff --git a/core/java/android/text/style/IconMarginSpan.java b/core/java/android/text/style/IconMarginSpan.java
index a6c513971ffb..cc946e98ece9 100644
--- a/core/java/android/text/style/IconMarginSpan.java
+++ b/core/java/android/text/style/IconMarginSpan.java
@@ -44,6 +44,7 @@ import android.text.Spanned;
* @see DrawableMarginSpan for working with a {@link android.graphics.drawable.Drawable} instead of
* a {@link Bitmap}.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class IconMarginSpan implements LeadingMarginSpan, LineHeightSpan {
@NonNull
diff --git a/core/java/android/text/style/LeadingMarginSpan.java b/core/java/android/text/style/LeadingMarginSpan.java
index 5bd2d60bb34f..60c45784f680 100644
--- a/core/java/android/text/style/LeadingMarginSpan.java
+++ b/core/java/android/text/style/LeadingMarginSpan.java
@@ -32,6 +32,7 @@ import android.text.TextUtils;
* LeadingMarginSpans should be attached from the first character to the last
* character of a single paragraph.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface LeadingMarginSpan
extends ParagraphStyle
{
diff --git a/core/java/android/text/style/LineBackgroundSpan.java b/core/java/android/text/style/LineBackgroundSpan.java
index 7cb91477738e..c2d38ce92290 100644
--- a/core/java/android/text/style/LineBackgroundSpan.java
+++ b/core/java/android/text/style/LineBackgroundSpan.java
@@ -28,6 +28,7 @@ import android.text.TextUtils;
/**
* Used to change the background of lines where the span is attached to.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface LineBackgroundSpan extends ParagraphStyle
{
/**
diff --git a/core/java/android/text/style/LineBreakConfigSpan.java b/core/java/android/text/style/LineBreakConfigSpan.java
index eeb638389271..1af1eed86e1f 100644
--- a/core/java/android/text/style/LineBreakConfigSpan.java
+++ b/core/java/android/text/style/LineBreakConfigSpan.java
@@ -31,6 +31,7 @@ import java.util.Objects;
* LineBreakSpan for changing line break style of the specific region of the text.
*/
@FlaggedApi(FLAG_NO_BREAK_NO_HYPHENATION_SPAN)
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class LineBreakConfigSpan implements ParcelableSpan {
private final LineBreakConfig mLineBreakConfig;
diff --git a/core/java/android/text/style/LineHeightSpan.java b/core/java/android/text/style/LineHeightSpan.java
index ae565d1c3317..71e8932c4aba 100644
--- a/core/java/android/text/style/LineHeightSpan.java
+++ b/core/java/android/text/style/LineHeightSpan.java
@@ -30,6 +30,7 @@ import com.android.internal.util.Preconditions;
/**
* The classes that affect the line height of paragraph should implement this interface.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface LineHeightSpan extends ParagraphStyle, WrapTogetherSpan {
/**
* Classes that implement this should define how the height is being calculated.
diff --git a/core/java/android/text/style/LocaleSpan.java b/core/java/android/text/style/LocaleSpan.java
index 489ceeaa5542..be5525a2f41a 100644
--- a/core/java/android/text/style/LocaleSpan.java
+++ b/core/java/android/text/style/LocaleSpan.java
@@ -32,6 +32,7 @@ import java.util.Locale;
/**
* Changes the {@link Locale} of the text to which the span is attached.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class LocaleSpan extends MetricAffectingSpan implements ParcelableSpan {
@NonNull
private final LocaleList mLocales;
diff --git a/core/java/android/text/style/MaskFilterSpan.java b/core/java/android/text/style/MaskFilterSpan.java
index 587d1b4497dc..44db012953b3 100644
--- a/core/java/android/text/style/MaskFilterSpan.java
+++ b/core/java/android/text/style/MaskFilterSpan.java
@@ -30,6 +30,7 @@ import android.text.TextPaint;
* <img src="{@docRoot}reference/android/images/text/style/maskfilterspan.png" />
* <figcaption>Text blurred with the <code>MaskFilterSpan</code>.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class MaskFilterSpan extends CharacterStyle implements UpdateAppearance {
private MaskFilter mFilter;
diff --git a/core/java/android/text/style/MetricAffectingSpan.java b/core/java/android/text/style/MetricAffectingSpan.java
index 61b7947af638..f30fdc15ae39 100644
--- a/core/java/android/text/style/MetricAffectingSpan.java
+++ b/core/java/android/text/style/MetricAffectingSpan.java
@@ -23,6 +23,7 @@ import android.text.TextPaint;
* The classes that affect character-level text formatting in a way that
* changes the width or height of characters extend this class.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class MetricAffectingSpan
extends CharacterStyle
implements UpdateLayout {
diff --git a/core/java/android/text/style/NoWritingToolsSpan.java b/core/java/android/text/style/NoWritingToolsSpan.java
index 90f85aa69faa..c7dfcfa6dc0b 100644
--- a/core/java/android/text/style/NoWritingToolsSpan.java
+++ b/core/java/android/text/style/NoWritingToolsSpan.java
@@ -32,6 +32,7 @@ import android.text.TextUtils;
* tools should only rewrite the user input text, and not modify the quoted text.
*/
@FlaggedApi(FLAG_WRITING_TOOLS)
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class NoWritingToolsSpan implements ParcelableSpan {
/**
diff --git a/core/java/android/text/style/ParagraphStyle.java b/core/java/android/text/style/ParagraphStyle.java
index 423156eca3de..27c1e261b116 100644
--- a/core/java/android/text/style/ParagraphStyle.java
+++ b/core/java/android/text/style/ParagraphStyle.java
@@ -20,6 +20,7 @@ package android.text.style;
* The classes that affect paragraph-level text formatting implement
* this interface.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface ParagraphStyle
{
diff --git a/core/java/android/text/style/QuoteSpan.java b/core/java/android/text/style/QuoteSpan.java
index 393ede653cb1..99c95749205a 100644
--- a/core/java/android/text/style/QuoteSpan.java
+++ b/core/java/android/text/style/QuoteSpan.java
@@ -57,6 +57,7 @@ import android.text.TextUtils;
* <img src="{@docRoot}reference/android/images/text/style/customquotespan.png" />
* <figcaption>Customized <code>QuoteSpan</code>.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class QuoteSpan implements LeadingMarginSpan, ParcelableSpan {
/**
* Default stripe width in pixels.
diff --git a/core/java/android/text/style/RasterizerSpan.java b/core/java/android/text/style/RasterizerSpan.java
index f0be50ab065c..cf8599c4f1b1 100644
--- a/core/java/android/text/style/RasterizerSpan.java
+++ b/core/java/android/text/style/RasterizerSpan.java
@@ -22,6 +22,7 @@ import android.text.TextPaint;
/**
* @removed Rasterizer is not supported for hw-accerlerated and PDF rendering
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class RasterizerSpan extends CharacterStyle implements UpdateAppearance {
private Rasterizer mRasterizer;
diff --git a/core/java/android/text/style/RelativeSizeSpan.java b/core/java/android/text/style/RelativeSizeSpan.java
index 5c91b201d28c..38d5d38ae704 100644
--- a/core/java/android/text/style/RelativeSizeSpan.java
+++ b/core/java/android/text/style/RelativeSizeSpan.java
@@ -34,6 +34,7 @@ import android.text.TextUtils;
* <img src="{@docRoot}reference/android/images/text/style/relativesizespan.png" />
* <figcaption>Text increased by 50% with <code>RelativeSizeSpan</code>.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class RelativeSizeSpan extends MetricAffectingSpan implements ParcelableSpan {
private final float mProportion;
diff --git a/core/java/android/text/style/ReplacementSpan.java b/core/java/android/text/style/ReplacementSpan.java
index 9430fd3a26c0..a6fe1fe72937 100644
--- a/core/java/android/text/style/ReplacementSpan.java
+++ b/core/java/android/text/style/ReplacementSpan.java
@@ -23,6 +23,7 @@ import android.graphics.Canvas;
import android.graphics.Paint;
import android.text.TextPaint;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class ReplacementSpan extends MetricAffectingSpan {
private CharSequence mContentDescription = null;
diff --git a/core/java/android/text/style/ScaleXSpan.java b/core/java/android/text/style/ScaleXSpan.java
index d022b071b4d7..009973ee5306 100644
--- a/core/java/android/text/style/ScaleXSpan.java
+++ b/core/java/android/text/style/ScaleXSpan.java
@@ -36,6 +36,7 @@ import android.text.TextUtils;
* <img src="{@docRoot}reference/android/images/text/style/scalexspan.png" />
* <figcaption>Text scaled by 100% with <code>ScaleXSpan</code>.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class ScaleXSpan extends MetricAffectingSpan implements ParcelableSpan {
private final float mProportion;
diff --git a/core/java/android/text/style/SpanUtils.java b/core/java/android/text/style/SpanUtils.java
index 6b4bd1a76358..21a96cdfe3b1 100644
--- a/core/java/android/text/style/SpanUtils.java
+++ b/core/java/android/text/style/SpanUtils.java
@@ -30,6 +30,7 @@ import java.util.List;
/**
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class SpanUtils {
private SpanUtils() {} // Do not instantiate
diff --git a/core/java/android/text/style/SpellCheckSpan.java b/core/java/android/text/style/SpellCheckSpan.java
index e8ec3c6fb55c..39cd279d3d18 100644
--- a/core/java/android/text/style/SpellCheckSpan.java
+++ b/core/java/android/text/style/SpellCheckSpan.java
@@ -28,6 +28,7 @@ import android.text.TextUtils;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class SpellCheckSpan implements ParcelableSpan {
private boolean mSpellCheckInProgress;
diff --git a/core/java/android/text/style/StrikethroughSpan.java b/core/java/android/text/style/StrikethroughSpan.java
index 65ee34717232..3654870ee088 100644
--- a/core/java/android/text/style/StrikethroughSpan.java
+++ b/core/java/android/text/style/StrikethroughSpan.java
@@ -32,6 +32,7 @@ import android.text.TextUtils;
* <img src="{@docRoot}reference/android/images/text/style/strikethroughspan.png" />
* <figcaption>Strikethrough text.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class StrikethroughSpan extends CharacterStyle
implements UpdateAppearance, ParcelableSpan {
diff --git a/core/java/android/text/style/StyleSpan.java b/core/java/android/text/style/StyleSpan.java
index 378682b9c890..c01e13443ad1 100644
--- a/core/java/android/text/style/StyleSpan.java
+++ b/core/java/android/text/style/StyleSpan.java
@@ -44,6 +44,7 @@ import android.text.TextUtils;
* <img src="{@docRoot}reference/android/images/text/style/stylespan.png" />
* <figcaption>Text styled bold and italic with the <code>StyleSpan</code>.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class StyleSpan extends MetricAffectingSpan implements ParcelableSpan {
private final int mStyle;
diff --git a/core/java/android/text/style/SubscriptSpan.java b/core/java/android/text/style/SubscriptSpan.java
index 729a9ad73e75..54c765d902a4 100644
--- a/core/java/android/text/style/SubscriptSpan.java
+++ b/core/java/android/text/style/SubscriptSpan.java
@@ -37,6 +37,7 @@ import android.text.TextUtils;
* Note: Since the span affects the position of the text, if the text is on the last line of a
* TextView, it may appear cut.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class SubscriptSpan extends MetricAffectingSpan implements ParcelableSpan {
/**
diff --git a/core/java/android/text/style/SuggestionRangeSpan.java b/core/java/android/text/style/SuggestionRangeSpan.java
index 1eee99aaac62..640fae4d1a3a 100644
--- a/core/java/android/text/style/SuggestionRangeSpan.java
+++ b/core/java/android/text/style/SuggestionRangeSpan.java
@@ -27,6 +27,7 @@ import android.text.TextUtils;
* A SuggestionRangeSpan is used to show which part of an EditText is affected by a suggestion
* popup window.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class SuggestionRangeSpan extends CharacterStyle implements ParcelableSpan {
private int mBackgroundColor;
diff --git a/core/java/android/text/style/SuggestionSpan.java b/core/java/android/text/style/SuggestionSpan.java
index 0cf96f617f4a..d819062428f9 100644
--- a/core/java/android/text/style/SuggestionSpan.java
+++ b/core/java/android/text/style/SuggestionSpan.java
@@ -48,6 +48,7 @@ import java.util.Locale;
*
* @see TextView#isSuggestionsEnabled()
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class SuggestionSpan extends CharacterStyle implements ParcelableSpan {
private static final String TAG = "SuggestionSpan";
diff --git a/core/java/android/text/style/SuperscriptSpan.java b/core/java/android/text/style/SuperscriptSpan.java
index 561022352ffd..d3b339c02e92 100644
--- a/core/java/android/text/style/SuperscriptSpan.java
+++ b/core/java/android/text/style/SuperscriptSpan.java
@@ -35,6 +35,7 @@ import android.text.TextUtils;
* TextView, it may appear cut. This can be avoided by decreasing the text size with an {@link
* AbsoluteSizeSpan}
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class SuperscriptSpan extends MetricAffectingSpan implements ParcelableSpan {
/**
* Creates a {@link SuperscriptSpan}.
diff --git a/core/java/android/text/style/TabStopSpan.java b/core/java/android/text/style/TabStopSpan.java
index 812847594ad8..e6733a2aac91 100644
--- a/core/java/android/text/style/TabStopSpan.java
+++ b/core/java/android/text/style/TabStopSpan.java
@@ -24,6 +24,7 @@ import android.annotation.Px;
* the leading margin of the line. <code>TabStopSpan</code> will only affect the first tab
* encountered on the first line of the text.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface TabStopSpan extends ParagraphStyle {
/**
diff --git a/core/java/android/text/style/TextAppearanceSpan.java b/core/java/android/text/style/TextAppearanceSpan.java
index 245a9dbc9f6c..7ede3499dc4d 100644
--- a/core/java/android/text/style/TextAppearanceSpan.java
+++ b/core/java/android/text/style/TextAppearanceSpan.java
@@ -58,6 +58,7 @@ import android.text.TextUtils;
* @attr ref android.R.styleable#TextAppearance_fontVariationSettings
*
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TextAppearanceSpan extends MetricAffectingSpan implements ParcelableSpan {
private final String mFamilyName;
private final int mStyle;
diff --git a/core/java/android/text/style/TtsSpan.java b/core/java/android/text/style/TtsSpan.java
index e0d4ec1ca826..6d776d14fb00 100644
--- a/core/java/android/text/style/TtsSpan.java
+++ b/core/java/android/text/style/TtsSpan.java
@@ -42,6 +42,7 @@ import java.util.Locale;
* The inner classes are there for convenience and provide builders for each
* TtsSpan type.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TtsSpan implements ParcelableSpan {
private final String mType;
private final PersistableBundle mArgs;
diff --git a/core/java/android/text/style/TypefaceSpan.java b/core/java/android/text/style/TypefaceSpan.java
index bdfc772c0328..86f7f7638629 100644
--- a/core/java/android/text/style/TypefaceSpan.java
+++ b/core/java/android/text/style/TypefaceSpan.java
@@ -50,6 +50,7 @@ import android.text.TextUtils;
* <figcaption>Text with <code>TypefaceSpan</code>s constructed based on a font from resource and
* from a font family.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TypefaceSpan extends MetricAffectingSpan implements ParcelableSpan {
@Nullable
diff --git a/core/java/android/text/style/URLSpan.java b/core/java/android/text/style/URLSpan.java
index 9969d29a857d..f06627d0cbe1 100644
--- a/core/java/android/text/style/URLSpan.java
+++ b/core/java/android/text/style/URLSpan.java
@@ -41,6 +41,7 @@ import android.view.View;
* <img src="{@docRoot}reference/android/images/text/style/urlspan.png" />
* <figcaption>Text with <code>URLSpan</code>.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class URLSpan extends ClickableSpan implements ParcelableSpan {
private final String mURL;
diff --git a/core/java/android/text/style/UnderlineSpan.java b/core/java/android/text/style/UnderlineSpan.java
index 075e70b7fbf5..b3bb142d1dc8 100644
--- a/core/java/android/text/style/UnderlineSpan.java
+++ b/core/java/android/text/style/UnderlineSpan.java
@@ -32,6 +32,7 @@ import android.text.TextUtils;
* <img src="{@docRoot}reference/android/images/text/style/underlinespan.png" />
* <figcaption>Underlined text.</figcaption>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class UnderlineSpan extends CharacterStyle
implements UpdateAppearance, ParcelableSpan {
diff --git a/core/java/android/text/style/UpdateAppearance.java b/core/java/android/text/style/UpdateAppearance.java
index 7112347fcfbf..7b0a6d372122 100644
--- a/core/java/android/text/style/UpdateAppearance.java
+++ b/core/java/android/text/style/UpdateAppearance.java
@@ -22,5 +22,6 @@ package android.text.style;
* that if the class also impacts size or other metrics, it should instead
* implement {@link UpdateLayout}.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface UpdateAppearance {
}
diff --git a/core/java/android/text/style/UpdateLayout.java b/core/java/android/text/style/UpdateLayout.java
index 591075ecb972..5af4141cc8c2 100644
--- a/core/java/android/text/style/UpdateLayout.java
+++ b/core/java/android/text/style/UpdateLayout.java
@@ -22,4 +22,5 @@ package android.text.style;
* this interface. This interface also includes {@link UpdateAppearance}
* since such a change implicitly also impacts the appearance.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface UpdateLayout extends UpdateAppearance { }
diff --git a/core/java/android/text/style/WrapTogetherSpan.java b/core/java/android/text/style/WrapTogetherSpan.java
index 11721a8c3253..cf74c1bae3b7 100644
--- a/core/java/android/text/style/WrapTogetherSpan.java
+++ b/core/java/android/text/style/WrapTogetherSpan.java
@@ -16,6 +16,7 @@
package android.text.style;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface WrapTogetherSpan
extends ParagraphStyle
{
diff --git a/core/java/android/text/util/Rfc822Token.java b/core/java/android/text/util/Rfc822Token.java
index 2f207db9d494..d6e987b2952e 100644
--- a/core/java/android/text/util/Rfc822Token.java
+++ b/core/java/android/text/util/Rfc822Token.java
@@ -22,6 +22,7 @@ import android.annotation.Nullable;
* This class stores an RFC 822-like name, address, and comment,
* and provides methods to convert them to quoted strings.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Rfc822Token {
@Nullable
private String mName, mAddress, mComment;
diff --git a/core/java/android/text/util/Rfc822Tokenizer.java b/core/java/android/text/util/Rfc822Tokenizer.java
index 68334e4d927c..8a9252ac9506 100644
--- a/core/java/android/text/util/Rfc822Tokenizer.java
+++ b/core/java/android/text/util/Rfc822Tokenizer.java
@@ -27,6 +27,7 @@ import java.util.Collection;
* a string of addresses (such as might be typed into such a field)
* into a series of Rfc822Tokens.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Rfc822Tokenizer implements MultiAutoCompleteTextView.Tokenizer {
/**
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index 0903d2293d67..c4347f05f4a3 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -3080,6 +3080,21 @@ public final class SurfaceControl implements Parcelable {
}
/**
+ * Changes the default ApplyToken.
+ *
+ * ApplyToken is used to determine the order in which Transactions are applied.
+ * Transactions applied with the same ApplyToken will be applied in the order
+ * they were queued in SurfaceFlinger. Transactions are sent via binder so the
+ * caller should be aware of the order in which binder calls are executed in
+ * SurfaceFlinger. This along with the ApplyToken will determine the order
+ * in which Transactions are applied. Transactions with different apply tokens
+ * will be applied in arbitrary order regardless of when they were queued in
+ * SurfaceFlinger.
+ *
+ * Caller must keep track of the previous ApplyToken if they want to restore it.
+ *
+ * Note each buffer producer should have its own ApplyToken in order to ensure
+ * that Transactions are not delayed by Transactions from other buffer producers.
*
* @hide
*/
@@ -3088,6 +3103,7 @@ public final class SurfaceControl implements Parcelable {
}
/**
+ * Returns the default ApplyToken.
*
* @hide
*/
@@ -3096,8 +3112,10 @@ public final class SurfaceControl implements Parcelable {
}
/**
- * Apply the transaction, clearing it's state, and making it usable
+ * Apply the transaction, clearing its state, and making it usable
* as a new transaction.
+ *
+ * This method will also increment the transaction ID for debugging purposes.
*/
public void apply() {
apply(/*sync*/ false);
@@ -3116,7 +3134,7 @@ public final class SurfaceControl implements Parcelable {
/**
- * Clear the transaction object, without applying it.
+ * Clear the transaction object, without applying it. The transction ID is preserved.
*
* @hide
*/
@@ -3375,6 +3393,9 @@ public final class SurfaceControl implements Parcelable {
* If two siblings share the same Z order the ordering is undefined. Surfaces
* with a negative Z will be placed below the parent surface.
*
+ * Calling setLayer after setRelativeLayer will reset the relative layer
+ * in the same transaction.
+ *
* @param sc The SurfaceControl to set the Z order on
* @param z The Z-order
* @return This Transaction.
@@ -3392,6 +3413,22 @@ public final class SurfaceControl implements Parcelable {
}
/**
+ * Set the Z-order for a given SurfaceControl, relative to the specified SurfaceControl.
+ * The SurfaceControl with a negative z will be placed below the relativeTo
+ * SurfaceControl and the SurfaceControl with a positive z will be placed above the
+ * relativeTo SurfaceControl.
+ *
+ * Calling setLayer will reset the relative layer. Calling setRelativeLayer after setLayer
+ * will override the setLayer call.
+ *
+ * If a layer is set to be relative to a layer that is destroyed, the layer will be
+ * offscreen until setLayer is called or setRelativeLayer is called with a valid
+ * SurfaceControl.
+ *
+ * @param sc The SurfaceControl to set the Z order on
+ * @param relativeTo The SurfaceControl to set the Z order relative to
+ * @param z The Z-order
+ * @return This Transaction.
* @hide
*/
public Transaction setRelativeLayer(SurfaceControl sc, SurfaceControl relativeTo, int z) {
@@ -3405,6 +3442,9 @@ public final class SurfaceControl implements Parcelable {
}
/**
+ * The hint from the buffer producer as to what portion of the layer is
+ * transparent.
+ *
* @hide
*/
public Transaction setTransparentRegionHint(SurfaceControl sc, Region transparentRegion) {
@@ -3438,6 +3478,10 @@ public final class SurfaceControl implements Parcelable {
}
/**
+ * Sets the input channel for a given SurfaceControl. The position and order of the
+ * SurfaceControl in conjunction with the touchable region in the InputWindowHandle
+ * determines the hit region.
+ *
* @hide
*/
public Transaction setInputWindowInfo(SurfaceControl sc, InputWindowHandle handle) {
@@ -3549,6 +3593,8 @@ public final class SurfaceControl implements Parcelable {
* surface. If no crop is specified and the surface has no buffer, the surface bounds is
* only constrained by the size of its parent bounds.
*
+ * To unset the crop, pass in an invalid Rect (0, 0, -1, -1)
+ *
* @param sc SurfaceControl to set crop of.
* @param crop Bounds of the crop to apply.
* @hide
@@ -3578,6 +3624,8 @@ public final class SurfaceControl implements Parcelable {
* surface. If no crop is specified and the surface has no buffer, the surface bounds is
* only constrained by the size of its parent bounds.
*
+ * To unset the crop, pass in an invalid Rect (0, 0, -1, -1)
+ *
* @param sc SurfaceControl to set crop of.
* @param crop Bounds of the crop to apply.
* @return this This transaction for chaining
@@ -3625,6 +3673,8 @@ public final class SurfaceControl implements Parcelable {
* surface. If no crop is specified and the surface has no buffer, the surface bounds is
* only constrained by the size of its parent bounds.
*
+ * To unset the crop, pass in an invalid Rect (0, 0, -1, -1)
+ *
* @param sc SurfaceControl to set crop of.
* @param crop Bounds of the crop to apply.
* @return this This transaction for chaining
@@ -3643,7 +3693,12 @@ public final class SurfaceControl implements Parcelable {
}
/**
- * Sets the corner radius of a {@link SurfaceControl}.
+ * Sets the corner radius of a {@link SurfaceControl}. This corner radius is applied to the
+ * SurfaceControl and its children. The API expects a crop to be set on the SurfaceControl
+ * to ensure that the corner radius is applied to the correct region. If the crop does not
+ * intersect with the SurfaceControl's visible content, the corner radius will not be
+ * applied.
+ *
* @param sc SurfaceControl
* @param cornerRadius Corner radius in pixels.
* @return Itself.
@@ -3753,6 +3808,9 @@ public final class SurfaceControl implements Parcelable {
}
/**
+ * Associates a layer with a display. The layer will be drawn on the display with the
+ * specified layer stack. If the layer is not a root layer, this call has no effect.
+ *
* @hide
*/
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.O)
@@ -3791,6 +3849,7 @@ public final class SurfaceControl implements Parcelable {
/**
* Fills the surface with the specified color.
+ *
* @param color A float array with three values to represent r, g, b in range [0..1]. An
* invalid color will remove the color fill.
* @hide
@@ -3809,8 +3868,9 @@ public final class SurfaceControl implements Parcelable {
/**
* Removes color fill.
- * @hide
- */
+ *
+ * @hide
+ */
public Transaction unsetColor(SurfaceControl sc) {
checkPreconditions(sc);
if (SurfaceControlRegistry.sCallStackDebuggingEnabled) {
@@ -3898,6 +3958,8 @@ public final class SurfaceControl implements Parcelable {
}
/**
+ * Sets the surface to render contents of the display to.
+ *
* @hide
*/
public Transaction setDisplaySurface(IBinder displayToken, Surface surface) {
@@ -3916,6 +3978,9 @@ public final class SurfaceControl implements Parcelable {
}
/**
+ * Sets the layer stack of the display.
+ *
+ * All layers with the same layer stack will be drawn on this display.
* @hide
*/
public Transaction setDisplayLayerStack(IBinder displayToken, int layerStack) {
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index dd32947c69e4..b98f4db5dce6 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -16,6 +16,7 @@
package android.view;
+import static android.view.flags.Flags.FLAG_DEPRECATE_SURFACE_VIEW_Z_ORDER_APIS;
import static android.view.flags.Flags.FLAG_SURFACE_VIEW_GET_SURFACE_PACKAGE;
import static android.view.flags.Flags.FLAG_SURFACE_VIEW_SET_COMPOSITION_ORDER;
import static android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
@@ -812,7 +813,12 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
* window is attached to the window manager.
*
* <p>Calling this overrides any previous call to {@link #setZOrderOnTop}.
+ *
+ * @deprecated Use {@link #setCompositionOrder(int)} instead. It provides more
+ * control over the Z ordering behavior.
*/
+ @Deprecated
+ @FlaggedApi(FLAG_DEPRECATE_SURFACE_VIEW_Z_ORDER_APIS)
public void setZOrderMediaOverlay(boolean isMediaOverlay) {
mRequestedSubLayer = isMediaOverlay
? APPLICATION_MEDIA_OVERLAY_SUBLAYER : APPLICATION_MEDIA_SUBLAYER;
@@ -834,7 +840,12 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
* <p>Calling this overrides any previous call to {@link #setZOrderMediaOverlay}.
*
* @param onTop Whether to show the surface on top of this view's window.
+ *
+ * @deprecated Use {@link #setCompositionOrder(int)} instead. It provides more
+ * control over the Z ordering behavior.
*/
+ @Deprecated
+ @FlaggedApi(FLAG_DEPRECATE_SURFACE_VIEW_Z_ORDER_APIS)
public void setZOrderOnTop(boolean onTop) {
// In R and above we allow dynamic layer changes.
final boolean allowDynamicChange = getContext().getApplicationInfo().targetSdkVersion
@@ -866,7 +877,11 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
* @return Whether the Z ordering changed.
*
* @hide
+ *
+ * @deprecated Use {@link #setCompositionOrder(int)} instead. It provides more control
+ * over the Z ordering behavior.
*/
+ @Deprecated
public boolean setZOrderedOnTop(boolean onTop, boolean allowDynamicChange) {
final int subLayer;
if (onTop) {
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 93eed370004b..24647f459ab5 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -1199,6 +1199,43 @@ public interface WindowManager extends ViewManager {
"android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE";
/**
+ * Application-level [PackageManager][android.content.pm.PackageManager.Property] tag that (when
+ * set to false) informs the system the app has opted out of the camera compatibility treatment
+ * for fixed-orientation apps, which simulates running on a portrait device, in the orientation
+ * requested by the app.
+ *
+ * <p>This treatment aims to mitigate camera issues on large screens, like stretched or sideways
+ * previews. It simulates running on a portrait device by:
+ * <ul>
+ * <li>Letterboxing the app window,
+ * <li>Cropping the camera buffer to match the app's requested orientation,
+ * <li>Setting the camera sensor orientation to portrait.
+ * <li>Setting the display rotation to match the app's requested orientation, given portrait
+ * natural orientation,
+ * <li>Refreshes the activity to trigger new camera setup, with sandboxed values.
+ * </ul>
+ *
+ * <p>To opt out of the camera compatibility treatment, add this property to your app manifest
+ * and set the value to {@code false}.
+ *
+ * <p>Not setting this property at all, or setting this property to {@code true} has no effect.
+ *
+ * <p><b>Syntax:</b>
+ * <pre>
+ * &lt;application&gt;
+ * &lt;property
+ * android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION"
+ * android:value="true|false"/&gt;
+ * &lt;/application&gt;
+ * </pre>
+ *
+ * @hide
+ */
+ //TODO(b/394590412): Make this property public.
+ String PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION =
+ "android.window.PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION";
+
+ /**
* Application level {@link android.content.pm.PackageManager.Property PackageManager.Property}
* for an app to inform the system that the app should be excluded from the compatibility
* override for orientation set by the device manufacturer. When the orientation override is
diff --git a/core/java/android/view/flags/view_flags.aconfig b/core/java/android/view/flags/view_flags.aconfig
index f6fdec94c332..d06f885638b6 100644
--- a/core/java/android/view/flags/view_flags.aconfig
+++ b/core/java/android/view/flags/view_flags.aconfig
@@ -129,6 +129,14 @@ flag {
}
flag {
+ name: "deprecate_surface_view_z_order_apis"
+ namespace: "window_surfaces"
+ description: "Deprecate SurfaceView z order control APIs."
+ bug: "341021569"
+ is_fixed_read_only: true
+}
+
+flag {
name: "use_refactored_round_scrollbar"
namespace: "wear_frameworks"
description: "Use refactored round scrollbar."
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index 421001f385d4..0b34600f4104 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -532,6 +532,7 @@ public final class InputMethodManager {
final H mH;
// Our generic input connection if the current target does not have its own.
+ @NonNull
private final RemoteInputConnectionImpl mFallbackInputConnection;
private final int mDisplayId;
diff --git a/core/java/android/view/textclassifier/intent/OWNERS b/core/java/android/view/textclassifier/intent/OWNERS
index 3465fe62784f..dc18514ce949 100644
--- a/core/java/android/view/textclassifier/intent/OWNERS
+++ b/core/java/android/view/textclassifier/intent/OWNERS
@@ -1,6 +1,5 @@
# Bug component: 709498
-mns@google.com
toki@google.com
svetoslavganov@android.com
svetoslavganov@google.com
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 0a5c14e3a08b..222a7b38c966 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -9216,6 +9216,7 @@ public class RemoteViews implements Parcelable, Filter {
public static RemoteResponse fromFillInIntent(@NonNull Intent fillIntent) {
RemoteResponse response = new RemoteResponse();
response.mFillIntent = fillIntent;
+ fillIntent.collectExtraIntentKeys();
return response;
}
@@ -9224,6 +9225,7 @@ public class RemoteViews implements Parcelable, Filter {
RemoteResponse response = new RemoteResponse();
response.mPendingIntent = pendingIntent;
response.mFillIntent = intent;
+ intent.collectExtraIntentKeys();
return response;
}
diff --git a/core/java/android/window/DesktopModeFlags.java b/core/java/android/window/DesktopModeFlags.java
index 4ba97384192f..4aeedbb72903 100644
--- a/core/java/android/window/DesktopModeFlags.java
+++ b/core/java/android/window/DesktopModeFlags.java
@@ -102,9 +102,14 @@ public enum DesktopModeFlags {
ENABLE_HOLD_TO_DRAG_APP_HANDLE(Flags::enableHoldToDragAppHandle, true),
ENABLE_MINIMIZE_BUTTON(Flags::enableMinimizeButton, true),
ENABLE_MODALS_FULLSCREEN_WITH_PERMISSIONS(Flags::enableModalsFullscreenWithPermission, false),
+ ENABLE_OPAQUE_BACKGROUND_FOR_TRANSPARENT_WINDOWS(
+ Flags::enableOpaqueBackgroundForTransparentWindows, false),
+ ENABLE_QUICKSWITCH_DESKTOP_SPLIT_BUGFIX(Flags::enableQuickswitchDesktopSplitBugfix, true),
ENABLE_RESIZING_METRICS(Flags::enableResizingMetrics, true),
ENABLE_RESTORE_TO_PREVIOUS_SIZE_FROM_DESKTOP_IMMERSIVE(
Flags::enableRestoreToPreviousSizeFromDesktopImmersive, true),
+ ENABLE_START_LAUNCH_TRANSITION_FROM_TASKBAR_BUGFIX(
+ Flags::enableStartLaunchTransitionFromTaskbarBugfix, true),
ENABLE_TASKBAR_OVERFLOW(Flags::enableTaskbarOverflow, false),
ENABLE_TASK_RESIZING_KEYBOARD_SHORTCUTS(Flags::enableTaskResizingKeyboardShortcuts, true),
ENABLE_TASK_STACK_OBSERVER_IN_SHELL(Flags::enableTaskStackObserverInShell, true),
@@ -118,6 +123,8 @@ public enum DesktopModeFlags {
ENABLE_WINDOWING_TRANSITION_HANDLERS_OBSERVERS(
Flags::enableWindowingTransitionHandlersObservers, false),
EXCLUDE_CAPTION_FROM_APP_BOUNDS(Flags::excludeCaptionFromAppBounds, false),
+ IGNORE_ASPECT_RATIO_RESTRICTIONS_FOR_RESIZEABLE_FREEFORM_ACTIVITIES(
+ Flags::ignoreAspectRatioRestrictionsForResizeableFreeformActivities, true),
INCLUDE_TOP_TRANSPARENT_FULLSCREEN_TASK_IN_DESKTOP_HEURISTIC(
Flags::includeTopTransparentFullscreenTaskInDesktopHeuristic, true)
// go/keep-sorted end
diff --git a/core/java/android/window/TransitionFilter.java b/core/java/android/window/TransitionFilter.java
index 61fc6226f822..d8d20119a602 100644
--- a/core/java/android/window/TransitionFilter.java
+++ b/core/java/android/window/TransitionFilter.java
@@ -31,8 +31,6 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.view.WindowManager;
-import com.android.window.flags.Flags;
-
/**
* A parcelable filter that can be used for rerouting transitions to a remote. This is a local
* representation so that the transition system doesn't need to make blocking queries over
@@ -261,9 +259,7 @@ public final class TransitionFilter implements Parcelable {
// only applies to activity/task
&& (change.getTaskInfo() != null
|| change.getActivityComponent() != null)) {
- final TransitionInfo.AnimationOptions opts =
- Flags.moveAnimationOptionsToChange() ? change.getAnimationOptions()
- : info.getAnimationOptions();
+ final TransitionInfo.AnimationOptions opts = change.getAnimationOptions();
if (opts != null) {
boolean canActuallyOverride = change.getTaskInfo() == null
|| opts.getOverrideTaskTransition();
diff --git a/core/java/android/window/TransitionInfo.java b/core/java/android/window/TransitionInfo.java
index 4f34aa36a204..32175f122d61 100644
--- a/core/java/android/window/TransitionInfo.java
+++ b/core/java/android/window/TransitionInfo.java
@@ -57,8 +57,6 @@ import android.view.Surface;
import android.view.SurfaceControl;
import android.view.WindowManager;
-import com.android.window.flags.Flags;
-
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
@@ -220,10 +218,6 @@ public final class TransitionInfo implements Parcelable {
private final ArrayList<Change> mChanges = new ArrayList<>();
private final ArrayList<Root> mRoots = new ArrayList<>();
- // TODO(b/327332488): Clean-up usages after the flag is fully enabled.
- @Deprecated
- private AnimationOptions mOptions;
-
/** This is only a BEST-EFFORT id used for log correlation. DO NOT USE for any real work! */
private int mDebugId = -1;
@@ -238,7 +232,6 @@ public final class TransitionInfo implements Parcelable {
mFlags = in.readInt();
in.readTypedList(mChanges, Change.CREATOR);
in.readTypedList(mRoots, Root.CREATOR);
- mOptions = in.readTypedObject(AnimationOptions.CREATOR);
mDebugId = in.readInt();
mTrack = in.readInt();
}
@@ -250,7 +243,6 @@ public final class TransitionInfo implements Parcelable {
dest.writeInt(mFlags);
dest.writeTypedList(mChanges);
dest.writeTypedList(mRoots, flags);
- dest.writeTypedObject(mOptions, flags);
dest.writeInt(mDebugId);
dest.writeInt(mTrack);
}
@@ -286,18 +278,6 @@ public final class TransitionInfo implements Parcelable {
mRoots.add(other);
}
- /**
- * @deprecated Set {@link AnimationOptions} to change. This method is only used if
- * {@link Flags#FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE} is disabled.
- */
- @Deprecated
- public void setAnimationOptions(@Nullable AnimationOptions options) {
- if (Flags.moveAnimationOptionsToChange()) {
- return;
- }
- mOptions = options;
- }
-
public @TransitionType int getType() {
return mType;
}
@@ -360,16 +340,6 @@ public final class TransitionInfo implements Parcelable {
}
/**
- * @deprecated Use {@link Change#getAnimationOptions()} instead. This method is called only
- * if {@link Flags#FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE} is disabled.
- */
- @Deprecated
- @Nullable
- public AnimationOptions getAnimationOptions() {
- return mOptions;
- }
-
- /**
* @return the list of {@link Change}s in this transition. The list is sorted top-to-bottom
* in Z (meaning index 0 is the top-most container).
*/
@@ -455,9 +425,6 @@ public final class TransitionInfo implements Parcelable {
StringBuilder sb = new StringBuilder();
sb.append("{id=").append(mDebugId).append(" t=").append(transitTypeToString(mType))
.append(" f=0x").append(Integer.toHexString(mFlags)).append(" trk=").append(mTrack);
- if (mOptions != null) {
- sb.append(" opt=").append(mOptions);
- }
sb.append(" r=[");
for (int i = 0; i < mRoots.size(); ++i) {
if (i > 0) {
@@ -656,8 +623,6 @@ public final class TransitionInfo implements Parcelable {
for (int i = 0; i < mRoots.size(); ++i) {
out.mRoots.add(mRoots.get(i).localRemoteCopy());
}
- // Doesn't have any native stuff, so no need for actual copy
- out.mOptions = mOptions;
return out;
}
@@ -860,9 +825,6 @@ public final class TransitionInfo implements Parcelable {
* Sets {@link AnimationOptions} to override animation.
*/
public void setAnimationOptions(@Nullable AnimationOptions options) {
- if (!Flags.moveAnimationOptionsToChange()) {
- return;
- }
mAnimationOptions = options;
}
diff --git a/core/java/android/window/flags/lse_desktop_experience.aconfig b/core/java/android/window/flags/lse_desktop_experience.aconfig
index 8265d2523d6f..2e36e9a205bf 100644
--- a/core/java/android/window/flags/lse_desktop_experience.aconfig
+++ b/core/java/android/window/flags/lse_desktop_experience.aconfig
@@ -206,6 +206,13 @@ flag {
}
flag {
+ name: "enable_camera_compat_for_desktop_windowing_opt_out_api"
+ namespace: "lse_desktop_experience"
+ description: "Introduces a developer API to opt-out of Camera Compat treatment for fixed-orientation apps in desktop windowing mode"
+ bug: "397165621"
+}
+
+flag {
name: "enable_task_stack_observer_in_shell"
namespace: "lse_desktop_experience"
description: "Introduces a new observer in shell to track the task stack."
@@ -681,6 +688,16 @@ flag {
}
flag {
+ name: "enable_opaque_background_for_transparent_windows"
+ namespace: "lse_desktop_experience"
+ description: "Whether an opaque background should be forcefully set for windows with only transparent background."
+ bug: "397219542"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "enable_desktop_mode_through_dev_option"
namespace: "lse_desktop_experience"
description: "Enables support for desktop mode through developer options for devices eligible for desktop mode."
@@ -778,3 +795,20 @@ flag {
description: "Show recent apps in the taskbar overflow."
bug: "368119679"
}
+
+flag {
+ name: "enable_projected_display_desktop_mode"
+ namespace: "lse_desktop_experience"
+ description: "Enable Desktop Mode on Projected Mode devices but constrained to the external display."
+ bug: "384568161"
+}
+
+flag {
+ name: "enable_persisting_density_scale_for_connected_displays"
+ namespace: "lse_desktop_experience"
+ description: "Enables persisting density scale on resolution change for connected displays."
+ bug: "392855657"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+} \ No newline at end of file
diff --git a/core/java/android/window/flags/windowing_sdk.aconfig b/core/java/android/window/flags/windowing_sdk.aconfig
index 54d0eeffc9bb..6e45d3dc659f 100644
--- a/core/java/android/window/flags/windowing_sdk.aconfig
+++ b/core/java/android/window/flags/windowing_sdk.aconfig
@@ -62,16 +62,6 @@ flag {
flag {
namespace: "windowing_sdk"
- name: "move_animation_options_to_change"
- description: "Move AnimationOptions from TransitionInfo to each Change"
- bug: "327332488"
- metadata {
- purpose: PURPOSE_BUGFIX
- }
-}
-
-flag {
- namespace: "windowing_sdk"
name: "rear_display_disable_force_desktop_system_decorations"
description: "Block system decorations from being added to a rear display when desktop mode is forced"
bug: "346103150"
diff --git a/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java b/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java
index a27eeb8fdd63..1281a78d4fa2 100644
--- a/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java
+++ b/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java
@@ -97,6 +97,8 @@ public class AccessibilityShortcutController {
new ComponentName("com.android.server.accessibility", "ReduceBrightColors");
public static final ComponentName FONT_SIZE_COMPONENT_NAME =
new ComponentName("com.android.server.accessibility", "FontSize");
+ public static final ComponentName AUTOCLICK_COMPONENT_NAME =
+ new ComponentName("com.android.server.accessibility", "Autoclick");
// The component name for the sub setting of Accessibility button in Accessibility settings
public static final ComponentName ACCESSIBILITY_BUTTON_COMPONENT_NAME =
@@ -163,7 +165,7 @@ public class AccessibilityShortcutController {
getFrameworkShortcutFeaturesMap() {
if (sFrameworkShortcutFeaturesMap == null) {
- Map<ComponentName, FrameworkFeatureInfo> featuresMap = new ArrayMap<>(4);
+ Map<ComponentName, FrameworkFeatureInfo> featuresMap = new ArrayMap<>(8);
featuresMap.put(COLOR_INVERSION_COMPONENT_NAME,
new ToggleableFrameworkFeatureInfo(
Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED,
@@ -174,6 +176,11 @@ public class AccessibilityShortcutController {
Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
"1" /* Value to enable */, "0" /* Value to disable */,
R.string.color_correction_feature_name));
+ featuresMap.put(AUTOCLICK_COMPONENT_NAME,
+ new ToggleableFrameworkFeatureInfo(
+ Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED,
+ "1" /* Value to enable */, "0" /* Value to disable */,
+ R.string.autoclick_feature_name));
if (SUPPORT_ONE_HANDED_MODE) {
featuresMap.put(ONE_HANDED_COMPONENT_NAME,
new ToggleableFrameworkFeatureInfo(
diff --git a/core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java b/core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java
index b187eb42366f..6498c53a63e2 100644
--- a/core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java
+++ b/core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java
@@ -17,6 +17,7 @@
package com.android.internal.accessibility.dialog;
import static com.android.internal.accessibility.AccessibilityShortcutController.ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME;
+import static com.android.internal.accessibility.AccessibilityShortcutController.AUTOCLICK_COMPONENT_NAME;
import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_COMPONENT_NAME;
import static com.android.internal.accessibility.AccessibilityShortcutController.DALTONIZER_COMPONENT_NAME;
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME;
@@ -214,6 +215,19 @@ public final class AccessibilityTargetHelper {
Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
targets.add(colorInversion);
+ // TODO(b/394683600): Update Icon with the autoclick asset.
+ final ToggleAllowListingFeatureTarget autoclick =
+ new ToggleAllowListingFeatureTarget(context,
+ shortcutType,
+ isShortcutContained(context, shortcutType,
+ AUTOCLICK_COMPONENT_NAME.flattenToString()),
+ AUTOCLICK_COMPONENT_NAME.flattenToString(),
+ uid,
+ context.getString(R.string.autoclick_feature_name),
+ context.getDrawable(R.drawable.ic_accessibility_generic),
+ Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED);
+ targets.add(autoclick);
+
if (SUPPORT_ONE_HANDED_MODE) {
final ToggleAllowListingFeatureTarget oneHandedMode =
new ToggleAllowListingFeatureTarget(context,
diff --git a/core/java/com/android/internal/app/MediaRouteControllerContentManager.java b/core/java/com/android/internal/app/MediaRouteControllerContentManager.java
index dc4caa3d35d7..3a8b94f222ba 100644
--- a/core/java/com/android/internal/app/MediaRouteControllerContentManager.java
+++ b/core/java/com/android/internal/app/MediaRouteControllerContentManager.java
@@ -17,7 +17,12 @@
package com.android.internal.app;
import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.AnimationDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.StateListDrawable;
import android.media.MediaRouter;
+import android.util.TypedValue;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.SeekBar;
@@ -35,9 +40,14 @@ public class MediaRouteControllerContentManager {
*/
public interface Delegate {
/**
- * Updates the title of the cast device
+ * Updates the title of the media route device
*/
- void setCastDeviceTitle(CharSequence title);
+ void setMediaRouteDeviceTitle(CharSequence title);
+
+ /**
+ * Updates the icon of the media route device
+ */
+ void setMediaRouteDeviceIcon(Drawable icon);
/**
* Dismiss the UI to transition to a different workflow.
@@ -45,6 +55,7 @@ public class MediaRouteControllerContentManager {
void dismissView();
}
+ private final Context mContext;
private final Delegate mDelegate;
// Time to wait before updating the volume when the user lets go of the seek bar
@@ -53,15 +64,25 @@ public class MediaRouteControllerContentManager {
private static final int VOLUME_UPDATE_DELAY_MILLIS = 250;
private final MediaRouter mRouter;
+ private final MediaRouteControllerContentManager.MediaRouterCallback mCallback;
private final MediaRouter.RouteInfo mRoute;
+ private Drawable mMediaRouteButtonDrawable;
+ private final int[] mMediaRouteConnectingState = { R.attr.state_checked, R.attr.state_enabled };
+ private final int[] mMediaRouteOnState = { R.attr.state_activated, R.attr.state_enabled };
+ private Drawable mCurrentIconDrawable;
+
+ private boolean mAttachedToWindow;
+
private LinearLayout mVolumeLayout;
private SeekBar mVolumeSlider;
private boolean mVolumeSliderTouched;
public MediaRouteControllerContentManager(Context context, Delegate delegate) {
+ mContext = context;
mDelegate = delegate;
mRouter = context.getSystemService(MediaRouter.class);
+ mCallback = new MediaRouteControllerContentManager.MediaRouterCallback();
mRoute = mRouter.getSelectedRoute();
}
@@ -70,7 +91,7 @@ public class MediaRouteControllerContentManager {
* given container view.
*/
public void bindViews(View containerView) {
- mDelegate.setCastDeviceTitle(mRoute.getName());
+ mDelegate.setMediaRouteDeviceTitle(mRoute.getName());
mVolumeLayout = containerView.findViewById(R.id.media_route_volume_layout);
mVolumeSlider = containerView.findViewById(R.id.media_route_volume_slider);
mVolumeSlider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@@ -108,20 +129,58 @@ public class MediaRouteControllerContentManager {
}
}
});
+
+ mMediaRouteButtonDrawable = obtainMediaRouteButtonDrawable();
+ }
+
+ /**
+ * Called when this UI is attached to a window..
+ */
+ public void onAttachedToWindow() {
+ mAttachedToWindow = true;
+ mRouter.addCallback(0, mCallback, MediaRouter.CALLBACK_FLAG_UNFILTERED_EVENTS);
+ update();
+ }
+
+ /**
+ * Called when this UI is detached from a window..
+ */
+ public void onDetachedFromWindow() {
+ mRouter.removeCallback(mCallback);
+ mAttachedToWindow = false;
}
/**
* Updates all the views to reflect new states.
*/
public void update() {
- mDelegate.setCastDeviceTitle(mRoute.getName());
+ if (!mRoute.isSelected() || mRoute.isDefault()) {
+ mDelegate.dismissView();
+ }
+
+ mDelegate.setMediaRouteDeviceTitle(mRoute.getName());
updateVolume();
+
+ Drawable icon = getIconDrawable();
+ if (icon != mCurrentIconDrawable) {
+ mCurrentIconDrawable = icon;
+ if (icon instanceof AnimationDrawable animDrawable) {
+ if (!mAttachedToWindow && !mRoute.isConnecting()) {
+ // When the route is already connected before the view is attached, show the
+ // last frame of the connected animation immediately.
+ if (animDrawable.isRunning()) {
+ animDrawable.stop();
+ }
+ icon = animDrawable.getFrame(animDrawable.getNumberOfFrames() - 1);
+ } else if (!animDrawable.isRunning()) {
+ animDrawable.start();
+ }
+ }
+ mDelegate.setMediaRouteDeviceIcon(icon);
+ }
}
- /**
- * Updates the volume layout and slider.
- */
- public void updateVolume() {
+ private void updateVolume() {
if (!mVolumeSliderTouched) {
if (isVolumeControlAvailable()) {
mVolumeLayout.setVisibility(View.VISIBLE);
@@ -150,4 +209,61 @@ public class MediaRouteControllerContentManager {
private boolean isVolumeControlAvailable() {
return mRoute.getVolumeHandling() == MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE;
}
+
+ private Drawable obtainMediaRouteButtonDrawable() {
+ TypedValue value = new TypedValue();
+ if (!mContext.getTheme().resolveAttribute(R.attr.mediaRouteButtonStyle, value, true)) {
+ return null;
+ }
+ int[] drawableAttrs = new int[] { R.attr.externalRouteEnabledDrawable };
+ TypedArray a = mContext.obtainStyledAttributes(value.data, drawableAttrs);
+ Drawable drawable = a.getDrawable(0);
+ a.recycle();
+ return drawable;
+ }
+
+ private Drawable getIconDrawable() {
+ if (!(mMediaRouteButtonDrawable instanceof StateListDrawable)) {
+ return mMediaRouteButtonDrawable;
+ } else if (mRoute.isConnecting()) {
+ StateListDrawable stateListDrawable = (StateListDrawable) mMediaRouteButtonDrawable;
+ stateListDrawable.setState(mMediaRouteConnectingState);
+ return stateListDrawable.getCurrent();
+ } else {
+ StateListDrawable stateListDrawable = (StateListDrawable) mMediaRouteButtonDrawable;
+ stateListDrawable.setState(mMediaRouteOnState);
+ return stateListDrawable.getCurrent();
+ }
+ }
+
+ private final class MediaRouterCallback extends MediaRouter.SimpleCallback {
+ @Override
+ public void onRouteUnselected(MediaRouter router, int type, MediaRouter.RouteInfo info) {
+ update();
+ }
+
+ @Override
+ public void onRouteChanged(MediaRouter router, MediaRouter.RouteInfo route) {
+ update();
+ }
+
+ @Override
+ public void onRouteVolumeChanged(MediaRouter router, MediaRouter.RouteInfo route) {
+ if (route == mRoute) {
+ updateVolume();
+ }
+ }
+
+ @Override
+ public void onRouteGrouped(MediaRouter router, MediaRouter.RouteInfo info,
+ MediaRouter.RouteGroup group, int index) {
+ update();
+ }
+
+ @Override
+ public void onRouteUngrouped(MediaRouter router, MediaRouter.RouteInfo info,
+ MediaRouter.RouteGroup group) {
+ update();
+ }
+ }
}
diff --git a/core/java/com/android/internal/app/MediaRouteControllerDialog.java b/core/java/com/android/internal/app/MediaRouteControllerDialog.java
index 45a4a13667a4..5899963f4550 100644
--- a/core/java/com/android/internal/app/MediaRouteControllerDialog.java
+++ b/core/java/com/android/internal/app/MediaRouteControllerDialog.java
@@ -21,15 +21,9 @@ import android.app.MediaRouteActionProvider;
import android.app.MediaRouteButton;
import android.content.Context;
import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
-import android.graphics.drawable.StateListDrawable;
import android.media.MediaRouter;
-import android.media.MediaRouter.RouteGroup;
-import android.media.MediaRouter.RouteInfo;
import android.os.Bundle;
-import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.View;
@@ -48,19 +42,11 @@ import com.android.internal.R;
*/
public class MediaRouteControllerDialog extends AlertDialog implements
MediaRouteControllerContentManager.Delegate {
- // TODO(b/360050020): Eventually these 3 variables should be in the content manager instead of
+ // TODO(b/360050020): Eventually these 2 variables should be in the content manager instead of
// here. So these should be removed when the migration is completed.
private final MediaRouter mRouter;
- private final MediaRouterCallback mCallback;
private final MediaRouter.RouteInfo mRoute;
- private Drawable mMediaRouteButtonDrawable;
- private int[] mMediaRouteConnectingState = { R.attr.state_checked, R.attr.state_enabled };
- private int[] mMediaRouteOnState = { R.attr.state_activated, R.attr.state_enabled };
- private Drawable mCurrentIconDrawable;
-
- private boolean mAttachedToWindow;
-
private final MediaRouteControllerContentManager mContentManager;
public MediaRouteControllerDialog(Context context, int theme) {
@@ -68,7 +54,6 @@ public class MediaRouteControllerDialog extends AlertDialog implements
mContentManager = new MediaRouteControllerContentManager(context, this);
mRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE);
- mCallback = new MediaRouterCallback();
mRoute = mRouter.getSelectedRoute();
}
@@ -87,24 +72,18 @@ public class MediaRouteControllerDialog extends AlertDialog implements
customPanelView.setMinimumHeight(0);
}
- mMediaRouteButtonDrawable = obtainMediaRouteButtonDrawable();
- update();
+ mContentManager.update();
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
- mAttachedToWindow = true;
-
- mRouter.addCallback(0, mCallback, MediaRouter.CALLBACK_FLAG_UNFILTERED_EVENTS);
- update();
+ mContentManager.onAttachedToWindow();
}
@Override
public void onDetachedFromWindow() {
- mRouter.removeCallback(mCallback);
- mAttachedToWindow = false;
-
+ mContentManager.onDetachedFromWindow();
super.onDetachedFromWindow();
}
@@ -128,95 +107,17 @@ public class MediaRouteControllerDialog extends AlertDialog implements
}
@Override
- public void setCastDeviceTitle(CharSequence title) {
+ public void setMediaRouteDeviceTitle(CharSequence title) {
setTitle(title);
}
@Override
- public void dismissView() {
- dismiss();
- }
-
- private void update() {
- if (!mRoute.isSelected() || mRoute.isDefault()) {
- dismissView();
- }
-
- mContentManager.update();
-
- Drawable icon = getIconDrawable();
- if (icon != mCurrentIconDrawable) {
- mCurrentIconDrawable = icon;
- if (icon instanceof AnimationDrawable animDrawable) {
- if (!mAttachedToWindow && !mRoute.isConnecting()) {
- // When the route is already connected before the view is attached, show the
- // last frame of the connected animation immediately.
- if (animDrawable.isRunning()) {
- animDrawable.stop();
- }
- icon = animDrawable.getFrame(animDrawable.getNumberOfFrames() - 1);
- } else if (!animDrawable.isRunning()) {
- animDrawable.start();
- }
- }
- setIcon(icon);
- }
- }
-
- private Drawable obtainMediaRouteButtonDrawable() {
- Context context = getContext();
- TypedValue value = new TypedValue();
- if (!context.getTheme().resolveAttribute(R.attr.mediaRouteButtonStyle, value, true)) {
- return null;
- }
- int[] drawableAttrs = new int[] { R.attr.externalRouteEnabledDrawable };
- TypedArray a = context.obtainStyledAttributes(value.data, drawableAttrs);
- Drawable drawable = a.getDrawable(0);
- a.recycle();
- return drawable;
- }
-
- private Drawable getIconDrawable() {
- if (!(mMediaRouteButtonDrawable instanceof StateListDrawable)) {
- return mMediaRouteButtonDrawable;
- } else if (mRoute.isConnecting()) {
- StateListDrawable stateListDrawable = (StateListDrawable) mMediaRouteButtonDrawable;
- stateListDrawable.setState(mMediaRouteConnectingState);
- return stateListDrawable.getCurrent();
- } else {
- StateListDrawable stateListDrawable = (StateListDrawable) mMediaRouteButtonDrawable;
- stateListDrawable.setState(mMediaRouteOnState);
- return stateListDrawable.getCurrent();
- }
+ public void setMediaRouteDeviceIcon(Drawable icon) {
+ setIcon(icon);
}
- private final class MediaRouterCallback extends MediaRouter.SimpleCallback {
- @Override
- public void onRouteUnselected(MediaRouter router, int type, RouteInfo info) {
- update();
- }
-
- @Override
- public void onRouteChanged(MediaRouter router, MediaRouter.RouteInfo route) {
- update();
- }
-
- @Override
- public void onRouteVolumeChanged(MediaRouter router, MediaRouter.RouteInfo route) {
- if (route == mRoute) {
- mContentManager.updateVolume();
- }
- }
-
- @Override
- public void onRouteGrouped(MediaRouter router, RouteInfo info, RouteGroup group,
- int index) {
- update();
- }
-
- @Override
- public void onRouteUngrouped(MediaRouter router, RouteInfo info, RouteGroup group) {
- update();
- }
+ @Override
+ public void dismissView() {
+ dismiss();
}
}
diff --git a/core/java/com/android/internal/os/LongArrayMultiStateCounter.java b/core/java/com/android/internal/os/LongArrayMultiStateCounter.java
index fe616e085488..5e9c87a5154a 100644
--- a/core/java/com/android/internal/os/LongArrayMultiStateCounter.java
+++ b/core/java/com/android/internal/os/LongArrayMultiStateCounter.java
@@ -16,6 +16,7 @@
package com.android.internal.os;
+import android.annotation.CheckResult;
import android.annotation.Nullable;
import android.os.Parcel;
import android.os.Parcelable;
@@ -196,7 +197,8 @@ public final class LongArrayMultiStateCounter implements Parcelable {
/**
* Populates the array with the accumulated counts for the specified state.
*/
- public void getCounts(long[] counts, int state) {
+ @CheckResult
+ public boolean getCounts(long[] counts, int state) {
if (state < 0 || state >= mStateCount) {
throw new IllegalArgumentException(
"State: " + state + ", outside the range: [0-" + mStateCount + "]");
@@ -205,7 +207,7 @@ public final class LongArrayMultiStateCounter implements Parcelable {
throw new IllegalArgumentException(
"Invalid array length: " + counts.length + ", expected: " + mLength);
}
- native_getCounts(mNativeObject, counts, state);
+ return native_getCounts(mNativeObject, counts, state);
}
@Override
@@ -282,7 +284,8 @@ public final class LongArrayMultiStateCounter implements Parcelable {
@FastNative
@RavenwoodRedirect
- private static native void native_getCounts(long nativeObject, long[] counts, int state);
+ @CheckResult
+ private static native boolean native_getCounts(long nativeObject, long[] counts, int state);
@FastNative
@RavenwoodRedirect
diff --git a/core/java/com/android/internal/os/LongArrayMultiStateCounter_ravenwood.java b/core/java/com/android/internal/os/LongArrayMultiStateCounter_ravenwood.java
index 4f5f37d0640e..403e8c1be8fa 100644
--- a/core/java/com/android/internal/os/LongArrayMultiStateCounter_ravenwood.java
+++ b/core/java/com/android/internal/os/LongArrayMultiStateCounter_ravenwood.java
@@ -168,8 +168,20 @@ class LongArrayMultiStateCounter_ravenwood {
}
}
- public void getValues(long[] values, int state) {
- System.arraycopy(mStates[state].mCounter, 0, values, 0, mArrayLength);
+ public boolean getValues(long[] values, int state) {
+ long[] counts = mStates[state].mCounter;
+ boolean allZeros = true;
+ for (int i = 0; i < counts.length; i++) {
+ if (counts[i] != 0) {
+ allZeros = false;
+ break;
+ }
+ }
+ if (allZeros) {
+ return false;
+ }
+ System.arraycopy(counts, 0, values, 0, mArrayLength);
+ return true;
}
public void reset() {
@@ -316,8 +328,8 @@ class LongArrayMultiStateCounter_ravenwood {
getInstance(instanceId).addCounts(counts);
}
- public static void native_getCounts(long instanceId, long[] counts, int state) {
- getInstance(instanceId).getValues(counts, state);
+ public static boolean native_getCounts(long instanceId, long[] counts, int state) {
+ return getInstance(instanceId).getValues(counts, state);
}
public static void native_reset(long instanceId) {
diff --git a/core/jni/Android.bp b/core/jni/Android.bp
index 06702e2fa4bf..92a841f9c290 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -76,6 +76,9 @@ cc_library_shared_for_libandroid_runtime {
srcs: [
"android_animation_PropertyValuesHolder.cpp",
"android_content_res_ApkAssets.cpp",
+ "android_media_ImageReader.cpp",
+ "android_media_PublicFormatUtils.cpp",
+ "android_media_Utils.cpp",
"android_os_SystemClock.cpp",
"android_os_SystemProperties.cpp",
"android_text_AndroidCharacter.cpp",
@@ -134,10 +137,7 @@ cc_library_shared_for_libandroid_runtime {
"android_app_ActivityThread.cpp",
"android_app_NativeActivity.cpp",
"android_app_admin_SecurityLog.cpp",
- "android_media_ImageReader.cpp",
"android_media_ImageWriter.cpp",
- "android_media_PublicFormatUtils.cpp",
- "android_media_Utils.cpp",
"android_opengl_EGL14.cpp",
"android_opengl_EGL15.cpp",
"android_opengl_EGLExt.cpp",
@@ -489,6 +489,7 @@ cc_library_shared_for_libandroid_runtime {
"libsqlite",
"libgui_window_info_static",
"libbinder",
+ "libbinder_ndk",
"libhidlbase", // libhwbinder is in here
],
version_script: "platform/linux/libandroid_runtime_export.txt",
diff --git a/core/jni/android_graphics_BLASTBufferQueue.cpp b/core/jni/android_graphics_BLASTBufferQueue.cpp
index a52678359423..1a7490e61873 100644
--- a/core/jni/android_graphics_BLASTBufferQueue.cpp
+++ b/core/jni/android_graphics_BLASTBufferQueue.cpp
@@ -26,6 +26,7 @@
#include <nativehelper/JNIHelp.h>
#include <utils/Log.h>
#include <utils/RefBase.h>
+#include <utils/StrongPointer.h>
#include "core_jni_helpers.h"
@@ -124,7 +125,7 @@ private:
static jlong nativeCreate(JNIEnv* env, jclass clazz, jstring jName,
jboolean updateDestinationFrame) {
ScopedUtfChars name(env, jName);
- sp<BLASTBufferQueue> queue = new BLASTBufferQueue(name.c_str(), updateDestinationFrame);
+ sp<BLASTBufferQueue> queue = sp<BLASTBufferQueue>::make(name.c_str(), updateDestinationFrame);
queue->incStrong((void*)nativeCreate);
return reinterpret_cast<jlong>(queue.get());
}
diff --git a/core/jni/android_media_ImageReader.cpp b/core/jni/android_media_ImageReader.cpp
index 20b9c571317e..a34cb391c2fd 100644
--- a/core/jni/android_media_ImageReader.cpp
+++ b/core/jni/android_media_ImageReader.cpp
@@ -25,13 +25,22 @@
#include <android_runtime/android_view_Surface.h>
#include <com_android_graphics_libgui_flags.h>
#include <cutils/atomic.h>
+#ifdef __ANDROID__
#include <grallocusage/GrallocUsageConversion.h>
+#else
+#define GRALLOC_USAGE_PROTECTED 0
+#define GRALLOC_USAGE_SW_READ_OFTEN 0
+#define GRALLOC_USAGE_SW_WRITE_OFTEN 0
+#endif
#include <gui/BufferItemConsumer.h>
#include <gui/Surface.h>
#include <inttypes.h>
#include <jni.h>
+#include <jni_wrappers.h>
#include <nativehelper/JNIHelp.h>
+#ifdef __ANDROID__
#include <private/android/AHardwareBufferHelpers.h>
+#endif
#include <stdint.h>
#include <ui/Rect.h>
#include <utils/List.h>
@@ -393,8 +402,12 @@ static void ImageReader_init(JNIEnv* env, jobject thiz, jobject weakThiz, jint w
String8 consumerName = String8::format("ImageReader-%dx%df%xm%d-%d-%d",
width, height, nativeHalFormat, maxImages, getpid(),
createProcessUniqueId());
+#ifdef __ANDROID__
uint64_t consumerUsage =
android_hardware_HardwareBuffer_convertToGrallocUsageBits(ndkUsage);
+#else
+ uint64_t consumerUsage = 0;
+#endif
#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
sp<BufferItemConsumer> bufferConsumer = new BufferItemConsumer(consumerUsage, maxImages,
@@ -773,6 +786,7 @@ static bool Image_getLockedImageInfo(JNIEnv* env, LockedImage* buffer, int idx,
return true;
}
+#ifdef __ANDROID__
static void ImageReader_unlockGraphicBuffer(JNIEnv* env, jobject /*thiz*/,
jobject buffer) {
sp<GraphicBuffer> graphicBuffer =
@@ -856,6 +870,7 @@ static jobjectArray ImageReader_createImagePlanes(JNIEnv* env, jobject /*thiz*/,
return imagePlanes;
}
+#endif
static jobjectArray Image_createSurfacePlanes(JNIEnv* env, jobject thiz,
int numPlanes, int halReaderFormat, uint64_t ndkReaderUsage)
@@ -964,6 +979,7 @@ static jint Image_getFormat(JNIEnv* env, jobject thiz, jint readerFormat)
}
}
+#ifdef __ANDROID__
static jobject Image_getHardwareBuffer(JNIEnv* env, jobject thiz) {
BufferItem* buffer = Image_getBufferItem(env, thiz);
if (buffer == nullptr) {
@@ -976,45 +992,48 @@ static jobject Image_getHardwareBuffer(JNIEnv* env, jobject thiz) {
// to link against libandroid.so
return android_hardware_HardwareBuffer_createFromAHardwareBuffer(env, b);
}
+#endif
} // extern "C"
// ----------------------------------------------------------------------------
-static const JNINativeMethod gImageReaderMethods[] = {
- {"nativeClassInit", "()V", (void*)ImageReader_classInit },
- {"nativeInit", "(Ljava/lang/Object;IIIJII)V", (void*)ImageReader_init },
- {"nativeClose", "()V", (void*)ImageReader_close },
- {"nativeReleaseImage", "(Landroid/media/Image;)V", (void*)ImageReader_imageRelease },
- {"nativeImageSetup", "(Landroid/media/Image;)I", (void*)ImageReader_imageSetup },
- {"nativeGetSurface", "()Landroid/view/Surface;", (void*)ImageReader_getSurface },
- {"nativeDetachImage", "(Landroid/media/Image;Z)I", (void*)ImageReader_detachImage },
- {"nativeCreateImagePlanes",
- "(ILandroid/graphics/GraphicBuffer;IIIIII)[Landroid/media/ImageReader$ImagePlane;",
- (void*)ImageReader_createImagePlanes },
- {"nativeUnlockGraphicBuffer",
- "(Landroid/graphics/GraphicBuffer;)V", (void*)ImageReader_unlockGraphicBuffer },
- {"nativeDiscardFreeBuffers", "()V", (void*)ImageReader_discardFreeBuffers }
-};
+static const JNINativeMethod gImageReaderMethods[] =
+ {{"nativeClassInit", "()V", (void*)ImageReader_classInit},
+ {"nativeInit", "(Ljava/lang/Object;IIIJII)V", (void*)ImageReader_init},
+ {"nativeClose", "()V", (void*)ImageReader_close},
+ {"nativeReleaseImage", "(Landroid/media/Image;)V", (void*)ImageReader_imageRelease},
+ {"nativeImageSetup", "(Landroid/media/Image;)I", (void*)ImageReader_imageSetup},
+ {"nativeGetSurface", "()Landroid/view/Surface;", (void*)ImageReader_getSurface},
+ {"nativeDetachImage", "(Landroid/media/Image;Z)I", (void*)ImageReader_detachImage},
+#ifdef __ANDROID__
+ {"nativeCreateImagePlanes",
+ "(ILandroid/graphics/GraphicBuffer;IIIIII)[Landroid/media/ImageReader$ImagePlane;",
+ (void*)ImageReader_createImagePlanes},
+ {"nativeUnlockGraphicBuffer", "(Landroid/graphics/GraphicBuffer;)V",
+ (void*)ImageReader_unlockGraphicBuffer},
+#endif
+ {"nativeDiscardFreeBuffers", "()V", (void*)ImageReader_discardFreeBuffers}};
static const JNINativeMethod gImageMethods[] = {
- {"nativeCreatePlanes", "(IIJ)[Landroid/media/ImageReader$SurfaceImage$SurfacePlane;",
- (void*)Image_createSurfacePlanes },
- {"nativeGetWidth", "()I", (void*)Image_getWidth },
- {"nativeGetHeight", "()I", (void*)Image_getHeight },
- {"nativeGetFormat", "(I)I", (void*)Image_getFormat },
- {"nativeGetFenceFd", "()I", (void*)Image_getFenceFd },
- {"nativeGetHardwareBuffer", "()Landroid/hardware/HardwareBuffer;",
- (void*)Image_getHardwareBuffer },
+ {"nativeCreatePlanes", "(IIJ)[Landroid/media/ImageReader$SurfaceImage$SurfacePlane;",
+ (void*)Image_createSurfacePlanes},
+ {"nativeGetWidth", "()I", (void*)Image_getWidth},
+ {"nativeGetHeight", "()I", (void*)Image_getHeight},
+ {"nativeGetFormat", "(I)I", (void*)Image_getFormat},
+ {"nativeGetFenceFd", "()I", (void*)Image_getFenceFd},
+#ifdef __ANDROID__
+ {"nativeGetHardwareBuffer", "()Landroid/hardware/HardwareBuffer;",
+ (void*)Image_getHardwareBuffer},
+#endif
};
int register_android_media_ImageReader(JNIEnv *env) {
+ int ret1 = RegisterMethodsOrDie(env, "android/media/ImageReader", gImageReaderMethods,
+ NELEM(gImageReaderMethods));
- int ret1 = AndroidRuntime::registerNativeMethods(env,
- "android/media/ImageReader", gImageReaderMethods, NELEM(gImageReaderMethods));
-
- int ret2 = AndroidRuntime::registerNativeMethods(env,
- "android/media/ImageReader$SurfaceImage", gImageMethods, NELEM(gImageMethods));
+ int ret2 = RegisterMethodsOrDie(env, "android/media/ImageReader$SurfaceImage", gImageMethods,
+ NELEM(gImageMethods));
return (ret1 || ret2);
}
diff --git a/core/jni/android_media_PublicFormatUtils.cpp b/core/jni/android_media_PublicFormatUtils.cpp
index 04494ad00a65..bcdf654d5a8c 100644
--- a/core/jni/android_media_PublicFormatUtils.cpp
+++ b/core/jni/android_media_PublicFormatUtils.cpp
@@ -16,10 +16,10 @@
#define LOG_TAG "PublicFormatUtils_JNI"
-#include <utils/misc.h>
-#include <ui/PublicFormat.h>
-#include <android_runtime/AndroidRuntime.h>
#include <jni.h>
+#include <jni_wrappers.h>
+#include <ui/PublicFormat.h>
+#include <utils/misc.h>
using namespace android;
@@ -53,7 +53,6 @@ static const JNINativeMethod gMethods[] = {
};
int register_android_media_PublicFormatUtils(JNIEnv *env) {
- return AndroidRuntime::registerNativeMethods(env,
- "android/media/PublicFormatUtils", gMethods, NELEM(gMethods));
+ return RegisterMethodsOrDie(env, "android/media/PublicFormatUtils", gMethods, NELEM(gMethods));
}
diff --git a/core/jni/android_media_Utils.cpp b/core/jni/android_media_Utils.cpp
index e8f8644a4503..e48414113cf0 100644
--- a/core/jni/android_media_Utils.cpp
+++ b/core/jni/android_media_Utils.cpp
@@ -19,10 +19,12 @@
#include "android_media_Utils.h"
+#ifdef __ANDROID__ // Layoutlib does not support hardware
#include <aidl/android/hardware/graphics/common/PixelFormat.h>
#include <aidl/android/hardware/graphics/common/PlaneLayoutComponentType.h>
#include <ui/GraphicBufferMapper.h>
#include <ui/GraphicTypes.h>
+#endif
#include <utils/Log.h>
#define ALIGN(x, mask) ( ((x) + (mask) - 1) & ~((mask) - 1) )
@@ -34,7 +36,13 @@ namespace android {
// -----------Utility functions used by ImageReader/Writer JNI-----------------
+#ifdef __ANDROID__
using AidlPixelFormat = aidl::android::hardware::graphics::common::PixelFormat;
+#else
+namespace AidlPixelFormat {
+const int32_t YCBCR_P210 = 60;
+}
+#endif
enum {
IMAGE_MAX_NUM_PLANES = 3,
@@ -517,6 +525,7 @@ status_t getLockedImageInfo(LockedImage* buffer, int idx,
return OK;
}
+#ifdef __ANDROID__
static status_t extractP010Gralloc4PlaneLayout(
sp<GraphicBuffer> buffer, void *pData, int format, LockedImage *outputImage) {
using aidl::android::hardware::graphics::common::PlaneLayoutComponent;
@@ -663,6 +672,7 @@ static status_t extractP210Gralloc4PlaneLayout(sp<GraphicBuffer> buffer, void *p
outputImage->chromaStep = 4;
return OK;
}
+#endif
status_t lockImageFromBuffer(sp<GraphicBuffer> buffer, uint32_t inUsage,
const Rect& rect, int fenceFd, LockedImage* outputImage) {
@@ -701,6 +711,7 @@ status_t lockImageFromBuffer(sp<GraphicBuffer> buffer, uint32_t inUsage,
ALOGE("Lock buffer failed!");
return res;
}
+#ifdef __ANDROID__
if (isPossibly10BitYUV(format)) {
if (format == HAL_PIXEL_FORMAT_YCBCR_P010 &&
OK == extractP010Gralloc4PlaneLayout(buffer, pData, format, outputImage)) {
@@ -713,6 +724,7 @@ status_t lockImageFromBuffer(sp<GraphicBuffer> buffer, uint32_t inUsage,
return OK;
}
}
+#endif
}
outputImage->data = reinterpret_cast<uint8_t*>(pData);
diff --git a/core/jni/com_android_internal_os_LongArrayMultiStateCounter.cpp b/core/jni/com_android_internal_os_LongArrayMultiStateCounter.cpp
index 8f36ecb8b01a..7d94ef85f51a 100644
--- a/core/jni/com_android_internal_os_LongArrayMultiStateCounter.cpp
+++ b/core/jni/com_android_internal_os_LongArrayMultiStateCounter.cpp
@@ -116,17 +116,26 @@ static void native_reset(jlong nativePtr) {
counter->reset();
}
-static void native_getCounts(JNIEnv *env, jclass, jlong nativePtr, jlongArray values, jint state) {
+static bool native_getCounts(JNIEnv *env, jclass, jlong nativePtr, jlongArray values, jint state) {
auto *counter = reinterpret_cast<LongArrayMultiStateCounter *>(nativePtr);
- ScopedLongArrayRW scopedArray(env, values);
auto *data = counter->getCount(state).data();
- auto size = env->GetArrayLength(values);
- auto *outData = scopedArray.get();
if (data == nullptr) {
- memset(outData, 0, size * sizeof(uint64_t));
- } else {
- memcpy(outData, data, size * sizeof(uint64_t));
+ return false;
+ }
+ auto size = env->GetArrayLength(values);
+ bool allZeros = true;
+ for (int i = 0; i < size; i++) {
+ if (data[i]) {
+ allZeros = false;
+ break;
+ }
}
+ if (allZeros) {
+ return false;
+ }
+ ScopedLongArrayRW scopedArray(env, values);
+ memcpy(scopedArray.get(), data, size * sizeof(uint64_t));
+ return true;
}
static jobject native_toString(JNIEnv *env, jclass, jlong nativePtr) {
@@ -255,7 +264,7 @@ static const JNINativeMethod g_LongArrayMultiStateCounter_methods[] = {
// @CriticalNative
{"native_reset", "(J)V", (void *)native_reset},
// @FastNative
- {"native_getCounts", "(J[JI)V", (void *)native_getCounts},
+ {"native_getCounts", "(J[JI)Z", (void *)native_getCounts},
// @FastNative
{"native_toString", "(J)Ljava/lang/String;", (void *)native_toString},
// @FastNative
diff --git a/core/jni/jni_wrappers.h b/core/jni/jni_wrappers.h
index e3e17eed54d5..1f44994b54f2 100644
--- a/core/jni/jni_wrappers.h
+++ b/core/jni/jni_wrappers.h
@@ -22,6 +22,8 @@
#include <log/log.h>
#include <nativehelper/JNIHelp.h>
+#include <string>
+
namespace android {
static inline jclass FindClassOrDie(JNIEnv* env, const char* class_name) {
diff --git a/core/jni/platform/host/HostRuntime.cpp b/core/jni/platform/host/HostRuntime.cpp
index 1a0328338980..746740b0248b 100644
--- a/core/jni/platform/host/HostRuntime.cpp
+++ b/core/jni/platform/host/HostRuntime.cpp
@@ -48,6 +48,8 @@ using namespace std;
* (see AndroidRuntime.cpp).
*/
+extern int register_android_media_ImageReader(JNIEnv* env);
+extern int register_android_media_PublicFormatUtils(JNIEnv* env);
extern int register_android_os_Binder(JNIEnv* env);
extern int register_libcore_util_NativeAllocationRegistry(JNIEnv* env);
@@ -126,6 +128,10 @@ static const std::unordered_map<std::string, RegJNIRec> gRegJNIMap = {
{"android.database.sqlite.SQLiteDebug", REG_JNI(register_android_database_SQLiteDebug)},
{"android.database.sqlite.SQLiteRawStatement",
REG_JNI(register_android_database_SQLiteRawStatement)},
+#endif
+ {"android.media.ImageReader", REG_JNI(register_android_media_ImageReader)},
+ {"android.media.PublicFormatUtils", REG_JNI(register_android_media_PublicFormatUtils)},
+#ifdef __linux__
{"android.os.Binder", REG_JNI(register_android_os_Binder)},
{"android.os.FileObserver", REG_JNI(register_android_os_FileObserver)},
{"android.os.MessageQueue", REG_JNI(register_android_os_MessageQueue)},
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 78526ad4a06b..ee6899cf866b 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -7759,7 +7759,17 @@
@FlaggedApi("com.android.server.telecom.flags.telecom_resolve_hidden_dependencies")
@hide -->
<permission android:name="android.permission.READ_BLOCKED_NUMBERS"
- android:protectionLevel="signature" />
+ android:protectionLevel="signature"
+ android:featureFlag="!android.permission.flags.grant_read_blocked_numbers_to_system_ui_intelligence" />
+
+ <!-- Allows the holder to read blocked numbers. See
+ {@link android.provider.BlockedNumberContract}.
+ @SystemApi
+ @FlaggedApi("com.android.server.telecom.flags.telecom_resolve_hidden_dependencies")
+ @hide -->
+ <permission android:name="android.permission.READ_BLOCKED_NUMBERS"
+ android:protectionLevel="signature|role"
+ android:featureFlag="android.permission.flags.grant_read_blocked_numbers_to_system_ui_intelligence" />
<!-- Allows the holder to write blocked numbers. See
{@link android.provider.BlockedNumberContract}.
diff --git a/core/res/res/color-night/surface_effect_2_color.xml b/core/res/res/color-night/surface_effect_2_color.xml
new file mode 100644
index 000000000000..6485017bec98
--- /dev/null
+++ b/core/res/res/color-night/surface_effect_2_color.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:color="@android:color/system_accent1_100"
+ android:alpha="0.15"/>
+</selector>
diff --git a/core/res/res/color-night/surface_effect_3_color.xml b/core/res/res/color-night/surface_effect_3_color.xml
new file mode 100644
index 000000000000..a7a7f8d89549
--- /dev/null
+++ b/core/res/res/color-night/surface_effect_3_color.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:color="@android:color/system_accent1_100"
+ android:alpha="0.10"/>
+</selector>
diff --git a/core/res/res/color/surface_effect_2_color.xml b/core/res/res/color/surface_effect_2_color.xml
new file mode 100644
index 000000000000..91c84095ec12
--- /dev/null
+++ b/core/res/res/color/surface_effect_2_color.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:color="@android:color/system_accent1_0"
+ android:alpha="0.32"/>
+</selector>
diff --git a/core/res/res/color/surface_effect_3_color.xml b/core/res/res/color/surface_effect_3_color.xml
new file mode 100644
index 000000000000..d766a32aff8b
--- /dev/null
+++ b/core/res/res/color/surface_effect_3_color.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:color="@android:color/system_accent1_600"
+ android:alpha="0.15"/>
+</selector>
diff --git a/core/res/res/layout/notification_2025_template_collapsed_call.xml b/core/res/res/layout/notification_2025_template_collapsed_call.xml
index f1729b3c2f76..ee691e4d6894 100644
--- a/core/res/res/layout/notification_2025_template_collapsed_call.xml
+++ b/core/res/res/layout/notification_2025_template_collapsed_call.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?><!--
- ~ 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.
@@ -25,55 +25,177 @@
android:theme="@style/Theme.DeviceDefault.Notification"
>
- <!-- CallLayout shares visual appearance with ConversationLayout, so shares layouts -->
- <include layout="@layout/notification_2025_conversation_icon_container" />
-
<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:minHeight="@dimen/notification_2025_min_height"
- android:orientation="horizontal"
+ android:clipChildren="false"
+ android:orientation="vertical"
>
- <LinearLayout
- android:id="@+id/notification_main_column"
+ <com.android.internal.widget.NotificationMaxHeightFrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_weight="1"
- android:layout_marginStart="@dimen/notification_2025_content_margin_start"
- android:orientation="vertical"
- android:paddingBottom="@dimen/notification_2025_margin"
+ android:minHeight="@dimen/notification_2025_min_height"
+ android:clipChildren="false"
>
- <include
- layout="@layout/notification_template_conversation_header"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ <ImageView
+ android:id="@+id/left_icon"
+ android:layout_width="@dimen/notification_2025_left_icon_size"
+ android:layout_height="@dimen/notification_2025_left_icon_size"
+ android:layout_alignParentStart="true"
+ android:layout_margin="@dimen/notification_2025_margin"
+ android:background="@drawable/notification_large_icon_outline"
+ android:clipToOutline="true"
+ android:importantForAccessibility="no"
+ android:scaleType="centerCrop"
+ android:visibility="gone"
/>
- <include layout="@layout/notification_template_text"
- android:layout_height="wrap_content"
- android:minHeight="@dimen/notification_text_height"
+ <!-- CallLayout shares visual appearance with ConversationLayout, so shares layouts -->
+ <include layout="@layout/notification_2025_conversation_icon_container" />
+
+ <FrameLayout
+ android:id="@+id/alternate_expand_target"
+ android:layout_width="@dimen/notification_2025_content_margin_start"
+ android:layout_height="match_parent"
+ android:layout_gravity="start"
+ android:importantForAccessibility="no"
+ android:focusable="false"
/>
- </LinearLayout>
+ <LinearLayout
+ android:id="@+id/notification_headerless_view_row"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginStart="@dimen/notification_2025_content_margin_start"
+ android:orientation="horizontal"
+ android:clipChildren="false"
+ >
- <FrameLayout
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:minWidth="@dimen/notification_content_margin_end"
- >
+ <LinearLayout
+ android:id="@+id/notification_headerless_view_column"
+ android:layout_width="0px"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_weight="1"
+ android:layout_marginBottom="@dimen/notification_2025_margin"
+ android:layout_marginTop="@dimen/notification_2025_margin"
+ android:clipChildren="false"
+ android:orientation="vertical"
+ >
- <include
- layout="@layout/notification_2025_expand_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="top|end"
- />
+ <NotificationTopLineView
+ android:id="@+id/notification_top_line"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:minHeight="@dimen/notification_headerless_line_height"
+ android:clipChildren="false"
+ android:theme="@style/Theme.DeviceDefault.Notification"
+ >
+
+ <!--
+ NOTE: The notification_2025_top_line_views layout contains the app_name_text.
+ In order to include the title view at the beginning, the Notification.Builder
+ has logic to hide that view whenever this title view is to be visible.
+ -->
+
+ <TextView
+ android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="@dimen/notification_header_separating_margin"
+ android:ellipsize="end"
+ android:fadingEdge="horizontal"
+ android:singleLine="true"
+ android:textAlignment="viewStart"
+ android:textAppearance="@style/TextAppearance.DeviceDefault.Notification.Title"
+ />
+
+ <include layout="@layout/notification_2025_top_line_views" />
+
+ </NotificationTopLineView>
- </FrameLayout>
+ <LinearLayout
+ android:id="@+id/notification_main_column"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:clipChildren="false"
+ >
+ <com.android.internal.widget.NotificationVanishingFrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="@dimen/notification_headerless_line_height"
+ >
+ <!-- This is the simplest way to keep this text vertically centered without
+ gravity="center_vertical" which causes jumpiness in expansion animations. -->
+ <include
+ layout="@layout/notification_2025_text"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/notification_text_height"
+ android:layout_gravity="center_vertical"
+ android:layout_marginTop="0dp"
+ />
+ </com.android.internal.widget.NotificationVanishingFrameLayout>
+ </LinearLayout>
+ </LinearLayout>
+
+ <ImageView
+ android:id="@+id/right_icon"
+ android:layout_width="@dimen/notification_right_icon_size"
+ android:layout_height="@dimen/notification_right_icon_size"
+ android:layout_gravity="center_vertical|end"
+ android:layout_marginTop="@dimen/notification_right_icon_headerless_margin"
+ android:layout_marginBottom="@dimen/notification_right_icon_headerless_margin"
+ android:layout_marginStart="@dimen/notification_right_icon_content_margin"
+ android:background="@drawable/notification_large_icon_outline"
+ android:clipToOutline="true"
+ android:importantForAccessibility="no"
+ android:scaleType="centerCrop"
+ />
+
+ <FrameLayout
+ android:id="@+id/expand_button_touch_container"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:minWidth="@dimen/notification_content_margin_end"
+ >
+
+ <include layout="@layout/notification_2025_expand_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="top|end"
+ />
+
+ </FrameLayout>
+
+ </LinearLayout>
+
+ <include layout="@layout/notification_close_button"
+ android:id="@+id/close_button"
+ android:layout_width="@dimen/notification_close_button_size"
+ android:layout_height="@dimen/notification_close_button_size"
+ android:layout_gravity="top|end" />
+
+ </com.android.internal.widget.NotificationMaxHeightFrameLayout>
+
+ <LinearLayout
+ android:id="@+id/notification_action_list_margin_target"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="-20dp"
+ android:clipChildren="false"
+ android:orientation="vertical">
+ <include layout="@layout/notification_template_smart_reply_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/notification_content_margin"
+ android:layout_marginStart="@dimen/notification_2025_content_margin_start"
+ android:layout_marginEnd="@dimen/notification_content_margin_end" />
+ <include layout="@layout/notification_material_action_list" />
+ </LinearLayout>
</LinearLayout>
</com.android.internal.widget.CallLayout>
diff --git a/core/res/res/layout/notification_2025_template_expanded_call.xml b/core/res/res/layout/notification_2025_template_expanded_call.xml
index 2114831f4c15..bbc29664d594 100644
--- a/core/res/res/layout/notification_2025_template_expanded_call.xml
+++ b/core/res/res/layout/notification_2025_template_expanded_call.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- ~ 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.
@@ -27,83 +27,47 @@
>
<!-- CallLayout shares visual appearance with ConversationLayout, so shares layouts -->
- <include layout="@layout/notification_2025_conversation_icon_container" />
+ <include layout="@layout/notification_2025_conversation_header"/>
- <LinearLayout
+ <com.android.internal.widget.RemeasuringLinearLayout
android:id="@+id/notification_action_list_margin_target"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="@dimen/notification_content_margin"
- android:orientation="vertical"
- >
-
- <LinearLayout
+ android:layout_gravity="top"
+ android:clipChildren="false"
+ android:orientation="vertical">
+
+ <!-- Note: the top margin is being set in code based on the estimated space needed for
+ the header text. -->
+ <com.android.internal.widget.RemeasuringLinearLayout
+ android:id="@+id/notification_main_column"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_gravity="top"
android:layout_weight="1"
- android:orientation="horizontal"
+ android:layout_marginStart="@dimen/notification_2025_content_margin_start"
+ android:layout_marginEnd="@dimen/notification_content_margin_end"
+ android:orientation="vertical"
+ android:clipChildren="false"
>
- <LinearLayout
- android:id="@+id/notification_main_column"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="@dimen/notification_2025_content_margin_start"
- android:layout_weight="1"
- android:orientation="vertical"
- android:minHeight="68dp"
- >
-
- <include
- layout="@layout/notification_template_conversation_header"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
-
- <include layout="@layout/notification_template_text_multiline" />
-
- <include
- android:layout_width="match_parent"
- android:layout_height="@dimen/notification_progress_bar_height"
- android:layout_marginTop="@dimen/notification_progress_margin_top"
- layout="@layout/notification_template_progress"
- />
- </LinearLayout>
-
- <FrameLayout
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:minWidth="@dimen/notification_content_margin_end"
- >
-
- <include
- layout="@layout/notification_expand_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
+ <include layout="@layout/notification_template_part_line1"/>
- </FrameLayout>
+ <include layout="@layout/notification_template_text_multiline" />
- </LinearLayout>
+ </com.android.internal.widget.RemeasuringLinearLayout>
- <ViewStub
- android:layout="@layout/notification_material_reply_text"
- android:id="@+id/notification_material_reply_container"
+ <include layout="@layout/notification_template_smart_reply_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- />
-
- <include
- layout="@layout/notification_template_smart_reply_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="@dimen/notification_2025_content_margin_start"
- android:layout_marginEnd="@dimen/notification_content_margin_end"
android:layout_marginTop="@dimen/notification_content_margin"
- />
+ android:layout_marginStart="@dimen/notification_2025_content_margin_start"
+ android:layout_marginEnd="@dimen/notification_content_margin_end" />
<include layout="@layout/notification_material_action_list" />
- </LinearLayout>
+ </com.android.internal.widget.RemeasuringLinearLayout>
+
+ <include layout="@layout/notification_template_right_icon" />
</com.android.internal.widget.CallLayout>
diff --git a/core/res/res/layout/notification_2025_template_header.xml b/core/res/res/layout/notification_2025_template_header.xml
index 5aae67802af9..72b3798e0780 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_container"
+ android:layout_toStartOf="@id/expand_button"
android:layout_alignWithParentIfMissing="true"
android:layout_marginVertical="@dimen/notification_2025_margin"
android:clipChildren="false"
@@ -81,30 +81,12 @@
android:focusable="false"
/>
-
- <LinearLayout
- android:id="@+id/expand_button_container"
+ <include layout="@layout/notification_2025_expand_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- 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" />
+ 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_2025_top_line_views.xml b/core/res/res/layout/notification_2025_top_line_views.xml
index a9bde9d48dcf..7431c421ed3d 100644
--- a/core/res/res/layout/notification_2025_top_line_views.xml
+++ b/core/res/res/layout/notification_2025_top_line_views.xml
@@ -108,6 +108,42 @@
android:visibility="gone"
/>
+ <TextView
+ android:id="@+id/verification_divider"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="@style/TextAppearance.DeviceDefault.Notification.Info"
+ android:layout_marginStart="@dimen/notification_header_separating_margin"
+ android:layout_marginEnd="@dimen/notification_header_separating_margin"
+ android:text="@string/notification_header_divider_symbol"
+ android:singleLine="true"
+ android:visibility="gone"
+ />
+
+ <ImageView
+ android:id="@+id/verification_icon"
+ android:layout_width="@dimen/notification_2025_badge_size"
+ android:layout_height="@dimen/notification_2025_badge_size"
+ android:layout_marginStart="@dimen/notification_header_separating_margin"
+ android:layout_marginEnd="@dimen/notification_header_separating_margin"
+ android:baseline="@dimen/notification_2025_badge_baseline"
+ android:scaleType="fitCenter"
+ android:visibility="gone"
+ />
+
+ <TextView
+ android:id="@+id/verification_text"
+ android:textAppearance="@style/TextAppearance.DeviceDefault.Notification.Info"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/notification_header_separating_margin"
+ android:layout_marginEnd="@dimen/notification_header_separating_margin"
+ android:layout_weight="100"
+ android:showRelative="true"
+ android:singleLine="true"
+ android:visibility="gone"
+ />
+
<ImageButton
android:id="@+id/feedback"
android:layout_width="@dimen/notification_feedback_size"
diff --git a/core/res/res/layout/notification_template_header.xml b/core/res/res/layout/notification_template_header.xml
index b7fd737a4e39..57959361bd48 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_container"
+ android:layout_toStartOf="@id/expand_button"
android:layout_alignWithParentIfMissing="true"
android:clipChildren="false"
android:gravity="center_vertical"
@@ -83,28 +83,12 @@
android:focusable="false"
/>
- <LinearLayout
- android:id="@+id/expand_button_container"
+ <include layout="@layout/notification_expand_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- 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" />
+ android:layout_centerVertical="true"
+ android:layout_alignParentEnd="true" />
- <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 788d5f7c80d2..320319549d8d 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"toegang te verkry tot sensordata oor jou lewenstekens"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Kennisgewings"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"wys kennisgewings"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"UR-nasporingdata"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"toegang tot UR-data oor jou en die omgewing rondom jou te verkry"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"sensitiewe UR-nasporingdata"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"toegang tot sensitiewe nasporingdata, soos oogblik, te verkry"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Venster-inhoud ophaal"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Die inhoud ondersoek van \'n venster waarmee jy interaksie het."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Verken-met-raak aanskakel"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Laat die app toe om jou fotoversameling te wysig."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"lees liggings in jou mediaversameling"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Laat die app toe om liggings in jou mediaversameling te lees."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"jou benaderde oogblik na te spoor"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Laat die app toe om jou benaderde oogblik na te spoor."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"waar jy kyk na te spoor"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Gee die app toegang tot presiese oogblikdata."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"jou gesig na te spoor"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Gee die app toegang tot gesignasporingdata."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"jou hande na te spoor"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Gee die app toegang tot handbewegingnasporingdata."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"jou kop na te spoor"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Gee die app toegang tot kopsporingdata."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"jou onmiddellike omgewing te verstaan"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Gee die app toegang tot nasporingdata oor die omgewing direk rondom jou."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"jou onmiddellike omgewing in fyn detail te verstaan"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Gee die app toegang tot hoogs gedetailleerde spoordata oor die omgewing direk rondom jou."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"toegang tot UR-data te verkry terwyl dit nie op die voorgrond is nie"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Gee die app toegang tot UR-data terwyl dit nie in die voorgrond is nie."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Gebruik biometrie"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Gebruik biometrie of skermslot"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifieer dat dit jy is"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index ca145e58b22d..f4dabdbe5d87 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"ስለአስፈላጊ ምልክቶችዎ ያሉ የዳሳሽ ውሂብ ይድረሱ"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"ማሳወቂያዎች"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"ማሳወቂያዎች አሳይ"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR የመከታተያ ውሂብ"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"ስለ እርስዎ እና በዙሪያዎ ስላለው አካባቢ XR ውሂብ ይድረሱ"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"ልዩ ጥንቃቄ የሚያስፈልገው XR የመከታተያ ውሂብ"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"እንደ የዓይን ትኩረት ያለ ልዩ ጥንቃቄ የሚያስፈልገው የመከታተያ ውሂብ ይድረሱ"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"የመስኮት ይዘት ሰርስረው ያውጡ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"መስተጋበር የሚፈጥሩት የመስኮት ይዘት ይመርምሩ።"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"በመንካት ያስሱን ያብሩ"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"መተግበሪያው የፎቶ ስብስብዎን እንዲቀይረው ያስችለዋል።"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"አካባቢዎችን ከሚዲያ ስብስብዎ ማንበብ"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"መተግበሪያው አካባቢዎችን ከሚዲያ ስብስብዎ እንዲያነብብ ያስችለዋል።"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"የእርዎን ግምታዊ የዓይን ትኩረት ይከታተሉ"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"መተግበሪያው የእርስዎን ግምታዊ የዓይን ትኩረት እንዲከታተል ይፈቅዳል።"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"የሚመልከቱበትን ቦታ ይከታተሉ"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"መተግበሪያው ትክክለኛ የዓይን ትኩረት ውሂብን እንዲከታተል ይፈቅዳል።"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"መልክዎን ይከታተሉ"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"መተግበሪያው የመልክ መከታተያ ውሂብን እንዲደርስ ይፈቅዳል።"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"እጆችዎን ይከታተሉ"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"መተግበሪያው የእጅ ክትትል ውሂብን እንዲደርስ ይፈቅዳል።"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"ጭንቅላትዎን ይከታተሉ"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"መተግበሪያው የጭንቅላት መከታተያ ውሂብን እንዲደርስ ይፈቅዳል።"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"የእርስዎን ቅርብ አካባቢ ይረዱ"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"መተግበሪያው በቀጥታ በዙሪያዎ ስላለው አካባቢ ውሂብ መከታተልን እንዲደርስ ይፈቅዳል።"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"የእርስዎን ቅርብ አካባቢ በከፍተኛ ዝርዝር ይረዱ"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"መተግበሪያው በቀጥታ በዙሪያዎ ስላለው አካባቢ በከፍተኛ ዝርዝር የመከታተያ ውሂብ እንዲደርስ ይፈቅዳል።"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"የፊት ገፅ ውስጥ ሳይሆን ሳለ XR ውሂብ ይድረሱ"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"መተግበሪያው የፊት ገፅ ውስጥ ሳይሆን XR ውሂብ እንዲደርስ ይፈቅዳል።"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"ባዮሜትሪኮችን ይጠቀሙ"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ባዮሜትሪክስ ወይም ማያ ገፅ መቆለፊያን ይጠቀሙ"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"እርስዎን መሆንዎን ያረጋግጡ"</string>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 397afe20abb2..2b9a20a81804 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"আপোনাৰ দেহৰ গুৰুত্বপূৰ্ণ অংগসমূহৰ অৱস্থাৰ বিষয়ে ছেন্সৰৰ ডেটা লাভ কৰিব পাৰে"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"জাননী"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"জাননী দেখুৱাওক"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR ট্ৰেকিং ডেটা"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"আপোনাৰ আৰু আপোনাৰ চৌপাশৰ পৰিৱেশ সম্পৰ্কীয় XR ডেটা এক্সেছ কৰা"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"সংবেদনশীল XR ট্ৰেকিং ডেটা"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"চকুৰ দৃষ্টিৰ দৰে সংবেদনশীল ট্ৰেকিং ডেটা এক্সেছ কৰা"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"ৱিণ্ড’ সমল বিচাৰি উলিওৱাৰ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"আপুনি চাই থকা ৱিণ্ড’খনৰ সমল পৰীক্ষা কৰাৰ।"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"স্পৰ্শৰ দ্বাৰা অন্বেষণ কৰাৰ সুবিধা অন কৰাৰ"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"এপক আপোনাৰ ফট’ সংগ্ৰহ সালসলনি কৰিবলৈ দিয়ে।"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"আপোনাৰ মিডিয়া সংগ্ৰহৰ অৱস্থান পঢ়িবলৈ"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"এপক আপোনাৰ মিডিয়া সংগ্ৰহৰ অৱস্থান পঢ়িবলৈ দিয়ে।"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"আপোনাৰ আনুমানিক চকুৰ দৃষ্টি ট্ৰেক কৰা"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"এপ্‌টোক আপোনাৰ চকুৰ আনুমানিক দৃষ্টি ট্ৰেক কৰিবলৈ দিয়ে।"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"আপুনি কোনফালে চাই আছে সেয়া ট্ৰেক কৰা"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"এপ্‌টোক আপোনাৰ চকুৰ সঠিক দৃষ্টি সম্পৰ্কীয় ডেটা এক্সেছ কৰিবলৈ দিয়ে।"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"আপোনাৰ মুখাৱয়ব ট্ৰেক কৰা"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"এপ্‌টোক মুখাৱয়ব ট্ৰেক কৰাৰ ডেটা এক্সেছ কৰিবলৈ দিয়ে।"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"আপোনাৰ হাত ট্ৰেক কৰা"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"এপ্‌টোক হাতৰ ট্ৰেকিং সম্পৰ্কীয় ডেটা এক্সেছ কৰিবলৈ দিয়ে।"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"আপোনাৰ মূৰ ট্ৰেক কৰা"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"এপ্‌টোক হে’ড ট্ৰেকিং সম্পৰ্কীয় ডেটা এক্সেছ কৰিবলৈ দিয়ে।"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"আপোনাৰ একেবাৰেই আশ-পাশৰ পৰিৱেশ বুজা"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"এপ্‌টোক আপোনাৰ একেবাৰেই আশা-পাশৰ পৰিৱেশ সম্পৰ্কীয় ট্ৰেকিং ডেটা এক্সেছ কৰিবলৈ দিয়ে।"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"বিস্তৃত সবিশেষৰ সৈতে আপোনাৰ একেবাৰেই আশ-পাশৰ পৰিৱেশ বুজা"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"এপ্‌টোক বিতং সবিশেষৰ সৈতে আপোনাৰ একেবাৰেই আশা-পাশৰ পৰিৱেশ সম্পৰ্কীয় ট্ৰেকিং ডেটা এক্সেছ কৰিবলৈ দিয়ে।"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"অগ্ৰভূমিত নথকাৰ সময়ত XR ডেটা এক্সেছ কৰা"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"অগ্ৰভূমিত নথকাৰ সময়ত এপ্‌টোক XR ডেটা এক্সেছ কৰিবলৈ দিয়ে।"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"বায়\'মেট্ৰিক ব্যৱহাৰ কৰক"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"বায়\'মেট্ৰিক অথবা স্ক্ৰীন লক ব্যৱহাৰ কৰক"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"এইয়া আপুনিয়েই বুলি সত্যাপন কৰক"</string>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index 96c77e4ee030..e5bfb29bdffb 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"Həyati əlamətlər haqqında sensor dataya daxil olun"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Bildirişlər"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"bildirişləri göstərmək"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR izləmə datası"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"siz və ətrafınızdakı mühit haqqında XR datasına giriş"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"həssas XR izləmə datası"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"baxış kimi həssas izləmə datasına giriş"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Pəncərənin məzmununu əldə edin"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Əlaqədə olduğunuz pəncərənin məzmununu nəzərdən keçirin."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Toxunuşla öyrənmə funksiyasını aktiv edin"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Tətbiqin foto kolleksiyanıza düzəliş etməsinə icazə verir."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"media kolleksiyanızdan məkanları oxuyun"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Tətbiqin media kolleksiyanızdan məkanları oxumasına icazə verin."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"təxmini baxışınızı izləmək"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Tətbiqə təxmini baxışınızı izləmək icazəsi verir."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"baxdığınız yeri izləmək"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Tətbiqə dəqiq baxış datasına daxil olmaq icazəsi verir."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"üzünüzü izləmək"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Tətbiqə üz izləmə datasına daxil olmaq icazəsi verir."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"əllərinizi izləmək"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Tətbiqə əl izləmə datasına daxil olmaq icazəsi verir."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"başınızı izləmək"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Tətbiqə baş izləmə datasına daxil olmaq icazəsi verir."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"yaxın ətrafınızı anlamaq"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Tətbiqə ətrafınızdakı mühit haqqında izləmə datasına daxil olmaq icazəsi verir."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"yaxın ətrafınızı yüksək detallarla anlamaq"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Tətbiqə çox yüksək detallar ilə ətrafınızdakı mühit haqqında izləmə datasına daxil olmaq icazəsi verir."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"ön planda olmadıqda XR datasına giriş"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Tətbiqə ön planda olmadıqda XR datasına daxil olmaq icazəsi verir."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Biometrik məlumatlardan istifadə edin"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biometrik məlumatlardan və ya ekran kilidindən istifadə edin"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Kimliyinizi doğrulayın"</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 6a68f8d76e30..3e67233da282 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"pristupa podacima senzora o vitalnim funkcijama"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Obaveštenja"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"prikazivanje obaveštenja"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"podaci o praćenju proširene stvarnosti"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"pristupa podacima proširene stvarnosti o vama i okruženju oko vas"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"osetljivi podaci o XR praćenju"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"pristupa osetljivim podacima o praćenju, na primer podacima o pogledu"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"da preuzima sadržaj prozora"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Proverava sadržaj prozora sa kojim ostvarujete interakciju."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"da uključi Istraživanja dodirom"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Dozvoljava aplikaciji da menja kolekciju slika."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"čitanje lokacija iz medijske kolekcije"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Dozvoljava aplikaciji da čita lokacije iz medijske kolekcije."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"praćenje približnih podataka o pogledu"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Dozvoljava aplikaciji da prati približne podatke o pogledu."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"praćenje pogleda"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Dozvoljava aplikaciji da pristupa preciznim podacima o pogledu."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"praćenje lica"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Dozvoljava aplikaciji da pristupa podacima o praćenju lica."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"praćenje ruku"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Dozvoljava aplikaciji da pristupa podacima o praćenju ruku."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"praćenje glave"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Dozvoljava aplikaciji da pristupa podacima o praćenju glave."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"razumevanje neposrednog okruženja"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Dozvoljava aplikaciji da pristupa podacima o praćenju vašeg neposrednog okruženja."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"razumevanje neposrednog okruženja sa mnoštvom detalja"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Dozvoljava aplikaciji da pristupa podacima o praćenju vašeg neposrednog okruženja koji sadrže mnoštvo detalja."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"pristup podacima proširene stvarnosti kada nije u prvom planu"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Dozvoljava aplikaciji da pristupa podacima proširene stvarnosti kada nije u prvom planu."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Koristite biometriju"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Koristite biometriju ili otključavanje ekrana"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Potvrdite identitet"</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 69271ba47c0a..d01af9464402 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -355,14 +355,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"атрымліваць з датчыка даныя асноўных фізіялагічных паказчыкаў"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Апавяшчэнні"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"паказваць апавяшчэнні"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"даныя XR адсочвання"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"атрымліваць доступ да даных XR пра вас і ваша блізкае асяроддзе"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"канфідэнцыяльныя даныя XR адсочвання"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"атрымліваць доступ да канфідэнцыяльных даных адсочвання, напрыклад позірку"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Атрымліваць змесціва вакна"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Аналізаваць змесціва актыўнага вакна."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Уключаць Азнаямленне дотыкам"</string>
@@ -658,38 +654,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Праграма зможа змяняць фотакалекцыю."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"паказваць месцазнаходжанне ў калекцыі мультымедыя"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Праграма зможа паказваць месцазнаходжанне ў калекцыі мультымедыя."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"адсочваць прыблізны напрамак позірку"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Дазваляе праграме адсочваць прыблізны напрамак позірку."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"адсочваць, куды вы гледзіце"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Дазваляе праграме атрымліваць доступ да дакладных даных позірку."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"адсочваць рухі твару"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Дазваляе праграме атрымліваць доступ да даных адсочвання рухаў твару."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"адсочваць рухі рук"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Дазваляе праграме атрымліваць доступ да даных адсочвання рухаў рук."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"адсочваць рухі галавы"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Дазваляе праграме атрымліваць доступ да даных адсочвання рухаў галавы."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"счытваць ваша блізкае асяроддзе"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Дазваляе праграме атрымліваць доступ да даных адсочвання вашага блізкага асяроддзя."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"счытваць ваша блізкае асяроддзе з высокай дэталізацыяй"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Дазваляе праграме атрымліваць доступ да даных адсочвання вашага блізкага асяроддзя з вялікай дэталізацыяй."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"атрымліваць доступ да даных XR, калі праграма не ў актыўным рэжыме"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Дазваляе праграме атрымліваць доступ да даных XR, калі яна працуе не ў актыўным рэжыме."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Выкарыстоўваць біяметрыю"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Выкарыстоўваць біяметрыю ці блакіроўку экрана"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Спраўдзіце, што гэта вы"</string>
@@ -1846,7 +1826,7 @@
<string name="hearing_device_notification_switch_button" msgid="3619524619430941300">"Пераключыцца"</string>
<string name="hearing_device_notification_settings_button" msgid="6673651052880279178">"Налады"</string>
<string name="user_switched" msgid="7249833311585228097">"Бягучы карыстальнік <xliff:g id="NAME">%1$s</xliff:g>."</string>
- <string name="user_switching_message" msgid="1912993630661332336">"Пераход у рэжым \"<xliff:g id="NAME">%1$s</xliff:g>\"..."</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"Пераключэнне на карыстальніка \"<xliff:g id="NAME">%1$s</xliff:g>\"…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"<xliff:g id="NAME">%1$s</xliff:g> выходзіць з сістэмы…"</string>
<string name="owner_name" msgid="8713560351570795743">"Уладальнік"</string>
<string name="guest_name" msgid="8502103277839834324">"Госць"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 1581ab8a5545..0083ddea18f3 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"достъп до сензорните данни за жизнените ви показатели"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Известия"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"показване на известията"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"Данни за XR за проследяване"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"достъп до данните за XR за вас и заобикалящата ви среда"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"поверителни данни за XR за проследяване"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"достъп до поверителните данни за проследяване, като например погледа"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Извлича съдържанието от прозореца"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Инспектира съдържанието на прозорец, с който взаимодействате."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Включи изследването чрез докосване"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Разрешава на приложението да променя колекцията ви от снимки."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"да чете местоположенията от мултимедийната ви колекция"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Разрешава на приложението да чете местоположенията от мултимедийната ви колекция."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"проследяване на погледа ви с ниска точност"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Разрешава на приложението да проследява погледа ви с ниска точност."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"проследяване на погледа ви"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Разрешава на приложението да осъществява достъп до данните за погледа ви с висока точност."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"проследяване на лицето ви"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Разрешава на приложението да осъществява достъп до данните за проследяване на лицето."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"проследяване на ръцете ви"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Разрешава на приложението да осъществява достъп до данните за проследяване на ръцете."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"проследяване на движенията на главата ви"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Разрешава на приложението да осъществява достъп до данните за проследяване на движенията на главата."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"разбиране на заобикалящата ви среда"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Разрешава на приложението да осъществява достъп до данните за проследяване на заобикалящата ви среда."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"разпознаване на заобикалящата ви среда с висока детайлност"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Разрешава на приложението да осъществява достъп до данните за проследяване на заобикалящата ви среда с много висока детайлност."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"достъп до данните за XR, когато не е на преден план"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Разрешава на приложението да осъществява достъп до данните за XR, когато не е на преден план."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Използване на биометр. данни"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Използване на биометрични данни или опцията за заключване на екрана"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Потвърдете, че сте вие"</string>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index c05ea6dcbf00..298be5147ccd 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"আপনার অত্যাবশ্যক লক্ষণগুলির সম্পর্কে সেন্সর ডেটা অ্যাক্সেস করে"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"বিজ্ঞপ্তি"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"বিজ্ঞপ্তি দেখুন"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR ট্র্যাকিং ডেটা"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"আপনার এবং আপনার চারপাশের পরিবেশ সম্পর্কে XR ডেটা অ্যাক্সেস করুন"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"সংবেদনশীল XR ট্র্যাকিং ডেটা"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"সংবেদনশীল ট্র্যাকিং ডেটা অ্যাক্সেস করুন, যেমন চোখের দৃষ্টি"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"উইন্ডোর কন্টেন্ট ফিরিয়ে আনুন"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"ব্যবহার করছেন এমন একটি উইন্ডোর কন্টেন্ট পরীক্ষা করে৷"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"স্পর্শের মাধ্যমে অন্বেষণ করা চালু করুন"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"অ্যাপকে আপনার ফটো সংগ্রহ পরিবর্তন করার অনুমতি দিন।"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"ডিয়া সংগ্রহ থেকে লোকেশন দেখতে দিন"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"আপনার মিডিয়া সংগ্রহ থেকে লোকেশন দেখতে অ্যাপকে অনুমতি দিন।"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"আপনার আনুমানিক চোখের দৃষ্টি ট্র্যাক করুন"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"অ্যাপটিকে আপনার আনুমানিক চোখের দৃষ্টি ট্র্যাক করার অনুমতি দেয়।"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"কোনদিকে দেখছেন তা ট্র্যাক করুন"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"অ্যাপটিকে আপনার চোখের দৃষ্টি সম্পর্কিত নির্দিষ্ট ডেটা অ্যাক্সেস করার অনুমতি দেয়।"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"নিজের ফেস ট্র্যাক করুন"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"অ্যাপটিকে ফেস ট্র্যাকিং ডেটা অ্যাক্সেস করার অনুমতি দেয়।"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"হাত ট্র্যাক করুন"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"অ্যাপটিকে হ্যান্ড ট্র্যাকিং ডেটা অ্যাক্সেস করার অনুমতি দেয়।"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"আপনার মাথা ট্র্যাক করুন"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"অ্যাপটিকে হেড ট্র্যাকিং ডেটা অ্যাক্সেস করার অনুমতি দেয়।"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"আপনার চারপাশের পরিবেশ সম্পর্কে বুঝুন"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"অ্যাপটিকে সরাসরি আপনার চারপাশের পরিবেশ সম্পর্কে ট্র্যাকিং ডেটা অ্যাক্সেস করার অনুমতি দেয়।"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"সূক্ষ্ম বিশদ বিবরণ সহ আপনার চারপাশের পরিবেশ সম্পর্কে বুঝুন"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"অ্যাপটিকে সরাসরি আপনার চারপাশের পরিবেশ সম্পর্কে সূক্ষ্ম বিবরণ সহ ট্র্যাকিং ডেটা অ্যাক্সেস করার অনুমতি দেয়।"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"ফোরগ্রাউন্ডে না থাকাকালীন XR ডেটা অ্যাক্সেস করুন"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"অ্যাপটিকে ফোরগ্রাউন্ডে না থাকাকালীন XR ডেটা অ্যাক্সেস করার অনুমতি দেয়।"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"বায়োমেট্রিক্স ব্যবহার করুন"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"বায়োমেট্রিক্স অথবা স্ক্রিন লক ব্যবহার করুন"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"আপনার পরিচয় যাচাই করুন"</string>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index ebef234f02bc..6a54f651aaa6 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"pristupa podacima senzora o vašim vitalnim funkcijama"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Obavještenja"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"prikaz obavještenja"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"podaci o XR praćenju"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"pristup XR podacima o vama i vašoj okolini"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"osjetljivi podaci o XR praćenju"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"pristup osjetljivim podacima o praćenju, npr. praćenju pogleda"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"preuzimati sadržaj prozora"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Pregleda sadržaj prozora koji trenutno koristite."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"uključiti Istraživanje dodirom"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Omogućava aplikaciji da mijenja vašu kolekciju fotografija."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"čitanje lokacija iz kolekcije medija"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Omogućava aplikaciji da čita lokacije iz vaše kolekcije medija."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"približno praćenje vašeg pogleda"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Dozvoljava aplikaciji da približno prati vaš pogled."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"praćenje u šta gledate"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Dozvoljava aplikaciji da pristupa preciznim podacima o pogledu."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"praćenje vašeg lica"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Dozvoljava aplikaciji da pristupa podacima o praćenju lica."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"praćenje vaših ruku"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Dozvoljava aplikaciji da pristupa podacima o praćenju ruku."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"praćenje položaja vaše glave"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Dozvoljava aplikaciji da pristupa podacima o praćenju položaja glave."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"utvrđivanje vaše neposredne okoline"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Dozvoljava aplikaciji da pristupa podacima o praćenju vaše neposredne okoline."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"veoma detaljno utvrđivanje vaše neposredne okoline"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Dozvoljava aplikaciji da pristupa podacima o veoma detaljnom praćenju vaše neposredne okoline."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"pristup XR podacima dok aplikacija nije u prvom planu"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Dozvoljava aplikaciji da pristupa XR podacima dok nije u prvom planu."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Koristi biometriju"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Koristi biometriju ili zaključavanje ekrana"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Potvrdite identitet"</string>
@@ -2187,7 +2167,7 @@
<string name="etws_primary_default_message_tsunami" msgid="5828171463387976279">"Odmah se evakuirajte iz priobalnih područja i područja oko rijeka na sigurnije mjesto kao što su viši predjeli."</string>
<string name="etws_primary_default_message_earthquake_and_tsunami" msgid="4888224011071875068">"Ostanite smireni i potražite sklonište u blizini."</string>
<string name="etws_primary_default_message_test" msgid="4583367373909549421">"Test poruka za hitne slučajeve"</string>
- <string name="notification_reply_button_accessibility" msgid="5235776156579456126">"Odgovori"</string>
+ <string name="notification_reply_button_accessibility" msgid="5235776156579456126">"Odgovorite"</string>
<string name="etws_primary_default_message_others" msgid="7958161706019130739"></string>
<string name="mmcc_authentication_reject" msgid="4891965994643876369">"SIM kartica nije dozvoljena za govor"</string>
<string name="mmcc_imsi_unknown_in_hlr" msgid="227760698553988751">"SIM kartica nije dodijeljena za govor"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 6ddfeaf18d00..63fbb072625a 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"accedir a les dades del sensor sobre les constants vitals"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notificacions"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"mostra notificacions"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"dades de seguiment d\'XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"accedir a les dades d\'XR sobre tu i l\'entorn que t\'envolta"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"dades de seguiment d\'XR sensibles"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"accedir a les dades de seguiment sensibles, com ara la mirada"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Recuperar el contingut de la finestra"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspeccionar el contingut d\'una finestra amb què estàs interaccionant."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Activar Exploració tàctil"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Permet que l\'aplicació modifiqui la teva col·lecció de fotos."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"llegir les ubicacions de les teves col·leccions multimèdia"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Permet que l\'aplicació llegeixi les ubicacions de les teves col·leccions multimèdia."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"seguir la teva mirada aproximada"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Permet que l\'aplicació segueixi la teva mirada aproximada."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"seguir on estàs mirant"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Permet que l\'aplicació accedeixi a les dades precises de la mirada."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"seguir la teva cara"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Permet que l\'aplicació accedeixi a les dades de seguiment de la cara."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"seguir les teves mans"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Permet que l\'aplicació accedeixi a les dades de seguiment de mans."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"seguir el teu cap"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Permet que l\'aplicació accedeixi a les dades de seguiment del cap."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"entendre l\'entorn que t\'envolta directament"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Permet que l\'aplicació accedeixi a les dades de seguiment de l\'entorn que t\'envolta directament."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"entendre l\'entorn que t\'envolta directament amb molt de detall"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Permet que l\'aplicació accedeixi a les dades de seguiment de l\'entorn que t\'envolta directament amb molt de detall."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"accedir a les dades d\'XR quan no s\'utilitzi en primer pla"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Permet que l\'aplicació accedeixi a les dades d\'XR quan no s\'utilitzi en primer pla."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Utilitza la biometria"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Fes servir la biometria o el bloqueig de pantalla"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifica la teva identitat"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 5e596fc0d4c5..5d0edf308b33 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -355,14 +355,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"přístup k datům ze senzorů vašich životních funkcí"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Oznámení"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"zobrazovat oznámení"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"data pro rozšířenou realitu"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"přístup k datům o vás a okolním prostředí pro rozšířenou realitu"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"citlivá data pro rozšířenou realitu"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"přístup k citlivým datům o sledování, jako je například směr pohledu"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Načítat obsah oken"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Může prozkoumávat obsah oken, se kterými pracujete."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Zapnout funkci Prozkoumání dotykem"</string>
@@ -658,38 +654,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Umožňuje aplikaci upravit vaši sbírku fotek."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"čtení míst ze sbírky médií"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Umožňuje aplikaci číst místa z vaší sbírky médií."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"sledování přibližného směru pohledu"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Umožňuje aplikaci sledovat, kam se přibližně díváte."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"sledování, kam se díváte"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Umožňuje aplikaci přistupovat k přesným údajům o tom, kam se díváte."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"sledování obličeje"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Umožňuje aplikaci přistupovat k datům o sledování obličeje."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"sledování rukou"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Umožňuje aplikaci přistupovat k datům o sledování rukou."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"sledování hlavy"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Umožňuje aplikaci přistupovat k datům o sledování hlavy."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"porozumění bezprostřednímu okolí"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Umožňuje aplikaci přistupovat k datům o prostředí kolem vás."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"detailní porozumění bezprostřednímu okolí"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Umožňuje aplikaci přistupovat k velmi detailním datům o prostředí kolem vás."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"přístup k datům pro rozšířenou realitu na pozadí"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Umožňuje aplikaci přistupovat k datům pro rozšířenou reality, když není v popředí."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Použít biometrii"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Použít biometrii nebo zámek obrazovky"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Potvrďte, že jste to vy"</string>
@@ -2144,7 +2124,7 @@
<string name="app_category_video" msgid="2590183854839565814">"Filmy a video"</string>
<string name="app_category_image" msgid="7307840291864213007">"Fotky a obrázky"</string>
<string name="app_category_social" msgid="2278269325488344054">"Sociální sítě a komunikace"</string>
- <string name="app_category_news" msgid="1172762719574964544">"Zprávy a časopisy"</string>
+ <string name="app_category_news" msgid="1172762719574964544">"Noviny a časopisy"</string>
<string name="app_category_maps" msgid="6395725487922533156">"Mapy a navigace"</string>
<string name="app_category_productivity" msgid="1844422703029557883">"Produktivita"</string>
<string name="app_category_accessibility" msgid="6643521607848547683">"Přístupnost"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 8cc1cfe2a277..a8530764cd61 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"få adgang til sensordata om dine vitale værdier"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notifikationer"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"vise notifikationer"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR-sporingsdata"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"tilgå XR-data om dig og dine nærmeste omgivelser"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"følsomme XR-sporingsdata"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"tilgå følsomme sporingsdata, f.eks. øjenbevægelser"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Hente indholdet i vinduet"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Undersøge indholdet i et vindue, du interagerer med."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Aktivere Udforsk ved berøring"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Tillader, at appen kan ændre din billedsamling."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"læse lokationer fra din mediesamling"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Tillader, at appen kan læse lokationer fra din mediesamling."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"registrer dine omtrentlige øjenbevægelser"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Tillader, at appen registrerer dine omtrentlige øjenbevægelser."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"registrer, hvor du kigger hen"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Tillader, at appen kan få adgang til præcise data om øjenbevægelser."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"registrer dit ansigt"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Tillader, at appen kan få adgang til data om ansigtssporing."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"registrer dine hænder"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Tillader, at appen kan få adgang til data om registrering af håndbevægelser."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"registrer dit hoved"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Tillader, at appen kan få adgang til data om registrering af hovedbevægelser."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"forstå dine nærmeste omgivelser"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Tillader, at appen kan få adgang til sporingsdata om omgivelser i nærheden."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"forstå dine nærmeste omgivelser i detaljer"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Tillader, at appen kan få adgang til sporingsdata om omgivelser i nærheden med meget detaljerede oplysninger."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"tilgå XR-data, når appen ikke kører i forgrunden"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Tillader, at appen kan få adgang til XR-data, når den ikke kører i forgrunden."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Brug biometri"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Brug biometri eller skærmlås"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Verificer, at det er dig"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 7d5672b6fb16..81a331d2fd31 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"auf Sensordaten zu deinen Vitaldaten zugreifen"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Benachrichti­gun­gen"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"Benachrichtigungen anzeigen"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR-Trackingdaten"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"auf XR-Daten zu dir und deiner Umgebung zugreifen"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"sensible XR-Trackingdaten"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"auf sensible Trackingdaten wie Daten zu Blickbewegungen zugreifen"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Fensterinhalte abrufen"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Die Inhalte eines Fensters, mit dem du interagierst, werden abgerufen."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"\"Tippen &amp; Entdecken\" aktivieren"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Ermöglicht der App, deine Fotosammlung zu ändern."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"Standorte aus meiner Mediensammlung abrufen"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Ermöglicht der App, Standorte aus deiner Mediensammlung abzurufen."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"ungefähre Blickbewegungen erfassen"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Ermöglicht der App, deine ungefähren Blickbewegungen zu erfassen."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"erfassen, wo du gerade hinschaust"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Ermöglicht der App, auf präzise Daten zu Blickbewegungen zuzugreifen."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"Gesichtsbewegungen erfassen"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Ermöglicht der App, auf Daten zur Erfassung von Gesichtsbewegungen zuzugreifen."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"Handbewegungen erfassen"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Ermöglicht der App, auf Daten zur Erfassung von Handbewegungen zuzugreifen."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"Kopfbewegungen erfassen"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Ermöglicht der App, auf Daten zur Erfassung von Kopfbewegungen zuzugreifen."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"auf Daten zu deiner unmittelbaren Umgebung zugreifen"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Ermöglicht der App, auf Trackingdaten zu deiner unmittelbaren Umgebung zuzugreifen."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"auf sehr detaillierte Daten zu deiner unmittelbaren Umgebung zugreifen"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Ermöglicht der App, auf sehr detaillierte Trackingdaten zu deiner unmittelbaren Umgebung zuzugreifen."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"auf XR-Daten zugreifen, wenn die App im Hintergrund ausgeführt wird"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Ermöglicht der App, auf XR-Daten zuzugreifen, wenn sie im Hintergrund ausgeführt wird."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Biometrisches Verfahren nutzen"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biometrisches Verfahren oder Displaysperre verwenden"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Deine Identität bestätigen"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 84ca5b7808b7..f4fb932b6cbf 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"πρόσβαση στα δεδομένα αισθητήρα σχετικά με τις ζωτικές ενδείξεις σας"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Ειδοποιήσεις"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"εμφάνιση ειδοποιήσεων"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"Δεδομένα παρακολούθησης XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"πρόσβαση σε δεδομένα XR για εσάς και το περιβάλλον γύρω σας"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"ευαίσθητα δεδομένα παρακολούθησης XR"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"πρόσβαση σε ευαίσθητα δεδομένα παρακολούθησης, όπως είναι η εστίαση των ματιών"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Ανάκτηση του περιεχομένου του παραθύρου"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Έλεγχος του περιεχομένου ενός παραθύρου με το οποίο αλληλεπιδράτε."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Ενεργοποίηση της \"Εξερεύνησης με άγγιγμα\""</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Επιτρέπει στην εφαρμογή να τροποποιήσει τη συλλογή φωτογραφιών σας."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"ανάγνωση τοποθεσιών από τη συλλογή πολυμέσων σας"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Επιτρέπει στην εφαρμογή να διαβάσει τοποθεσίες από τη συλλογή πολυμέσων σας."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"παρακολούθηση της εστίασης των ματιών κατά προσέγγιση"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Επιτρέπει στην εφαρμογή να παρακολουθεί την εστίαση των ματιών κατά προσέγγιση."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"παρακολούθηση του σημείου που κοιτάτε"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Επιτρέπει στην εφαρμογή να έχει πρόσβαση σε ακριβή δεδομένα της εστίασης των ματιών."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"παρακολούθηση του προσώπου"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Επιτρέπει στην εφαρμογή να έχει πρόσβαση σε δεδομένα παρακολούθησης προσώπου."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"παρακολούθηση των κινήσεων των χεριών"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Επιτρέπει στην εφαρμογή να έχει πρόσβαση σε δεδομένα παρακολούθησης χεριού."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"παρακολούθηση της κίνησης του κεφαλιού"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Επιτρέπει στην εφαρμογή να έχει πρόσβαση σε δεδομένα παρακολούθησης κίνησης κεφαλιού."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"κατανόηση του άμεσου περιβάλλοντος"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Επιτρέπει στην εφαρμογή να έχει πρόσβαση σε δεδομένα παρακολούθησης του περιβάλλοντος γύρω σας."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"κατανόηση του άμεσου περιβάλλοντος με μεγάλη λεπτομέρεια"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Επιτρέπει στην εφαρμογή να έχει πρόσβαση σε δεδομένα παρακολούθησης του περιβάλλοντος γύρω σας με εξαιρετική λεπτομέρεια."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"πρόσβαση σε δεδομένα XR, όταν δεν βρίσκεται στο προσκήνιο"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Επιτρέπει στην εφαρμογή να έχει πρόσβαση σε δεδομένα XR, όταν δεν βρίσκεται στο προσκήνιο."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Χρήση βιομετρικών"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Χρήση βιομετρικών ή κλειδώματος οθόνης"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Επαλήθευση ταυτότητας"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index ef7238ce249e..3b4f52ccfdda 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"access sensor data about your vital signs"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notifications"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"show notifications"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR tracking data"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"access XR data about you and the environment around you"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"sensitive XR tracking data"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"access sensitive tracking data, such as eye gaze"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Retrieve window content"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspect the content of a window you\'re interacting with."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Turn on Explore by Touch"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Allows the app to modify your photo collection."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"read locations from your media collection"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Allows the app to read locations from your media collection."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"track your approximate eye gaze"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Allows the app to track your approximate eye gaze."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"track where you are looking"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Allows the app to access precise eye-gaze data."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"track your face"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Allows the app to access face-tracking data."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"track your hands"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Allows the app to access hand-tracking data."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"track your head"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Allows the app to access head-tracking data."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"understand your immediate environment"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Allows the app to access tracking data about the environment directly around you."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"understand your immediate environment at high detail"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Allows the app to access tracking data about the environment directly around you with very high detail."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"access XR data while not in the foreground"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Allows the app to access XR data while not in the foreground."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Use biometrics"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Use biometrics or screen lock"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Verify that it’s you"</string>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 7e837390ad98..79020c58479a 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"access sensor data about your vital signs"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notifications"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"show notifications"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR tracking data"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"access XR data about you and the environment around you"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"sensitive XR tracking data"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"access sensitive tracking data, such as eye gaze"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Retrieve window content"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspect the content of a window you\'re interacting with."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Turn on Explore by Touch"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Allows the app to modify your photo collection."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"read locations from your media collection"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Allows the app to read locations from your media collection."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"track your approximate eye gaze"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Allows the app to track your approximate eye gaze."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"track where you are looking"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Allows the app to access precise eye gaze data."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"track your face"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Allows the app to access face tracking data."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"track your hands"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Allows the app to access hand tracking data."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"track your head"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Allows the app to access head tracking data."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"understand your immediate environment"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Allows the app to access tracking data about the environment directly around you."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"understand your immediate environment at high detail"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Allows the app to access tracking data about the environment directly around you with very high detail."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"access XR data while not in the foreground"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Allows the app to access XR data while not in the foreground."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Use biometrics"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Use biometrics or screen lock"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Verify it’s you"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 5b99b57a0d40..2c5cf4da48d2 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"access sensor data about your vital signs"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notifications"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"show notifications"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR tracking data"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"access XR data about you and the environment around you"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"sensitive XR tracking data"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"access sensitive tracking data, such as eye gaze"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Retrieve window content"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspect the content of a window that you\'re interacting with."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Turn on Explore by Touch"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Allows the app to modify your photo collection."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"read locations from your media collection"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Allows the app to read locations from your media collection."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"track your approximate eye gaze"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Allows the app to track your approximate eye gaze."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"track where you are looking"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Allows the app to access precise eye-gaze data."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"track your face"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Allows the app to access face-tracking data."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"track your hands"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Allows the app to access hand-tracking data."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"track your head"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Allows the app to access head-tracking data."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"understand your immediate environment"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Allows the app to access tracking data about the environment directly around you."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"understand your immediate environment at high detail"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Allows the app to access tracking data about the environment directly around you with very high detail."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"access XR data while not in the foreground"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Allows the app to access XR data while not in the foreground."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Use biometrics"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Use biometrics or screen lock"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Verify that it’s you"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 5ba765bc68de..65ebd0d38c0c 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"access sensor data about your vital signs"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notifications"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"show notifications"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR tracking data"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"access XR data about you and the environment around you"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"sensitive XR tracking data"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"access sensitive tracking data, such as eye gaze"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Retrieve window content"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspect the content of a window you\'re interacting with."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Turn on Explore by Touch"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Allows the app to modify your photo collection."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"read locations from your media collection"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Allows the app to read locations from your media collection."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"track your approximate eye gaze"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Allows the app to track your approximate eye gaze."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"track where you are looking"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Allows the app to access precise eye-gaze data."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"track your face"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Allows the app to access face-tracking data."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"track your hands"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Allows the app to access hand-tracking data."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"track your head"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Allows the app to access head-tracking data."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"understand your immediate environment"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Allows the app to access tracking data about the environment directly around you."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"understand your immediate environment at high detail"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Allows the app to access tracking data about the environment directly around you with very high detail."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"access XR data while not in the foreground"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Allows the app to access XR data while not in the foreground."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Use biometrics"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Use biometrics or screen lock"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Verify that it’s you"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index d3258dde6721..c9bb39cc1fe8 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -282,7 +282,7 @@
<string name="global_action_toggle_silent_mode" msgid="8464352592860372188">"Modo silencioso"</string>
<string name="global_action_silent_mode_on_status" msgid="2371892537738632013">"El sonido está Desactivado"</string>
<string name="global_action_silent_mode_off_status" msgid="6608006545950920042">"El sonido está Activado"</string>
- <string name="global_actions_toggle_airplane_mode" msgid="6911684460146916206">"Modo de avión"</string>
+ <string name="global_actions_toggle_airplane_mode" msgid="6911684460146916206">"Modo avión"</string>
<string name="global_actions_airplane_mode_on_status" msgid="5508025516695361936">"El modo avión está Activado"</string>
<string name="global_actions_airplane_mode_off_status" msgid="8522219771500505475">"El modo avión está Desactivado"</string>
<string name="global_action_settings" msgid="4671878836947494217">"Configuración"</string>
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"acceder a los datos de sensores acerca de tus signos vitales"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notificaciones"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"mostrar notificaciones"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"datos de seguimiento de realidad extendida"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"acceder a datos de realidad extendida sobre ti y el entorno que te rodea"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"datos sensibles de seguimiento de realidad extendida"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"acceder a datos de seguimiento sensibles, como la mirada"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Recuperar el contenido de las ventanas"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspeccionará el contenido de la ventana con la que estés interactuando."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Activar la Exploración táctil"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Permite que la app modifique tu colección de fotos."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"leer ubicaciones de tu colección de contenido multimedia"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Permite que la app lea las ubicaciones de tu colección de contenido multimedia."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"seguimiento aproximado de la mirada"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Permite que la app haga un seguimiento aproximado de tu mirada."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"seguimiento de la dirección de la mirada"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Permite que la app acceda a datos precisos de la mirada."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"seguimiento de tu rostro"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Permite que la app acceda a los datos de seguimiento de rostros."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"seguimiento de tus manos"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Permite que la app acceda a los datos de seguimiento de manos."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"seguimiento de tu cabeza"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Permite que la app acceda a los datos de seguimiento de la cabeza."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"comprensión de tu entorno inmediato"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Permite que la app acceda a los datos de seguimiento del entorno que te rodea directamente."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"comprensión de tu entorno inmediato con gran detalle"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Permite que la app acceda a datos de seguimiento del entorno que te rodea directamente con mucho detalle."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"acceso a los datos de realidad extendida cuando no está en primer plano"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Permite que la app acceda a los datos de realidad extendida cuando no está en primer plano."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Usar datos biométricos"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Usar datos biométricos o bloqueo de pantalla"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Comprueba que eres tú"</string>
@@ -2260,7 +2240,7 @@
<string name="mime_type_spreadsheet_ext" msgid="8720173181137254414">"Hoja de cálculo <xliff:g id="EXTENSION">%1$s</xliff:g>"</string>
<string name="mime_type_presentation" msgid="1145384236788242075">"Presentación"</string>
<string name="mime_type_presentation_ext" msgid="8761049335564371468">"Presentación <xliff:g id="EXTENSION">%1$s</xliff:g>"</string>
- <string name="bluetooth_airplane_mode_toast" msgid="2066399056595768554">"La conexión Bluetooth permanecerá activa durante el modo de avión"</string>
+ <string name="bluetooth_airplane_mode_toast" msgid="2066399056595768554">"La conexión Bluetooth permanecerá activa durante el modo avión"</string>
<string name="car_loading_profile" msgid="8219978381196748070">"Cargando"</string>
<string name="file_count" msgid="3220018595056126969">"{count,plural, =1{{file_name} y # archivo más}many{{file_name} y # archivos más}other{{file_name} y # archivos más}}"</string>
<string name="chooser_no_direct_share_targets" msgid="1511722103987329028">"No hay personas recomendadas con quienes compartir"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index c021a8afde4f..63fc2769adc7 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"acceder a datos de sensores de tus constantes vitales"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notificaciones"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"mostrar notificaciones"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"datos de seguimiento de RE"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"acceder a datos de RE sobre ti y el entorno que te rodea"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"datos de seguimiento de RE sensibles"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"acceder a datos de seguimiento sensibles, como la mirada"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Comprobar el contenido de la ventana"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspecciona el contenido de una ventana con la que estés interactuando."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Activar la exploración táctil"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Permite que la aplicación modifique tu colección de fotos."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"leer las ubicaciones de tu colección de contenido multimedia"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Permite que la aplicación lea las ubicaciones de tu colección de contenido multimedia."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"hacer un seguimiento de tu mirada de forma aproximada"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Permite que la aplicación haga un seguimiento de tu mirada de forma aproximada."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"hacer un seguimiento de hacia dónde miras"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Permite que la aplicación acceda a los datos precisos de la mirada."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"hacer un seguimiento de tu cara"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Permite que la aplicación acceda a los datos de seguimiento facial."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"hacer un seguimiento de tus manos"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Permite que la aplicación acceda a los datos de seguimiento de manos."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"hacer un seguimiento de tu cabeza"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Permite que la aplicación acceda a los datos de seguimiento de cabeza."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"entender tu entorno inmediato"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Permite que la aplicación acceda a los datos de seguimiento sobre el entorno que te rodea de forma directa."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"entender tu entorno inmediato con un nivel alto de detalle"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Permite que la aplicación acceda a datos de seguimiento sobre el entorno que te rodea de forma directa con un nivel de detalle muy alto."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"acceder a datos de RE cuando no está en primer plano"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Permite que la aplicación acceda a los datos de RE cuando no está en primer plano."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Usar biometría"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Usar biometría o bloqueo de pantalla"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifica que eres tú"</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index ae215833cdd6..c9b29c3a8192 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"juurdepääs anduri andmetele teie eluliste näitajate kohta"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Märguanded"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"märguannete kuvamine"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR-i jälgimise andmed"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"juurdepääs XR-i andmetele teie ja teid ümbritseva keskkonna kohta"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"delikaatsed XR-i jälgimise andmed"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"juurdepääs delikaatsetele jälgimisandmetele, näiteks pilgule"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Akna sisu toomine"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Kasutatava akna sisu kontrollimine."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Puudutusega sirvimise sisselülitamine"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Võimaldab rakendusel muuta teie fotokogu."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"Lugeda teie meediakogus olevaid asukohti"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Võimaldab rakendusel lugeda teie meediakogus olevaid asukohti."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"ligikaudse pilgu jälgimine"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Võimaldab rakendusel teie pilku ligikaudselt jälgida."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"pilgu suuna jälgimine"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Võimaldab rakendusel juurde pääseda täpsetele pilguandmetele."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"näo jälgimine"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Võimaldab rakendusel juurde pääseda näo jälgimise andmetele."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"käteliigutuste jälgimine"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Võimaldab rakendusel juurde pääseda käeliigutuste jälgimise andmetele."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"pea jälgimine"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Võimaldab rakendusel juurde pääseda peajälgimise andmetele."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"vahetu keskkonna mõistmine"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Võimaldab rakendusel juurde pääseda teie vahetu keskkonna jälgimisandmetele."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"vahetu keskkonna väga üksikasjalik mõistmine"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Võimaldab rakendusel pääseda väga üksikasjalikult juurde teie vahetu keskkonna jälgimisandmetele."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"juurdepääs XR-i andmetele, kui see pole esiplaanil"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Võimaldab rakendusel pääseda juurde XR-i andmetele, kui see pole esiplaanil."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Biomeetria kasutamine"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biomeetria või ekraaniluku kasutamine"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Kinnitage oma isik"</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index a78754ff28c5..88bb3c95e1aa 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"atzitu bizi-konstanteei buruzko sentsorearen datuak"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Jakinarazpenak"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"jakinarazpenak erakutsi"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"EHko jarraipen-datuak"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"zuri eta inguruko inguruneari buruzko EHko datuak erabili"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"kontuzko EHko jarraipen-datuak"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"kontuzko jarraipen-datuak erabili, hala nola begiradari buruzkoak"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Leihoko edukia eskuratu."</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Arakatu irekita daukazun leihoko edukia."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"\"Arakatu ukituta\" aktibatu."</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Argazki bilduma aldatzeko baimena ematen dio aplikazioari."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"multimedia-edukien bildumako kokapena irakurri"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Multimedia-edukien bildumako kokapena irakurtzeko baimena ematen dio aplikazioari."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"begiradaren gutxi gorabeherako datuen jarraipena egin"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Zure begiradaren gutxi gorabeherako datuen jarraipena egiteko baimena ematen dio aplikazioari."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"begiradaren jarraipena egin"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Zure begiradaren datu zehatzen jarraipena egiteko baimena ematen dio aplikazioari."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"aurpegiaren jarraipena egin"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Aurpegiaren jarraipen-datuak erabiltzeko baimena ematen dio aplikazioari."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"eskuen jarraipena egin"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Eskuen jarraipen-datuak erabiltzeko baimena ematen dio aplikazioari."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"buruaren jarraipena egin"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Buruaren jarraipen-datuak erabiltzeko baimena ematen dio aplikazioari."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"inguruan duzun ingurunea aztertu"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Inguruan duzun ingurunearen jarraipen datuak erabiltzeko baimena ematen dio aplikazioari."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"inguruan duzun ingurunea xehetasunez aztertu"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Inguruan duzun ingurunearen jarraipen datu oso xeheak erabiltzeko baimena ematen dio aplikazioari."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"aurreko planoan egon gabe ere EHko datuak erabili"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Aurreko planoan ez badago ere EHko datuak erabiltzeko baimena ematen dio aplikazioari."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Erabili sistema biometrikoak"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Erabili sistema biometrikoak edo pantailaren blokeoa"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Egiaztatu zeu zarela"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index ddde0b28b685..0c3b7551e4f6 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"دسترسی به داده‌های حسگر در رابطه با علائم حیاتی شما"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"اعلان‌ها"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"نمایش اعلان"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"داده‌های ردگیری واقعیت گسترده"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"دسترسی به داده‌های واقعیت گسترده درباره شما و محیط اطرافتان"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"داده‌های حساس ردگیری واقعیت گسترده"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"دسترسی به داده‌های حساس ردگیری، مانند جهت نگاه"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"محتوای پنجره را بازیابی کند"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"محتوای پنجره‌ای را که درحال تعامل با آن هستید بررسی می‌کند."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"فعال‌سازی کاوش لمسی"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"به برنامه اجازه می‌دهد مجموعه عکستان را تغییر دهد."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"خواندن مکان‌ها از مجموعه رسانه شما"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"به برنامه اجازه می‌دهد مکان‌ها را از مجموعه رسانه‌تان بخواند."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"ردگیری جهت تقریبی نگاه شما"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"به برنامه اجازه می‌دهد جهت تقریبی نگاه شما را ردگیری کند."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"ردگیری جایی که به آن نگاه می‌کنید"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"به برنامه اجازه می‌دهد به داده‌های دقیق جهت نگاه دسترسی داشته باشد."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"ردگیری چهره شما"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"به برنامه اجازه می‌دهد به داده‌های ردگیری چهره دسترسی داشته باشد."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"ردگیری دست‌های شما"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"به برنامه اجازه می‌دهد به داده‌های ردگیری دست دسترسی داشته باشد."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"ردگیری سر شما"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"به برنامه اجازه می‌دهد به داده‌های ردگیری سر دسترسی داشته باشد."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"پی بردن به محیط مجاور شما"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"به برنامه اجازه می‌دهد به داده‌های ردگیری مربوط به محیط مجاور شما دسترسی داشته باشد."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"پی بردن به محیط مجاور شما با جزئیات بالا"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"به برنامه اجازه می‌دهد به داده‌های ردگیری مربوط به محیط مجاور شما با جزئیات بسیار بالا دسترسی داشته باشد."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"دسترسی به داده‌های واقعیت گسترده هنگام اجرا نشدن در پیش‌زمینه"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"به برنامه اجازه می‌دهد هنگام اجرا نشدن در پیش‌زمینه به داده‌های واقعیت گسترده دسترسی داشته باشد."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"استفاده از داده‌های زیست‌سنجشی"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"استفاده از داده‌های زیست‌سنجشی یا قفل صفحه"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"تأیید کنید این شمایید"</string>
@@ -1824,7 +1804,7 @@
<string name="reduce_bright_colors_feature_name" msgid="3222994553174604132">"بسیار کم‌نور"</string>
<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_connected" msgid="2149385149669918764">"وصل شد"</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>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index b17ab2388413..b12fd5cffbed 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"pääsy anturidataan elintoiminnoistasi"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Ilmoitukset"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"näyttää ilmoituksia"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR-seurantadata"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"pääsy XR-dataan, joka liittyy sinuun ja ympäristöösi"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"arkaluontoinen XR-seurantadata"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"pääsy arkaluontoiseen seurantadataan, esim. katseenseurantadataan"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Noutaa ikkunan sisältöä"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Tarkistaa käyttämäsi ikkunan sisältö."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Ottaa kosketuksella tutkimisen käyttöön"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Antaa sovelluksen muokata kuvakokoelmaasi."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"lukea mediakokoelmasi sijainteja"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Antaa sovelluksen lukea mediakokoelmasi sijainteja."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"seuraa katsetta likimääräisesti"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Sallii sovelluksen seurata katsettasi likimääräisesti."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"seuraa sitä, mihin katsot"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Sallii sovellukselle pääsyn tarkkaan katsedataan."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"seuraa kasvojasi"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Sallii sovellukselle pääsyn kasvojen seurantadataan."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"seuraa käsiäsi"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Sallii sovellukselle pääsyn kädenseurantadataan."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"seuraa päätäsi"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Sallii sovellukselle pääsyn päänseurantadataan."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"ymmärtää välitöntä ympäristöäsi"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Sallii sovellukselle pääsyn ympäristöösi liittyvään seurantadataan."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"ymmärtää välittömän ympäristösi yksityiskohtaisesti"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Sallii sovellukselle pääsyn erittäin yksityiskohtaiseen, välittömään ympäristöösi liittyvään seurantadataan."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"pääsy XR-dataan, kun sovellus ei ole etualalla."</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Sallii sovellukselle pääsyn XR-dataan, kun sovellus ei ole etualalla."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Käytä biometriikkaa"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Käytä biometriikkaa tai näytön lukitusta"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Vahvista henkilöllisyytesi"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 7145e5719298..b9c8b64b2fe5 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"accéder aux données des capteurs sur vos signes vitaux"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notifications"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"afficher les notifications"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"données de suivi de RE"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"accès aux données de RE sur vous et l\'environnement qui vous entoure"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"données de suivi de RE sensibles"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"accède aux données de suivi sensibles, comme le regard"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Récupérer le contenu d\'une fenêtre"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspecter le contenu d\'une fenêtre avec laquelle vous interagissez."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Activer la fonctionnalité Explorer au toucher"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Autorise l\'appli à modifier votre collection de photos."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"lire les positions issues de votre collection multimédia"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Autorise l\'appli à lire les positions indiquées dans votre collection multimédia."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"suivre votre regard approximatif"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Permet à l\'appli de suivre votre regard approximatif."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"suivre où vous regardez"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Permet à l\'appli d\'accéder à des données précises sur le regard."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"suivre votre visage"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Permet à l\'appli d\'accéder aux données de suivi du visage."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"suivre vos mains"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Permet à l\'appli d\'accéder aux données de suivi des mains."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"suivre votre tête"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Permet à l\'appli d\'accéder aux données de suivi de la tête."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"comprendre votre environnement immédiat"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Permet à l\'appli d\'accéder aux données de suivi sur l\'environnement directement autour de vous."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"comprendre votre environnement immédiat dans les moindres détails"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Permet à l\'appli d\'accéder aux données de suivi sur l\'environnement directement autour de vous avec des détails très précis."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"accéder aux données de RE sans être en avant-plan"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Permet à l\'appli d\'accéder aux données de RE lorsqu\'elle n\'est pas en avant-plan."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Utiliser les données biométriques"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Utiliser les données biométriques ou le verrouillage de l\'écran"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Confirmez que c\'est vous"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index a71348ae832f..9952d0437187 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"accéder aux données des capteurs relatives à vos signes vitaux"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notifications"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"afficher des notifications"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"Données de suivi XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"accéder aux données XR vous concernant et concernant l\'environnement qui vous entoure"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"données de suivi XR sensibles"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"accéder à des données de suivi sensibles, comme le suivi du regard"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Récupérer le contenu d\'une fenêtre"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspecte le contenu d\'une fenêtre avec laquelle vous interagissez."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Activer la fonctionnalité Explorer au toucher"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Autorise l\'application à modifier votre bibliothèque photo."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"consulter des positions issues de votre bibliothèque multimédia"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Autorise l\'application à consulter des positions issues de votre bibliothèque multimédia."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"suivre approximativement votre regard"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Autorise l\'appli à suivre approximativement votre regard."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"suivre votre regard"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Autorise l\'appli à accéder à des données sur le suivi précis du regard."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"suivre votre visage"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Autorise l\'appli à accéder aux données de suivi du visage."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"suivre vos mains"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Autorise l\'appli à accéder aux données de suivi des mains."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"suivre votre tête"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Autorise l\'appli à accéder aux données de suivi de la tête."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"comprendre votre environnement immédiat"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Autorise l\'appli à accéder aux données de suivi sur l\'environnement qui vous entoure directement."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"comprendre votre environnement immédiat avec précision"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Autorise l\'appli à accéder à des données de suivi très détaillées sur l\'environnement qui vous entoure directement."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"accéder aux données XR sans être au premier plan"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Autorise l\'appli à accéder aux données XR lorsqu\'elle n\'est pas au premier plan."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Utiliser la biométrie"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Utiliser la biométrie ou le verrouillage de l\'écran"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Confirmez votre identité"</string>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index e8090b8e16b4..a2d29c9c16d0 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"acceder aos datos dos sensores sobre as túas constantes vitais"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notificacións"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"mostrar notificacións"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"datos de seguimento de RE"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"acceder aos datos de realidade estendida sobre ti e o ambiente que te rodea"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"datos de seguimento de RE confidenciais"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"acceder a datos de seguimento confidenciais, como a mirada"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Recuperar contido da ventá"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspecciona o contido dunha ventá coa que estás interactuando."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Activar a exploración táctil"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Permite que a aplicación modifique a túa colección de fotos."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"ler localizacións da túa colección multimedia"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Permite que a aplicación lea as localizacións da túa colección multimedia."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"facer un seguimento aproximado da mirada"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Permite que a aplicación faga un seguimento aproximado da mirada."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"facer un seguimento da dirección da mirada"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Permite que a aplicación acceda aos datos precisos da mirada."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"facer un seguimento da cara"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Permite que a aplicación acceda aos datos de seguimento da cara."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"facer un seguimento das mans"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Permite que a aplicación acceda aos datos de seguimento das mans."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"facer un seguimento da cabeza"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Permite que a aplicación acceda aos datos de seguimento da cabeza."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"entender o teu ambiente próximo"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Permite que a aplicación acceda aos datos de seguimento do ambiente que te rodea directamente."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"entender o teu ambiente próximo con moito detalle"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Permite que a aplicación acceda aos datos de seguimento do ambiente que te rodea directamente con moito detalle."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"acceder os datos de realidade estendida cando non estea en primeiro plano"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Permite que a aplicación acceda aos datos de realidade estendida cando non estea en primeiro plano."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Utilizar desbloqueo biométrico"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Utilizar desbloqueo biométrico ou credencial do dispositivo"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifica a túa identidade"</string>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index 3ddc9da52d23..bb0748466bbf 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"તમારા મહત્વપૂર્ણ ચિહ્નો વિશે સેન્સર ડેટા ઍક્સેસ કરો"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"નોટિફિકેશન"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"નોટિફિકેશન બતાવો"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR ટ્રૅકિંગ ડેટા"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"તમારા અને તમારી આસપાસના વાતાવરણ વિશેનો XR ડેટા ઍક્સેસ કરો"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"સંવેદનશીલ XR ટ્રૅકિંગ ડેટા"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"નજર જેવો સંવેદનશીલ ટ્રૅકિંગ ડેટા ઍક્સેસ કરો"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"વિંડો કન્ટેન્ટ પુનઃપ્રાપ્ત કરો"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"તમે જેની સાથે ક્રિયા-પ્રતિક્રિયા કરી રહ્યાં છો તે વિંડોનું કન્ટેન્ટ તપાસો."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"સ્પર્શ કરીને શોધખોળ કરવું ચાલુ કરો"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"એપને તમારો ફોટો સંગ્રહ સંશોધિત કરવાની મંજૂરી આપે છે."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"આપના મીડિયા સંગ્રહમાંથી સ્થાનો વાંચવા"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"એપને તમારા મીડિયા સંગ્રહમાંથી સ્થાનો વાંચવાની મંજૂરી આપે છે."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"તમારી અંદાજિત નજરને ટ્રૅક કરો"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"ઍપને તમારી અંદાજિત નજર ટ્રૅક કરવાની મંજૂરી આપે છે."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"તમે ક્યાં જુઓ છો, તે ટ્રૅક કરો"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"ઍપને નજરનો ચોક્કસ ડેટા ઍક્સેસ કરવાની મંજૂરી આપે છે."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"તમારા ચહેરાને ટ્રૅક કરો"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"ઍપને ચહેરો ટ્રૅક કરવાની સુવિધાનો ડેટા ઍક્સેસ કરવાની મંજૂરી આપે છે."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"તમારા હાથને ટ્રૅક કરો"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"ઍપને હાથ ટ્રૅક કરવાની સુવિધાનો ડેટા ઍક્સેસ કરવાની મંજૂરી આપે છે."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"તમારા માથાને ટ્રૅક કરો"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"ઍપને હૅડ ટ્રૅકિંગની સુવિધાનો ડેટા ઍક્સેસ કરવાની મંજૂરી આપે છે."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"તમારી સાવ નજીકના વાતાવરણને સમજો"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"ઍપને સીધા તમારી આસપાસના વાતાવરણ વિશેનો ટ્રૅકિંગ ડેટા ઍક્સેસ કરવાની મંજૂરી આપે છે."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"તમારી સાવ નજીકના વાતાવરણને ખૂબ વિગતવાર સમજો"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"ઍપને સીધા તમારી આસપાસના વાતાવરણ વિશેનો ટ્રૅકિંગ ડેટા ખૂબ જ વિગતવાર ઍક્સેસ કરવાની મંજૂરી આપે છે."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"ફૉરગ્રાઉન્ડમાં ન હોય ત્યારે XR ડેટા ઍક્સેસ કરો"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"ફૉરગ્રાઉન્ડમાં ન હોય ત્યારે ઍપને XR ડેટા ઍક્સેસ કરવાની મંજૂરી આપે છે."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"બાયોમેટ્રિક્સનો ઉપયોગ કરો"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"બાયોમેટ્રિક્સ અથવા સ્ક્રીન લૉકનો ઉપયોગ કરો"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"આ તમે જ છો તેની ચકાસણી કરો"</string>
@@ -1844,7 +1824,7 @@
<string name="hearing_device_notification_switch_button" msgid="3619524619430941300">"સ્વિચ કરો"</string>
<string name="hearing_device_notification_settings_button" msgid="6673651052880279178">"સેટિંગ"</string>
<string name="user_switched" msgid="7249833311585228097">"વર્તમાન વપરાશકર્તા <xliff:g id="NAME">%1$s</xliff:g>."</string>
- <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g> પર સ્વિચ કરી રહ્યાં છે…"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g> પર સ્વિચ કરી રહ્યાં છીએ…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"<xliff:g id="NAME">%1$s</xliff:g> લોગ આઉટ થઈ રહ્યાં છે…"</string>
<string name="owner_name" msgid="8713560351570795743">"માલિક"</string>
<string name="guest_name" msgid="8502103277839834324">"અતિથિ"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index a587509290dc..538e86c18411 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"अपने महत्वपूर्ण संकेतों के बारे में सेंसर डेटा को ऐक्सेस करें"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"सूचनाएं"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"सूचनाएं दिखाएं"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"एक्सआर ट्रैकिंग डेटा"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"अपने और अपने आस-पास के माहौल के बारे में एक्सआर डेटा ऐक्सेस करें"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"संवेदनशील एक्सआर ट्रैकिंग डेटा"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"संवेदनशील ट्रैकिंग डेटा को ऐक्सेस करें, जैसे कि आंखों की गतिविधि"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"विंडो का कॉन्टेंट वापस पाएं"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"विंडो पर नज़र आ रहे कॉन्टेंट की जांच करें."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"छूकर, किसी चीज़ से जुड़ी जानकारी सुनने की सुविधा चालू करें"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"इससे ऐप्लिकेशन को आपके फ़ोटो संग्रह में बदलाव करने की मंज़ूरी दी जाती है."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"अपने मीडिया संग्रह से जगह की जानकारी ऐक्सेस करने की अनुमति दें"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"इससे ऐप्लिकेशन को आपके मीडिया संग्रह से जगह की जानकारी ऐक्सेस करने की अनुमति दी जाती है."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"आंखों की गतिविधियां ट्रैक करें"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"इससे ऐप्लिकेशन को, आपकी आंखों की गतिविधियों को ट्रैक करने की अनुमति मिलती है."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"किस ओर देखा जा रहा है, यह ट्रैक करें"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"इससे ऐप्लिकेशन को, आंखों की गतिविधियों का सटीक डेटा ऐक्सेस करने की अनुमति मिलती है."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"चेहरे को ट्रैक करें"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"इससे ऐप्लिकेशन को, फ़ेस ट्रैकिंग का डेटा ऐक्सेस करने की अनुमति मिलती है."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"हाथों को ट्रैक करें"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"इससे ऐप्लिकेशन को, हैंड ट्रैकिंग का डेटा ऐक्सेस करने की अनुमति मिलती है."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"सिर को ट्रैक करें"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"इससे ऐप्लिकेशन को, हेड ट्रैकिंग डेटा को ऐक्सेस करने की अनुमति मिलती है."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"अपने आस-पास के माहौल की जानकारी पाएं"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"इससे ऐप्लिकेशन को, आपके आस-पास के माहौल के ट्रैकिंग डेटा को ऐक्सेस करने की अनुमति मिलती है."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"अपने आस-पास के माहौल के बारे में छोटी से छोटी जानकारी पाएं"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"इससे ऐप्लिकेशन को, आपके आस-पास के माहौल के बारे में छोटी से छोटी जानकारी के साथ ट्रैकिंग डेटा ऐक्सेस करने की अनुमति मिलती है."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"ऐप्लिकेशन पर, फ़ोरग्राउंड के काम न करने पर भी एक्सआर डेटा ऐक्सेस करें"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"इससे ऐप्लिकेशन को, एक्सआर डेटा ऐक्सेस करने की अनुमति मिलती है, भले ही उसमें फ़ोरग्राउंड में काम न कर रहा हो."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"बायोमेट्रिक्स इस्तेमाल करें"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"बायोमेट्रिक्स या स्क्रीन लॉक का क्रेडेंशियल इस्तेमाल करें"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"अपनी पहचान की पुष्टि करें"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index cfea6abb4dc8..cde062acf7b0 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"pristupiti podacima senzora o vašim vitalnim znakovima"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Obavijesti"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"prikazati obavijesti"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR podaci o praćenju"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"pristup XR podacima o vama i vašem okruženju"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"osjetljivi XR podaci o praćenju"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"pristup osjetljivim podacima o praćenju, kao što je pogled"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Dohvaćati sadržaj prozora"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Pregledat će sadržaj prozora koji upotrebljavate."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Uključiti značajku Istraži dodirom"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Omogućuje aplikaciji izmjenu vaše zbirke fotografija."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"čitanje lokacija iz vaše medijske zbirke"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Omogućuje aplikaciji čitanje lokacija iz vaše medijske zbirke."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"praćenje približnog pogleda"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Aplikaciji omogućuje praćenje približnih podataka o pogledu."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"praćenje toga gdje gledate"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Aplikaciji omogućuje pristup preciznim podacima o pogledu."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"praćenje lica"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Aplikaciji omogućuje pristup podacima o praćenju lica."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"praćenje pokreta ruku"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Aplikaciji omogućuje pristup podacima o praćenju ruku."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"praćenje pokreta glave"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Aplikaciji omogućuje pristup podacima o praćenju pokreta glave."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"stjecanje uvida u neposredno okruženje"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Aplikaciji omogućuje pristup podacima o praćenju o vašem neposrednom okruženju."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"stjecanje detaljnih uvida u neposredno okruženje"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Aplikaciji omogućuje pristup detaljnim podacima o praćenju o vašem neposrednom okruženju."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"pristup XR podacima dok nije u prednjem planu"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Aplikaciji omogućuje pristup XR podacima dok nije u prednjem planu."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Upotreba biometrije"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Upotreba biometrijske autentifikacije ili zaključavanja zaslona"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Potvrdite da ste to vi"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 24389d6931b8..1acf7bcf50d8 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"az érzékelők által mért, életjelekkel kapcsolatos adatok elérése"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Értesítések"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"értesítések megjelenítése"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR-nyomonkövetési adatok"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"hozzáférés az Önre és a környezetére vonatkozó XR-adatokhoz"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"bizalmas XR-nyomonkövetési adatok"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"hozzáférés bizalmas nyomon követési adatokhoz, például a szemmozgáshoz"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Ablaktartalom lekérdezése"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"A használt ablak tartalmának vizsgálata."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Felfedezés érintéssel bekapcsolása"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Engedélyezi az alkalmazásnak a fényképgyűjtemény módosítását."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"helyek olvasása a médiagyűjteményből"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Engedélyezi az alkalmazásnak a helyek médiagyűjteményből való olvasását."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"a szemmozgás hozzávetőleges nyomon követése"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Lehetővé teszi az alkalmazás számára a szemmozgás hozzávetőleges nyomon követését."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"annak nyomon követése, hogy Ön hová néz"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Lehetővé teszi az alkalmazás számára, hogy hozzáférjen a szemmozgással kapcsolatos pontos adatokhoz."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"arc nyomon követése"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Lehetővé teszi az alkalmazás számára, hogy hozzáférjen az arckövetési adatokhoz."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"kézmozgás nyomon követése"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Lehetővé teszi az alkalmazás számára, hogy hozzáférjen a kézmozgáskövetési adatokhoz."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"fej nyomon követése"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Lehetővé teszi az alkalmazás számára, hogy hozzáférjen a fejkövetési adatokhoz."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"a közvetlen környezet megértése"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Lehetővé teszi az alkalmazás számára, hogy hozzáférjen az Ön közvetlen környezetére vonatkozó nyomon követési adatokhoz."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"a közvetlen környezetének nagyon pontos megértése"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Lehetővé teszi az alkalmazás számára, hogy hozzáférjen az Ön közvetlen környezetére vonatkozó nagyon pontos nyomon követési adatokhoz."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"hozzáférés az XR-adatokhoz, amikor nincs az előtérben"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Lehetővé teszi az alkalmazás számára, hogy hozzáférjen az XR-adatokhoz, amikor nincs az előtérben."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Biometriai feloldás használata"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"A folytatás biometriai feloldással vagy képernyőzárral lehetséges"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Igazolja, hogy Ön az"</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index 1125dc9914e9..041042f0be2f 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"օգտագործել սենսորների տվյալները ձեր օրգանիզմի վիճակի մասին"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Ծանուցումներ"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"ցուցադրել ծանուցումներ"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR հետագծման տվյալներ"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"մուտք գործեք XR տվյալներ ձեր և ձեզ շրջապատող միջավայրի մասին"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"զգայուն XR հետագծման տվյալներ"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"մուտք գործել հետևելու զգայուն տվյալներ, ինչպիսիք են աչքի հայացքը"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Առբերել պատուհանի բովանդակությունը"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Վերլուծել գործող պատուհանի բովանդակությունը"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Միացնել Հպման միջոցով հետազոտումը"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Թույլ է տալիս հավելվածին փոփոխել ձեր լուսանկարների հավաքածուն:"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"ճանաչել տեղադրության մասին տվյալները մեդիա բովանդակության հավաքածուից"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Թույլ է տալիս հավելվածին ճանաչել տեղադրության մասին տվյալները ձեր մեդիա բովանդակության հավաքածուից:"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"հետևեք ձեր աչքերի մոտավոր հայացքին"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Թույլ է տալիս հավելվածին հետևել ձեր աչքերի մոտավոր հայացքին։"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"հետևեք, թե որտեղ եք փնտրում"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Թույլ է տալիս հավելվածին մուտք գործել աչքի հայացքի ճշգրիտ տվյալներ։"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"հետևեք ձեր դեմքին"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Թույլ է տալիս հավելվածին մուտք գործել դեմքերի հետագծման տվյալներ։"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"հետագծեք ձեր ձեռքերի շարժումները"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Թույլ է տալիս հավելվածին մուտք գործել ձեռքի հետագծման տվյալներ։"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"հետևեք ձեր գլխին"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Թույլ է տալիս հավելվածին մուտք գործել գլխի հետագծման տվյալներ։"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"հասկացեք ձեր անմիջական միջավայրը"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Թույլ է տալիս հավելվածին մուտք գործել անմիջականորեն ձեր շուրջը գտնվող միջավայրի հետագծման տվյալներ։"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"հասկացեք ձեր անմիջական միջավայրը մանրամասնությամբ"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Թույլ է տալիս հավելվածին մուտք գործել անմիջականորեն ձեր շուրջը գտնվող միջավայրի հետագծման տվյալներ՝ մանրամասների հետագծմամբ։"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"մուտք գործեք XR տվյալներ, երբ առաջին պլանում չեք"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Թույլ է տալիս հավելվածին մուտք գործել XR տվյալներ, մինչդեռ առաջին պլանում չէ։"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Կենսաչափական համակարգեր"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Օգտագործել կենսաչափական համակարգեր կամ էկրանի կողպում"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Հաստատեք ձեր ինքնությունը"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 2cd5472ccb7d..b02d5ee9e040 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"mengakses data sensor tentang tanda-tanda vital"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notifikasi"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"tampilkan notifikasi"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"Data pelacakan XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"mengakses data XR tentang Anda dan lingkungan di sekitar Anda"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"data pelacakan XR sensitif"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"mengakses data pelacakan sensitif, seperti pandangan mata"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Membaca konten di jendela"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Memeriksa konten di jendela yang sedang Anda buka."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Mengaktifkan Jelajahi dengan Sentuhan"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Mengizinkan aplikasi untuk memodifikasi koleksi foto Anda."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"membaca lokasi dari koleksi media Anda"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Mengizinkan aplikasi untuk membaca lokasi dari koleksi media Anda."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"melacak perkiraan pandangan mata Anda"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Mengizinkan aplikasi melacak perkiraan pandangan mata Anda."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"melacak arah yang Anda lihat"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Mengizinkan aplikasi mengakses data pandangan mata yang akurat."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"melacak wajah Anda"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Mengizinkan aplikasi mengakses data pelacakan wajah."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"melacak gerak tangan Anda"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Mengizinkan aplikasi mengakses data pelacakan gerak tangan."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"melacak gerak kepala Anda"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Mengizinkan aplikasi mengakses data pelacakan gerak kepala."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"memahami lingkungan sekitar Anda"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Mengizinkan aplikasi mengakses data pelacakan tentang lingkungan di sekitar Anda."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"memahami lingkungan sekitar Anda secara mendetail"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Mengizinkan aplikasi mengakses data pelacakan tentang lingkungan di sekitar Anda secara mendetail."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"mengakses data XR saat tidak berada di latar depan"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Mengizinkan aplikasi mengakses data XR saat tidak berada di latar depan."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Gunakan biometrik"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Gunakan biometrik atau kunci layar"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifikasi diri Anda"</string>
@@ -743,7 +723,7 @@
</string-array>
<string name="fingerprint_error_vendor_unknown" msgid="4170002184907291065">"Terjadi error. Coba lagi."</string>
<string name="fingerprint_icon_content_description" msgid="4741068463175388817">"Ikon sidik jari"</string>
- <string name="device_unlock_notification_name" msgid="2632928999862915709">"Buka kunci perangkat"</string>
+ <string name="device_unlock_notification_name" msgid="2632928999862915709">"Pembuka kunci perangkat"</string>
<string name="alternative_unlock_setup_notification_title" msgid="6241508547901933544">"Coba cara lain untuk membuka kunci"</string>
<string name="alternative_face_setup_notification_content" msgid="3384959224091897331">"Gunakan Buka dengan Wajah saat sidik jari Anda tidak dikenali, seperti saat jari Anda basah"</string>
<string name="alternative_fp_setup_notification_content" msgid="7454096947415721639">"Gunakan Buka dengan Sidik Jari saat wajah Anda tidak dikenali, seperti saat pencahayaan tidak cukup"</string>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index a89a50fe9c8b..d66721aeeabc 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"aðgangur að skynjaragögnum um lífsmörk þín"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Tilkynningar"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"sýna tilkynningar"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"víðveruleikarakningargögn"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"aðgangur að víðveruleikagögnum um þig og umhverfi þitt"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"viðkvæm víðveruleikarakningargögn"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"aðgangur að viðkvæmum rakningargögnum, eins og augnhreyfingum"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Sækja innihald glugga"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Kanna innihald glugga sem þú ert að nota."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Kveikja á snertikönnun"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Leyfir forritinu að breyta myndasafninu þínu."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"lesa staðsetningar úr efnissafninu þínu"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Leyfir forritinu að lesa staðsetningar úr efnissafninu þínu."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"fylgjast með áætluðum augnhreyfingum þínum"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Leyfir forritinu að fylgjast með áætluðum augnhreyfingum þínum."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"fylgjast með því hvert þú horfir"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Leyfir forritinu að fá aðgang að gögnum um nákvæmar augnhreyfingar þínar."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"fylgjast með andliti þínu"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Leyfir forritinu að fá aðgang að gögnum um greiningu andlitshreyfinga."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"rekja handahreyfingarnar þínar"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Leyfir forritinu að fá aðgang að gögnum um greiningu handahreyfinga."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"fylgjast með höfðinu á þér"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Leyfir forritinu að fá aðgang að gögnum um vöktun höfuðhreyfinga."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"átta sig á nánasta umhverfi þínu"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Veitir forritinu aðgang að rakningargögnum um nánasta umhverfi þitt."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"átta sig á nánasta umhverfi þínu í miklum smáatriðum"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Leyfir forritinu að fá aðgang að rakningargögnum um nánasta umhverfi þitt í miklum smáatriðum."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"fá aðgang að víðveruleikagögnum þegar það er ekki í forgrunni"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Leyfir forritinu að fá aðgang að víðveruleikagögnum þegar það er ekki í forgrunni."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Nota lífkenni"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Nota lífkenni eða skjálás"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Staðfestu hver þú ert"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 47ef283523ec..7506002ce141 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"Possono accedere ai dati dei sensori relativi ai tuoi parametri vitali"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notifiche"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"Visualizzazione di notifiche"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"dati di tracciamento XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"accesso ai dati XR relativi a te e all\'ambiente circostante"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"dati di tracciamento XR sensibili"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"accesso a dati di tracciamento sensibili, come lo sguardo"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Recuperare contenuti della finestra"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Esamina i contenuti di una finestra con cui interagisci."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Attivare Esplora al tocco"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Consente all\'app di modificare la tua raccolta di foto."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"lettura delle posizioni dalla tua raccolta multimediale"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Consente all\'app di leggere le posizioni dalla tua raccolta multimediale."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"tracciamento approssimativo dello sguardo"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Consente all\'app di tracciare approssimativamente il tuo sguardo."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"tracciamento del punto osservato"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Consente all\'app di accedere a dati precisi sullo sguardo."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"tracciamento del volto"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Consente all\'app di accedere ai dati di tracciamento del volto."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"tracciamento delle mani"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Consente all\'app di accedere ai dati di tracciamento delle mani."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"tracciamento della testa"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Consente all\'app di accedere ai dati di tracciamento della testa."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"comprensione dell\'ambiente circostante"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Consente all\'app di accedere ai dati di tracciamento sull\'ambiente direttamente intorno a te."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"comprensione dell\'ambiente circostante in modo dettagliato"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Consente all\'app di accedere ai dati di tracciamento sull\'ambiente direttamente intorno a te molto dettagliatamente."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"accesso ai dati XR non in primo piano"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Consente all\'app di accedere ai dati XR non in primo piano."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Usa la biometria"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Usa la biometria o il blocco schermo"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifica la tua identità"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 7e37dffdff69..7ad10c85fece 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"バイタルサインに関するセンサーデータへのアクセス"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"通知"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"通知を表示"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR トラッキング データ"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"ユーザーと周囲の環境に関する XR データへのアクセス"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"機密性の高い XR トラッキング データ"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"視線などの機密性の高いトラッキング データへのアクセス"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"ウィンドウコンテンツの取得"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"ユーザーがアクセスしているウィンドウのコンテンツを検査します。"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"タッチガイドの有効化"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"写真コレクションの変更をアプリに許可します。"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"メディア コレクションの位置情報の読み取り"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"メディア コレクションの位置情報の読み取りをアプリに許可します。"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"おおまかな視線のトラッキング"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"おおまかな視線のトラッキングをアプリに許可します。"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"視線の移動のトラッキング"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"正確な視線データへのアクセスをアプリに許可します。"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"顔トラッキング"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"顔トラッキング データへのアクセスをアプリに許可します。"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"ハンド トラッキング"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"ハンド トラッキング データへのアクセスをアプリに許可します。"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"ヘッド トラッキング"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"ヘッド トラッキング データへのアクセスをアプリに許可します。"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"周囲の環境を把握"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"周囲の環境に関するトラッキング データへのアクセスをアプリに許可します。"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"周囲の環境を詳細に把握"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"周囲の環境に関する非常に詳細なトラッキング データへのアクセスをアプリに許可します。"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"フォアグラウンドで実行されていないときに XR データにアクセス"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"フォアグラウンドで実行されていないときに XR データへのアクセスをアプリに許可します。"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"生体認証の使用"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"生体認証または画面ロックの使用"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"本人確認"</string>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index 5ecf5b71638d..fcdfc0135fec 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"თქვენი სასიცოცხლო ფუნქციების შესახებ სენსორის მონაცემებზე წვდომა"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"შეტყობინებები"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"შეტყობინებების ჩვენება"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR თვალყურის დევნების მონაცემები"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"წვდომა თქვენ და მიმდებარე გარემოს შესახებ XR მონაცემებზე"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"XR თვალყურის დევნების სენსიტ. მონაცემები"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"წვდომა თვალყურის დევნების სენსიტიურ მონაცემებზე, როგორიცაა მზერის მიმართულება"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"ფანჯრის კონტენტის მოძიება"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"იმ ფანჯრის კონტენტის შემოწმება, რომელშიც მუშაობთ."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"„შეხებით აღმოჩენის“ ჩართვა"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"აპი შეძლებს თქვენი ფოტოკოლექციის შეცვლას."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"მდებარეობების გაცნობა თქვენი მედიაკოლექციიდან"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"აპი შეძლებს მდებარეობების გაცნობას თქვენი მედიაკოლექციიდან."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"თქვენი მზერის მიახლოებითი მიმართულების თვალყურის დევნება"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"ნებართვას აძლევს აპს, თვალყური ადევნოს თქვენი მზერის სავარაუდო მიმართულებას."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"მზერის მიმართულების თვალყურის დევნება"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"ნებართვას აძლევს აპს, მოიპოვოს წვდომა მზერის მიმართულების ზუსტ მონაცემებზე."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"თქვენი სახის თვალყურის დევნება"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"ნებართვას აძლევს აპს, მოიპოვოს წვდომა სახის თვალყურის დევნების მონაცემებზე."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"თქვენი ხელების მოძრაობაზე თვალის დევნება"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"ნებართვას აძლევს აპს, მოიპოვოს წვდომა ხელების მოძრაობაზე თვალყურის დევნების მონაცემებზე."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"თქვენი თავის მოძრაობაზე თვალყურის დევნება"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"ნებართვას აძლევს აპს, მოიპოვოს წვდომა თავის მოძრაობაზე თვალყურის დევნების მონაცემებზე."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"უშუალო გარემოს გაგება"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"ნებართვას აძლევს აპს, მოიპოვოს წვდომა თქვენ მიმდებარე გარემოზე თვალყურის დევნების მონაცემებზე."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"უშუალო გარემოს გაგება ზედმიწევნით დეტალურად"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"ნებართვას აძლევს აპს, მოიპოვოს წვდომა თქვენ მიმდებარე გარემოზე თვალყურის დევნების მონაცემებზე ზედმიწევნით დეტალურად."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"XR მონაცემებზე წვდომა უკანა პლანზე ყოფნისას"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"ნებართვას აძლევს აპს, მოიპოვოს წვდომა XR მონაცემებზე, უკანა პლანზე ყოფნისას."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"გამოიყენეთ ბიომეტრიული სისტემა"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"გამოიყენეთ ბიომეტრიული სისტემა ან ეკრანის დაბლოკვა"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"დაადასტურეთ ვინაობა"</string>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index 98addd075a12..e60ce5dc0260 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"ағза күйінің көрсеткіштері туралы сенсор деректеріне қатынасу"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Хабарландырулар"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"хабарландыруларды көрсету"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"бақылауға арналған XR деректері"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"сіз және айналаңыздағы орта туралы XR деректерін пайдалану"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"бақылауға арналған құпия XR деректері"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"қарау бағыты сияқты құпия қадағалау деректерін пайдалану"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Терезе контентін оқып отыру"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Ашық тұрған терезе контентін тексеру."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Түртілген элементтерді дыбыстау функциясын қосу"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Қолданбаға суреттер жинағын өзгертуге мүмкіндік береді."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"медиамазмұн жинағынан геодеректерді оқу"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Қолданбаға медиамазмұн жинағынан геодеректерді оқуға мүмкіндік береді."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"болжалды қарау бағытын қадағалау"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Қолданбаға болжалды қарау бағытын қадағалау рұқсаты беріледі."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"қараған бағытты қадағалау"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Қолданбаға қарау бағытының нақты деректерін пайдалану рұқсаты беріледі."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"бетті қадағалау"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Қолданбаға бетті қадағалау деректерін пайдалану рұқсаты беріледі."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"қол қимылын аңду"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Қолданбаға қол қимылын аңду деректерін пайдалану рұқсаты беріледі."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"бас қозғалысын қадағалау"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Қолданбаға бас қозғалысын қадағалау деректерін пайдалану рұқсаты беріледі."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"сізді қоршаған айналаны түсіне білу"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Қолданбаға сіздің айналаңыздағы ортаны бақылау деректерін пайдалану рұқсаты беріледі."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"сізді қоршаған айналаны терең түсіне білу"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Қолданбаға сіздің айналаңыздағы ортаны бақылаудың толық деректерін пайдалану рұқсаты беріледі."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"экрандық режимнен тыс кезде XR деректерін пайдалану"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Қолданба экрандық режимде тұрмаған кезде, оған XR деректерін пайдалану рұқсаты беріледі."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Биометриканы пайдалану"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Биометриканы немесе экран құлпын пайдалану"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Cіз екеніңізді растаңыз"</string>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 7d0f7785366d..ad1017552f6e 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"ចូលដំណើរការទិន្នន័យឧបករណ៍ចាប់សញ្ញាអំពីស្ថានភាពសុខភាពរបស់អ្នក"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"ការ​ជូនដំណឹង"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"បង្ហាញ​ការជូនដំណឹង"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"ទិន្នន័យតាមដាន XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"ចូលប្រើទិន្នន័យ XR អំពីអ្នក និងមជ្ឈដ្ឋានជុំវិញអ្នក"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"ទិន្នន័យតាមដាន XR ដែលរសើប"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"ចូលប្រើទិន្នន័យតាមដានដែលរសើប ដូចជាការសម្លឹងមើល"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"ទាញយក​ខ្លឹមសារ​វិនដូ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"ពិនិត្យ​ខ្លឹមសារវិនដូ​ដែល​អ្នក​កំពុង​ធ្វើអន្តរកម្ម​ជា​មួយ។"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"បើក​ការ​រក​មើល​​ដោយ​ប៉ះ"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"អនុញ្ញាតឱ្យ​កម្មវិធី​កែប្រែ​បណ្ដុំ​រូបថត​របស់​អ្នក។"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"អាន​ទីតាំង​ពី​បណ្ដុំ​មេឌៀ​របស់​អ្នក"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"អនុញ្ញាតឱ្យ​កម្មវិធី​អាន​ទីតាំង​ពីបណ្ដុំ​មេឌៀ​របស់​អ្នក។"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"តាមដានការសម្លឹងមើលប្រហាក់ប្រហែលរបស់អ្នក"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"អនុញ្ញាតឱ្យកម្មវិធីតាមដានការសម្លឹងមើលប្រហាក់ប្រហែលរបស់អ្នក។"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"តាមដានកន្លែងដែលអ្នកកំពុងមើល"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"អនុញ្ញាតឱ្យកម្មវិធីចូលប្រើទិន្នន័យនៃការសម្លឹងមើលជាក់លាក់។"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"តាមដានមុខរបស់អ្នក"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"អនុញ្ញាតឱ្យកម្មវិធីចូលប្រើទិន្នន័យតាមដានមុខ។"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"តាមដានដៃរបស់អ្នក"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"អនុញ្ញាតឱ្យកម្មវិធីចូលប្រើទិន្នន័យតាមដានចលនាដៃ។"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"តាមដានក្បាលរបស់អ្នក"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"អនុញ្ញាតឱ្យកម្មវិធីចូលប្រើទិន្នន័យតាមដានចលនាក្បាល។"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"យល់ដឹងអំពីមជ្ឈដ្ឋានបច្ចុប្បន្នរបស់អ្នក"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"អនុញ្ញាតឱ្យកម្មវិធីចូលប្រើទិន្នន័យតាមដានអំពីមជ្ឈដ្ឋានជុំវិញអ្នកដោយផ្ទាល់។"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"យល់ដឹងអំពីមជ្ឈដ្ឋានបច្ចុប្បន្នរបស់អ្នកដោយមានភាពលម្អិតកម្រិតខ្ពស់"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"អនុញ្ញាតឱ្យកម្មវិធីចូលប្រើទិន្នន័យតាមដានអំពីមជ្ឈដ្ឋានជុំវិញអ្នកដោយផ្ទាល់ដោយមានភាពលម្អិតកម្រិតខ្ពស់ខ្លាំង។"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"ចូលប្រើទិន្នន័យ XR ពេលមិននៅផ្ទៃខាងមុខ"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"អនុញ្ញាតឱ្យកម្មវិធីចូលប្រើទិន្នន័យ XR ពេលមិននៅផ្ទៃខាងមុខ។"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"ប្រើ​ជីវមាត្រ"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ប្រើជីវមាត្រ ឬ​ការចាក់សោអេក្រង់"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"ផ្ទៀងផ្ទាត់ថាជាអ្នក"</string>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index e3caae5745f1..5711aa6087d9 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"ನಿಮ್ಮ ಮುಖ್ಯ ಲಕ್ಷಣಗಳ ಕುರಿತು ಸೆನ್ಸಾರ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"ನೋಟಿಫಿಕೇಶನ್‌ಗಳು"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸಿ"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR ಟ್ರ್ಯಾಕಿಂಗ್ ಡೇಟಾ"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"ನಿಮ್ಮ ಮತ್ತು ನಿಮ್ಮ ಸುತ್ತಲಿನ ಪರಿಸರದ ಕುರಿತು XR ಡೇಟಾವನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಿ"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"ಸೂಕ್ಷ್ಮವಾದ XR ಟ್ರ್ಯಾಕಿಂಗ್ ಡೇಟಾ"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"ಕಣ್ಣಿನ ನೋಟದಂತಹ ಸೂಕ್ಷ್ಮವಾದ ಟ್ರ್ಯಾಕಿಂಗ್ ಡೇಟಾವನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಿ"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"ವಿಂಡೋ ವಿಷಯವನ್ನು ಹಿಂಪಡೆಯುತ್ತದೆ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"ನೀವು ಸಂವಹನ ನಡೆಸುತ್ತಿರುವ ವಿಂಡೋದ ಕಂಟೆಂಟ್ ಅನ್ನು ಪರೀಕ್ಷಿಸಿ."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"ಸ್ಪರ್ಶ-ಎಕ್ಸ್‌ಪ್ಲೋರ್ ಆನ್ ಮಾಡುತ್ತದೆ"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"ನಿಮ್ಮ ಫೋಟೋ ಸಂಗ್ರಹಣೆಯನ್ನು ಮಾರ್ಪಡಿಸಲು ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"ನಿಮ್ಮ ಮೀಡಿಯಾ ಸಂಗ್ರಹಣೆಯಿಂದ ಸ್ಥಳಗಳನ್ನು ಓದಿ"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"ನಿಮ್ಮ ಮೀಡಿಯಾ ಸಂಗ್ರಹಣೆಯಿಂದ ಸ್ಥಳಗಳನ್ನು ಓದಲು ಆ್ಯಪ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"ನಿಮ್ಮ ಕಣ್ಣಿನ ಅಂದಾಜು ನೋಟವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಿ"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"ನಿಮ್ಮ ಕಣ್ಣಿನ ಅಂದಾಜು ನೋಟವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಆ್ಯಪ್ ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"ನೀವು ಎಲ್ಲಿ ನೋಡುತ್ತಿದ್ದೀರಿ ಎಂಬುದನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಿ"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"ಕಣ್ಣಿನ ನಿಖರವಾದ ನೋಟದ ಡೇಟಾವನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಆ್ಯಪ್ ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"ನಿಮ್ಮ ಮುಖವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಿ"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"ಫೇಸ್ ಟ್ರ್ಯಾಕಿಂಗ್ ಡೇಟಾವನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಆ್ಯಪ್ ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"ನಿಮ್ಮ ಕೈಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಿ"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"ಹ್ಯಾಂಡ್ ಟ್ರ್ಯಾಕಿಂಗ್ ಡೇಟಾವನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಆ್ಯಪ್ ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"ನಿಮ್ಮ ತಲೆಯನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಿ"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"ಹೆಡ್ ಟ್ರ್ಯಾಕಿಂಗ್ ಡೇಟಾವನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಆ್ಯಪ್ ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"ನಿಮ್ಮ ಸುತ್ತಲಿನ ಪರಿಸರವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಿ"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"ನಿಮ್ಮ ಸುತ್ತಲಿನ ಪರಿಸರದ ಕುರಿತು ಟ್ರ್ಯಾಕಿಂಗ್ ಡೇಟಾವನ್ನು ನೇರವಾಗಿ ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಆ್ಯಪ್ ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"ನಿಮ್ಮ ಸುತ್ತಲಿನ ಪರಿಸರವನ್ನು ಇನ್ನಷ್ಟು ವಿವರವಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಿ"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"ನಿಮ್ಮ ಸುತ್ತಲಿನ ಪರಿಸರದ ಕುರಿತು ಟ್ರ್ಯಾಕಿಂಗ್ ಡೇಟಾವನ್ನು ಹೆಚ್ಚಿನ ವಿವರಗಳೊಂದಿಗೆ ನೇರವಾಗಿ ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಆ್ಯಪ್ ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"ಮುನ್ನೆಲೆಯಲ್ಲಿ ಇಲ್ಲದಿರುವಾಗ XR ಡೇಟಾವನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಿ"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"ಮುನ್ನೆಲೆಯಲ್ಲಿ ಇಲ್ಲದಿರುವಾಗ XR ಡೇಟಾವನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಆ್ಯಪ್ ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"ಬಯೋಮೆಟ್ರಿಕ್ಸ್ ಬಳಸಿ"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ಬಯೋಮೆಟ್ರಿಕ್ಸ್ ಅಥವಾ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ಬಳಸಿ"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"ಇದು ನೀವೇ ಎಂದು ಪರಿಶೀಲಿಸಿ"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index ffbe631f754e..bb8c0221716a 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"생체 신호에 관한 센서 데이터에 액세스"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"알림"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"알림 표시"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR 추적 데이터"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"사용자 및 주변 환경에 대한 XR 데이터에 액세스"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"민감한 XR 추적 데이터"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"시선 추적과 같은 민감한 추적 데이터에 액세스"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"창 콘텐츠 가져오기"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"상호작용 중인 창의 콘텐츠를 검사합니다."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"터치하여 탐색 사용"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"앱에서 사진 컬렉션을 수정하도록 허용합니다."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"미디어 컬렉션에서 위치 읽기"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"앱에서 미디어 컬렉션의 위치를 읽도록 허용합니다."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"대략적인 시선 추적"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"앱이 대략적인 시선을 추적하도록 허용합니다."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"시선 추적"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"앱이 정확한 시선 데이터에 액세스하도록 허용합니다."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"얼굴 추적"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"앱이 얼굴 트래킹 데이터에 액세스하도록 허용합니다."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"손 추적"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"앱이 핸드 트래킹 데이터에 액세스하도록 허용합니다."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"머리 추적"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"앱이 헤드 트래킹 데이터에 액세스하도록 허용합니다."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"주변 환경 파악"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"앱이 주변 환경에 대한 추적 데이터에 직접 액세스하도록 허용합니다."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"주변 환경 상세 파악"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"앱이 주변 환경에 대한 매우 상세한 추적 데이터에 액세스하도록 허용합니다."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"포그라운드에 있지 않을 때 XR 데이터에 액세스"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"앱이 포그라운드에 있지 않을 때 XR 데이터에 액세스하도록 허용합니다."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"생체 인식 사용"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"생체 인식 또는 화면 잠금을 사용"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"본인 확인"</string>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index 5f19cf7c99f0..3fe442fcdbb8 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"организмдин абалына көз салган сенсордун дайындарына мүмкүнчүлүк алуу"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Билдирмелер"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"билдирмелерди көрсөтүү"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"кеңейтилген чындыкка көз салуу дайындары"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"сиз жана айланаңыздагы чөйрө жөнүндө кеңейтилген чындык дайындарына кирүү"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"купуя XR көз салуу дайындары"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"көз караш сыяктуу купуя көз салуу дайындарына кирүү"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Терезедеги нерселерди алып туруу"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Учурда ачылып турган терезедеги маалыматты талдайт."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"\"Сыйпалап изилдөө\" мүмкүнчүлүгүн иштетет"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Колдонмого сүрөт жыйнагыңызды өзгөртүүгө мүмкүнчүлүк берет."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"медиа жыйнагыңыз сакталган жерлерди окуу"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Колдонмого медиа жыйнагыңыз сакталган жерлерди окууга мүмкүнчүлүк берет."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"көз карашыңыздын болжолдуу багытына көз салуу"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Колдонмого көз карашыңыздын болжолдуу багытына көз салуу мүмкүнчүлүгүн берет."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"кайда карап жатканыңызга көз салуу"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Колдонмого көз карашыңыздын багыты боюнча так маалыматка кирүү мүмкүнчүлүгүн берет."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"жүзүңүзгө көз салуу"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Колдонмого жүзгө көз салуу боюнча так маалыматка кирүү мүмкүнчүлүгүн берет."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"колдоруңузга көз салуу"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Колдонмого колдорго көз салуу боюнча маалыматка кирүү мүмкүнчүлүгүн берет."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"башыңыздын кыймылына көз салуу"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Колдонмого баштын кыймылына көз салуу мүмкүнчүлүгүн берет."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"жакын айлана-чөйрөңүздү түшүнүү"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Колдонмого айлана-чөйрөңүзгө көз салуу дайындарына кирүү мүмкүнчүлүгүн берет."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"айлана-чөйрөңүзгө көз салуу дайындарынын толук чоо-жайын түшүнүү"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Колдонмого айлана-чөйрөңүзгө көз салуу дайындарынын толук чоо-жайына кирүү мүмкүнчүлүгүн берет."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"фондук режиминде кеңейтилген чындык дайындарына кирүү мүмкүнчүлүгү"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Колдонмого фондук режиминде кеңейтилген чындык дайындарына кирүү мүмкүнчүлүгүн берет."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Биометрикалык параметрлерди колдонуу"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Биометрикалык жөндөөнү же экрандын кулпусун колдонуу"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Өзүңүздү ырастаңыз"</string>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index fa1ff2b6a55e..1658a78fe1a0 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"ເຂົ້າ​ຫາ​ຂໍ້​ມູນ​ເຊັນ​ເຊີ​ກ່ຽວ​ກັບ​ສັນ​ຍານ​ຊີບ​ຂອງ​ທ່ານ"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"ການແຈ້ງເຕືອນ"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"ສະແດງການແຈ້ງເຕືອນ"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"ຂໍ້ມູນການຕິດຕາມ XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"ເຂົ້າເຖິງຂໍ້ມູນ XR ກ່ຽວກັບທ່ານ ແລະ ສະພາບແວດລ້ອມອ້ອມຕົວທ່ານ"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"ຂໍ້ມູນການຕິດຕາມ XR ທີ່ມີຄວາມລະອຽດອ່ອນ"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"ເຂົ້າເຖິງຂໍ້ມູນການຕິດຕາມທີ່ມີຄວາມລະອຽດອ່ອນ ເຊັ່ນ: ການຈ້ອງດ້ວຍຕາ"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"ດຶງຂໍ້ມູນເນື້ອຫາໃນໜ້າຈໍ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"ກວດກາເນື້ອຫາຂອງໜ້າຈໍທີ່ທ່ານກຳລັງມີປະຕິສຳພັນນຳ."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"ເປີດໃຊ້ \"ການສຳຫຼວດໂດຍສຳຜັດ\""</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"ອະນຸຍາດໃຫ້ແອັບແກ້ໄຂຄໍເລັກຊັນຮູບຂອງທ່ານ."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"ອ່ານສະຖານທີ່ຈາກຄໍເລັກຊັນມີເດຍຂອງທ່ານ"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"ອະນຸຍາດໃຫ້ແອັບອ່ານສະຖານທີ່ຈາກຄໍເລັກຊັນມີເດຍຂອງທ່ານ."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"ຕິດຕາມການຈ້ອງດ້ວຍຕາໂດຍປະມານຂອງທ່ານ"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"ອະນຸຍາດໃຫ້ແອັບຕິດຕາມການຈ້ອງດ້ວຍຕາໂດຍປະມານຂອງທ່ານ."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"ຕິດຕາມຕຳແໜ່ງທີ່ທ່ານເບິ່ງ"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"ອະນຸຍາດໃຫ້ແອັບເຂົ້າເຖິງຂໍ້ມູນການຈ້ອງດ້ວຍຕາຢ່າງລະອຽດ."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"ຕິດຕາມໃບໜ້າຂອງທ່ານ"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"ອະນຸຍາດໃຫ້ແອັບເຂົ້າເຖິງຂໍ້ມູນການຕິດຕາມໃບໜ້າ."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"ຕິດຕາມມືຂອງທ່ານ"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"ອະນຸຍາດໃຫ້ແອັບເຂົ້າເຖິງຂໍ້ມູນການຕິດຕາມມື."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"ຕິດຕາມຫົວຂອງທ່ານ"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"ອະນຸຍາດໃຫ້ແອັບເຂົ້າເຖິງຂໍ້ມູນການຕິດຕາມຫົວ."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"ເຂົ້າໃຈສະພາບແວດລ້ອມທີ່ຢູ່ໃກ້ຕົວທ່ານ"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"ອະນຸຍາດໃຫ້ແອັບເຂົ້າເຖິງຂໍ້ມູນການຕິດຕາມກ່ຽວກັບສະພາບແວດລ້ອມອ້ອມຕົວທ່ານໂດຍກົງ."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"ເຂົ້າໃຈສະພາບແວດລ້ອມທີ່ຢູ່ໃກ້ຕົວທ່ານແບບລາຍລະອຽດສູງ"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"ອະນຸຍາດໃຫ້ແອັບເຂົ້າເຖິງຂໍ້ມູນການຕິດຕາມກ່ຽວກັບສະພາບແວດລ້ອມອ້ອມຕົວທ່ານໂດຍກົງທີ່ມີລາຍລະອຽດສູງຫຼາຍ."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"ເຂົ້າເຖິງຂໍ້ມູນ XR ໃນລະຫວ່າງທີ່ບໍ່ໄດ້ເຮັດວຽກຢູ່ໃນເບື້ອງໜ້າ"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"ອະນຸຍາດໃຫ້ແອັບເຂົ້າເຖິງຂໍ້ມູນ XR ໃນລະຫວ່າງທີ່ບໍ່ໄດ້ເຮັດວຽກຢູ່ໃນເບື້ອງໜ້າ."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"ໃຊ້ລະບົບຊີວະມິຕິ"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ໃຊ້ລະບົບຊີວະມິຕິ ຫຼື ການລັອກໜ້າຈໍ"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"ຢັ້ງຢືນວ່າແມ່ນທ່ານ"</string>
@@ -1844,7 +1824,7 @@
<string name="hearing_device_notification_switch_button" msgid="3619524619430941300">"ປ່ຽນ"</string>
<string name="hearing_device_notification_settings_button" msgid="6673651052880279178">"ການຕັ້ງຄ່າ"</string>
<string name="user_switched" msgid="7249833311585228097">"ຜູ່ໃຊ້ປັດຈຸບັນ <xliff:g id="NAME">%1$s</xliff:g> ."</string>
- <string name="user_switching_message" msgid="1912993630661332336">"ກຳລັງສະຫຼັບໄປຫາ<xliff:g id="NAME">%1$s</xliff:g>…"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"ກຳລັງສະຫຼັບໄປຫາ <xliff:g id="NAME">%1$s</xliff:g>…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"ກຳລັງອອກຈາກລະບົບ <xliff:g id="NAME">%1$s</xliff:g>…"</string>
<string name="owner_name" msgid="8713560351570795743">"ເຈົ້າຂອງ"</string>
<string name="guest_name" msgid="8502103277839834324">"ແຂກ"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index b9303fa9d68e..57db15721b9e 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -355,14 +355,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"pasiekti jutiklių duomenis apie gyvybinius ženklus"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Pranešimai"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"rodyti pranešimus"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR stebėjimo duomenys"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"pasiekti XR duomenis apie jus ir aplinką"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"neskelbtini XR stebėjimo duomenys"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"pasiekti neskelbtinus stebėjimo duomenis, pvz., žvilgsnį"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Gauti lango turinį"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Tikrinti lango, su kuriuo sąveikaujate, turinį."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Įjungti „Naršyti paliečiant“"</string>
@@ -658,38 +654,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Programai leidžiama keisti nuotraukų kolekciją."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"skaityti vietoves iš medijos kolekcijos"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Programai leidžiama skaityti vietoves iš medijos kolekcijos."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"stebėti apytikslį žvilgsnį"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Leidžiama programai stebėti apytikslį žvilgsnį."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"stebėti, kur žiūrite"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Leidžiama programai pasiekti tikslius žvilgsnio duomenis."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"stebėti veidą"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Leidžiama programai pasiekti veido stebėjimo duomenis."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"stebėti rankas"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Leidžiama programai pasiekti rankų stebėjimo duomenis."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"stebėti galvos judesius"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Leidžiama programai pasiekti galvos stebėjimo duomenis."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"suprasti artimiausią aplinką"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Leidžiama programai pasiekti stebėjimo duomenis apie aplinką, esančią tiesiogiai aplink jus."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"suprasti artimiausią aplinką labai detaliai"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Leidžiama programai pasiekti labai išsamius stebėjimo duomenis apie aplinką, esančią tiesiogiai aplink jus."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"pasiekti XR duomenis, kai programa veikia ne priekiniame plane"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Leidžiama programai pasiekti XR duomenis, kai ji nėra priekiniame plane."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Naudoti biometrinius duomenis"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Naudoti biometrinius duomenis arba ekrano užraktą"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Patvirtinkite, kad tai jūs"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 3a1df4b50b12..764e8c96d13d 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"piekļūt sensoru datiem par jūsu veselības rādījumiem"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Paziņojumi"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"rādīt paziņojumus"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"PR izsekošanas dati"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"piekļūt PR datiem par jums un vidi ap jums"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"sensitīvi PR izsekošanas dati"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"piekļūt sensitīviem izsekošanas datiem, piemēram, acu kustībām"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Izgūt loga saturu."</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Skatīt tā loga saturu, ar kuru mijiedarbojaties."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Aktivizēt funkciju “Pārlūkot pieskaroties”."</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Ļauj lietotnei pārveidot jūsu fotoattēlu kolekciju."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"Lasīt atrašanās vietas no jūsu multivides kolekcijas"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Ļauj lietotnei lasīt atrašanās vietas no jūsu multivides kolekcijas."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"izsekot aptuvenām acu kustībām"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Ļauj lietotnei izsekot aptuvenām acu kustībām."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"izsekot, kur skatāties"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Ļauj lietotnei piekļūt precīziem acu kustību izsekošanas datiem."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"izsekot jūsu sejas kustībām"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Ļauj lietotnei piekļūt sejas kustību izsekošanas datiem."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"izsekot jūsu roku kustībām"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Ļauj lietotnei piekļūt roku kustību izsekošanas datiem."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"izsekot jūsu galvas kustībām"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Ļauj lietotnei piekļūt galvas kustību reģistrēšanas datiem."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"izprast jūsu tuvāko apkārtni"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Ļauj lietotnei piekļūt izsekošanas datiem par vidi tieši ap jums."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"detalizēti izprast jūsu tuvāko apkārtni"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Ļauj lietotnei piekļūt ļoti detalizētiem izsekošanas datiem par vidi tieši ap jums."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"piekļūt PR datiem, kamēr lietotne nedarbojas priekšplānā"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Ļauj lietotnei piekļūt PR datiem, kamēr lietotne nedarbojas priekšplānā."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Biometrijas izmantošana"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biometrijas vai ekrāna bloķēšanas izmantošana"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Apstipriniet, ka tas esat jūs"</string>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index c6d51c7f7d18..46009350774a 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"пристапува до податоците од сензорите за виталните функции"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Известувања"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"да прикажува известувања"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR-податоци за следење"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"да пристапува до XR-податоци за вас и околината околу вас"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"чувствителни XR-податоци за следење"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"да пристапува до чувствителни податоци за следење, како што е погледот"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"да ги вчитува содржините од прозорците"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"да ги проверува содржините од прозорецот што го користите"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"да вклучи „Истражувај со допир“"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Дозволува апликацијата да ја менува вашата збирка на фотографии."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"да чита локации од вашата збирка на аудиовизуелни содржини"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Дозволува апликацијата да чита локации од вашата збирка на аудиовизуелни содржини."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"да го следи вашиот приближен поглед"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Дозволува апликацијата да го следи вашиот приближен поглед."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"да следи каде гледате"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Дозволува апликацијата да пристапува до податоци за прецизен поглед."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"да го следи вашиот лик"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Дозволува апликацијата да пристапува до податоците за следење лик."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"да ги следи вашите раце"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Дозволува апликацијата да пристапува до податоците за следење на раце."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"да го следи вашето движење"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Дозволува апликацијата да пристапува до податоците за следење на движење."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"да ја разбере вашата непосредна околина"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Дозволува апликацијата да пристапува до податоците за следење на околината директно околу вас."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"да ја разбере вашата непосредна околина со многу детали"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Дозволува апликацијата да пристапува до податоците за следење на околината директно околу вас со многу детали."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"да пристапува до XR-податоци кога не е во преден план"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Дозволува апликацијата да пристапува до XR-податоците кога не е во преден план."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Користи биометрика"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Користи биометрика или заклучен екран"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Потврдете дека сте вие"</string>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index 17fa98b2d372..d9ec167f5c84 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"നിങ്ങളുടെ ജീവാധാര ലക്ഷണങ്ങളെ കുറിച്ചുള്ള സെൻസർ വിവരങ്ങൾ ആക്സസ് ചെയ്യുക"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"അറിയിപ്പുകൾ"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"അറിയിപ്പുകൾ കാണിക്കുക"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR ട്രാക്കിംഗ് ഡാറ്റ"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"നിങ്ങളെ കുറിച്ചും നിങ്ങളുടെ ചുറ്റുപാടുകളെകുറിച്ചുമുള്ള XR ഡാറ്റ ആക്സസ് ചെയ്യുക"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"സെൻസിറ്റീവ് XR ട്രാക്കിംഗ് ഡാറ്റ"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"നോട്ടം പോലുള്ള, സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട ട്രാക്കിംഗ് ഡാറ്റ ആക്സസ് ചെയ്യുക"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"വിൻഡോ ഉള്ളടക്കം വീണ്ടെടുക്കുക"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"നിങ്ങൾ സംവദിക്കുന്ന ഒരു വിൻഡോയുടെ ഉള്ളടക്കം പരിശോധിക്കുക."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"സ്‌പർശനം വഴി പര്യവേക്ഷണം ചെയ്യുക, ഓണാക്കുക"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"നിങ്ങളുടെ ഫോട്ടോ ശേഖരം പരിഷ്‌ക്കരിക്കുന്നതിന് ആപ്പിനെ അനുവദിക്കുന്നു."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"നിങ്ങളുടെ മീഡിയ ശേഖരത്തിൽ നിന്നും ലൊക്കേഷനുകൾ റീഡ് ചെയ്യുക"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"നിങ്ങളുടെ മീഡിയ ശേഖരത്തിൽ നിന്നും ലൊക്കേഷനുകൾ റീഡ് ചെയ്യുന്നതിന് ആപ്പിനെ അനുവദിക്കുന്നു."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"നിങ്ങളുടെ നോട്ടത്തിന്റെ ഏകദേശ ഡാറ്റ ട്രാക്ക് ചെയ്യുക"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"നിങ്ങളുടെ നോട്ടത്തിന്റെ ഏകദേശ ഡാറ്റ ട്രാക്ക് ചെയ്യാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"നിങ്ങൾ എവിടേയ്ക്കാണ് നോക്കുന്നതെന്ന് ട്രാക്ക് ചെയ്യുക"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"നോട്ടത്തിന്റെ കൃത്യമായ ഡാറ്റ ആക്സസ് ചെയ്യാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"നിങ്ങളുടെ മുഖം ട്രാക്ക് ചെയ്യുക"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"മുഖ ട്രാക്കിംഗ് ഡാറ്റ ആക്സസ് ചെയ്യാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"നിങ്ങളുടെ കൈകൾ ട്രാക്ക് ചെയ്യുക"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"കൈചലനം ട്രാക്കിംഗ് ഡാറ്റ ആക്സസ് ചെയ്യാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"നിങ്ങളുടെ തല ട്രാക്ക് ചെയ്യുക"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"തല ട്രാക്കിംഗ് ഡാറ്റ ആക്സസ് ചെയ്യാൻ ആപ്പിനെ അനുവദിക്കുക."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"നിങ്ങളുടെ ഏറ്റവുമടുത്തുള്ള ചുറ്റുപാടുകൾ മനസ്സിലാക്കുക"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"നിങ്ങളുടെ ചുറ്റുപാടുകളെക്കുറിച്ചുള്ള ട്രാക്കിംഗ് ഡാറ്റ നേരിട്ട് ആക്‌സസ് ചെയ്യാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"നിങ്ങളുടെ ഏറ്റവുമടുത്തുള്ള ചുറ്റുപാടുകൾ വളരെ വിശദമായി മനസ്സിലാക്കുക"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"നിങ്ങളുടെ ചുറ്റുപാടുകളെക്കുറിച്ചുള്ള വളരെ വിശദമായ ട്രാക്കിംഗ് ഡാറ്റ നേരിട്ട് ആക്‌സസ് ചെയ്യാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"ഫോർഗ്രൗണ്ടിൽ ഇല്ലാത്തപ്പോൾ XR ഡാറ്റ ആക്‌സസ് ചെയ്യുക"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"ഫോർഗ്രൗണ്ടിൽ ഇല്ലാത്തപ്പോൾ XR ഡാറ്റ ആക്‌സസ് ചെയ്യാൻ ആപ്പിനെ അനുവദിക്കുന്നു."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"ബയോമെട്രിക്‌സ് ഉപയോഗിക്കുക"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ബയോമെട്രിക്‌സ് അല്ലെങ്കിൽ സ്‌ക്രീൻ ലോക്ക് ഉപയോഗിക്കുക"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"ഇത് നിങ്ങളാണെന്ന് പരിശോധിച്ചുറപ്പിക്കുക"</string>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index 48b2aa88ea49..05f4f0572a47 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"таны биеийн байдлын талаарх мэдрэгч бүхий өгөгдөлд нэвтрэх"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Мэдэгдэл"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"мэдэгдэл харуулах"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR-н хяналтын өгөгдөл"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"таны болон таны орчны талаарх XR-н өгөгдөлд хандах"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"XR-н хяналтын эмзэг өгөгдөл"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"нүдний харц зэрэг хяналтын эмзэг өгөгдөлд хандах"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Цонхны агуулгыг авах"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Таны харилцан үйлчлэх цонхны контентоос шалгах."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Хүрэлтээр сонсохыг асаах"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Таны зургийн цуглуулгыг тохируулах зөвшөөрлийг аппад олгодог."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"медиа цуглуулгаасаа байршлыг унших"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Таны медиа цуглуулгаас байршлыг унших зөвшөөрлийг аппад олгодог."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"таны нүдний барагцаалсан харцыг хянах"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Аппад таны нүдний барагцаалсан харцыг хянахыг зөвшөөрнө."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"таны хаашаа харж байгааг хянах"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Аппад таны нүдний нарийвчилсан харцын өгөгдөлд хандахыг зөвшөөрнө."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"таны царайг хянах"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Аппад царай хяналтын өгөгдөлд хандахыг зөвшөөрнө."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"таны гарыг хянах"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Аппад гар хяналтын өгөгдөлд хандахыг зөвшөөрнө."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"таны толгойг хянах"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Аппад толгойн хяналтын өгөгдөлд хандахыг зөвшөөрнө."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"таны яг байгаа орчныг ойлгох"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Аппад таны яг байгаа орчны талаарх хяналтын өгөгдөлд хандахыг зөвшөөрнө."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"таны яг байгаа орчныг өндөр нарийвчлалтай ойлгох"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Аппад таны яг байгаа орчны талаарх маш өндөр нарийвчлалтай хяналтын өгөгдөлд хандахыг зөвшөөрнө."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"дэвсгэрт байхдаа XR-н өгөгдөлд хандах"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Аппад дэвсгэрт байхдаа XR-н өгөгдөлд хандахыг зөвшөөрнө."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Биометр ашиглах"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Биометр эсвэл дэлгэцийн түгжээ ашиглах"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Өөрийгөө мөн гэдгийг баталгаажуулаарай"</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index 03400f2db1e8..df7688ed9e3c 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"आपल्‍या महत्त्वाच्या मापनांविषयी सेन्सर डेटा अ‍ॅक्सेस करा"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"सूचना"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"सूचना दाखवा"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR ट्रॅकिंग डेटा"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"तुमच्याबद्दल आणि तुमच्या सभोवतालच्या वातावरणाबद्दल XR डेटा अ‍ॅक्सेस करा"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"संवेदनशील XR ट्रॅकिंग डेटा"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"संवेदनशील ट्रॅकिंग डेटा अ‍ॅक्सेस करा, जसे की डोळ्यांची हालचाल"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"विंडोमधील आशय पुन्हा मिळवा"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"तुम्ही वापरत असलेल्‍या विंडोमधील आशय तपासा."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"स्पर्श करून अन्वेषण सुरू करा"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"ॲपला तुमच्या फोटो संग्रहामध्ये सुधारणा करण्याची अनुमती देते."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"तुमच्या मीडिया संग्रहातून स्थाने वाचा"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"ॲपला तुमच्या मीडिया संग्रहामध्येील स्थाने वाचण्यासाठी अनुमती देते."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"तुमच्या डोळ्यांची अंदाजे हालचाल ट्रॅक करा"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"अ‍ॅपला तुमच्या डोळ्यांची अंदाजे हालचाल ट्रॅक करण्याची अनुमती देते."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"तुम्ही कुठे पाहत आहात ते ट्रॅक करा"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"अ‍ॅपला तुमच्या डोळ्यांच्या अचूक हालचालीचा डेटा अ‍ॅक्सेस करण्याची अनुमती देते."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"तुमचा चेहरा ट्रॅक करा"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"अ‍ॅपला फेस ट्रॅकिंग डेटा अ‍ॅक्सेस करण्याची अनुमती देते."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"तुमचे हात ट्रॅक करा"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"अ‍ॅपला हँड ट्रॅकिंग डेटा अ‍ॅक्सेस करण्याची अनुमती देते."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"तुमचे डोके ट्रॅक करा"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"अ‍ॅपला हेड ट्रॅकिंग डेटा अ‍ॅक्सेस करण्याची अनुमती देते."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"तुमच्या आजूबाजूचे वातावरण समजून घ्या"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"तुमच्या सभोवतालच्या वातावरणाबद्दलचा ट्रॅकिंग डेटा अ‍ॅक्सेस करण्यासाठी अ‍ॅपला अनुमती देते."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"तुमच्या आजूबाजूचे वातावरण सविस्तरपणे समजून घ्या"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"अ‍ॅपला तुमच्या सभोवतालच्या वातावरणाबद्दलचा ट्रॅकिंग डेटा अत्यंत तपशिलवार अ‍ॅक्सेस करण्याची अनुमती देते."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"फोरग्राउंडमध्ये नसताना XR डेटा अ‍ॅक्सेस करा"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"फोरग्राउंडमध्ये नसतानाही अ‍ॅपला XR डेटा अ‍ॅक्सेस करण्याची अनुमती देते."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"बायोमेट्रिक वापरा"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"बायोमेट्रिक किंवा स्क्रीन लॉक वापरा"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"हे तुम्हीच आहात याची पडताळणी करा"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 889324c15a15..7d77268154ee 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"akses data penderia tentang tanda vital anda"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Pemberitahuan"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"tunjukkan pemberitahuan"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"Data penjejakan XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"mengakses data XR tentang anda dan persekitaran di sekeliling anda"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"Data penjejakan XR sensitif"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"mengakses data penjejakan sensitif, seperti renungan mata"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Dapatkan kembali kandungan tetingkap"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Periksa kandungan tetingkap yang berinteraksi dengan anda."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Hidupkan Teroka melalui Sentuhan"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Membenarkan apl mengubah suai koleksi foto anda."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"baca lokasi daripada koleksi media anda"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Membenarkan apl membaca lokasi daripada koleksi media anda."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"Menjejaki anggaran renungan mata anda"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Membenarkan apl menjejaki anggaran renungan mata anda."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"menjejaki tempat yang anda lihat"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Membenarkan apl menjejaki data renungan mata yang tepat."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"menjejaki wajah anda"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Membenarkan apl mengakses data penjejakan wajah."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"menjejaki tangan anda"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Membenarkan apl mengakses data penjejakan tangan."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"menjejaki kepala anda"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Membenarkan apl mengakses data penjejakan kepala."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"memahami persekitaran berhampiran anda"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Membenarkan apl untuk mengakses data penjejakan tentang persekitaran secara langsung di sekeliling anda."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"memahami persekitaran berhampiran anda pada butiran yang tinggi"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Membenarkan apl mengakses data penjejakan tentang persekitaran secara langsung di sekeliling anda dengan butiran yang amat tinggi."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"mengakses data XR semasa tidak di latar depan"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Membenarkan apl mengakses data XR semasa tidak di latar depan."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Gunakan biometrik"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Gunakan biometrik atau kunci skrin"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Sahkan diri anda"</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 67f084130f89..b2b601138317 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"သင်၏အရေးကြီးသော ကျန်းမာရေးလက္ခဏာဆိုင်ရာ အာရုံခံကိရိယာဒေတာကို ရယူရန်"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"အကြောင်းကြားချက်များ"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"အကြောင်းကြားချက်များ ပြနိုင်သည်"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR ခြေရာခံခြင်းဒေတာ"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"သင်နှင့် သင့်ဘေးနားရှိ ပတ်ဝန်းကျင်အကြောင်း XR ဒေတာကို သုံးခွင့်"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"သတိထားရမည့် XR ခြေရာခံခြင်းဒေတာ"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"မျက်လုံးအကြည့်ကဲ့သို့သော သတိထားရမည့် ခြေရာခံခြင်းဒေတာကို သုံးခွင့်"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"ဝင်းဒိုးတွင် ပါရှိသည်များကို ပြန်လည်ရယူရန်"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"သင်အသုံးပြုနေသော ဝင်းဒိုးတွင် ပါရှိသည်များကို ကြည့်ရှုစစ်ဆေးသည်။"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"တို့ထိခြင်းဖြင့် ရှာဖွေမှုကို ဖွင့်ရန်"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"အက်ပ်အား သင့်ဓာတ်ပုံစုစည်းမှုကို ပြုပြင်ခွင့်ပေးသည်။"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"သင့်မီဒီယာစုစည်းမှုမှ တည်နေရာများကို ဖတ်ခြင်း"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"အက်ပ်အား သင့်မီဒီယာစုစည်းမှုမှ တည်နေရာများကို ဖတ်ခွင့်ပေးသည်။"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"ခန့်မှန်းခြေ မျက်လုံးအကြည့်ကို စောင့်ကြည့်ခြင်း"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"သင်၏ ခန့်မှန်းခြေမျက်လုံးအကြည့်ကို အက်ပ်အား စောင့်ကြည့်ခွင့်ပြုသည်။"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"သင်ကြည့်နေသည့်နေရာကို စောင့်ကြည့်ခြင်း"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"တိကျသော မျက်လုံးအကြည့်ဒေတာကို အက်ပ်အား သုံးခွင့်ပြုသည်။"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"သင့်မျက်နှာကို စောင့်ကြည့်ခြင်း"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"မျက်နှာခြေရာခံခြင်းဒေတာကို အက်ပ်အား သုံးခွင့်ပြုသည်။"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"သင့်လက်များကို စောင့်ကြည့်ခြင်း"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"လက်ဟန်ခြေရာခံခြင်းဒေတာကို အက်ပ်အား သုံးခွင့်ပြုသည်။"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"သင့်ခေါင်းကို စောင့်ကြည့်ခြင်း"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"ဦးခေါင်းလှုပ်ရှားမှု မှတ်သားခြင်းဒေတာကို အက်ပ်အား သုံးခွင့်ပြုသည်။"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"သင့်အနီးဆုံးပတ်ဝန်းကျင်ကို နားလည်ခြင်း"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"သင့်ဘေးနားရှိ ပတ်ဝန်းကျင်အကြောင်း ခြေရာခံခြင်းဒေတာကို အက်ပ်အား သုံးခွင့်ပြုသည်။"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"သင့်အနီးဆုံးပတ်ဝန်းကျင်၏ အတွင်းကျကျအသေးစိတ်ကို နားလည်ခြင်း"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"သင့်ဘေးနားရှိ ပတ်ဝန်းကျင်အကြောင်း အတွင်းကျကျအသေးစိတ် ခြေရာခံခြင်းဒေတာကို အက်ပ်အား သုံးခွင့်ပြုသည်။"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"မျက်နှာစာတွင် ဖွင့်မထားချိန်၌ XR ဒေတာကို သုံးခွင့်"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"မျက်နှာစာတွင် ဖွင့်မထားချိန်၌ XR ဒေတာကို အက်ပ်အား သုံးခွင့်ပြုသည်။"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"ဇီဝမက်ထရစ်အချက်အလက်များ သုံးခြင်း"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ဇီဝမက်ထရစ်အချက်အလက်များ (သို့) ဖန်သားပြင်လော့ခ်ချခြင်းကို သုံးခြင်း"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"သင်ဖြစ်ကြောင်း အတည်ပြုပါ"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 44458bafab9b..3022fca58bf3 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"få tilgang til sensordata om de vitale tegnene dine"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Varsler"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"vise varsler"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR-sporingsdata"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"lese XR-data om deg og omgivelsene dine"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"sensitive XR-sporingsdata"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"lese sensitive sporingsdata, for eksempel øyebevegelser"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"hente innhold i vinduer"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Appen analyserer innholdet i vinduer du samhandler med."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"slå på berøringsutforsking"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Lar appen gjøre endringer i bildesamlingen din."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"lese posisjoner fra mediesamlingen din"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Lar appen lese posisjoner fra mediesamlingen din."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"spore omtrentlige øyebevegelser"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Lar appen spore de omtrentlige øyebevegelsene dine."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"spore hvor du ser"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Gir appen tilgang til nøyaktige data om øyebevegelser."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"spore ansiktet ditt"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Gir appen tilgang til data for ansiktssporing."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"spore hendene dine"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Gir appen tilgang til data for håndsporing."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"spore hodet ditt"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Gir appen tilgang til data for hodesporing."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"forstå omgivelsene like rundt deg"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Gir appen tilgang til sporingsdata om omgivelsene like rundt deg."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"forstå omgivelsene like rundt deg med høyt detaljnivå"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Gir appen tilgang til sporingsdata om omgivelsene like rundt deg med svært høyt detaljnivå."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"bruke XR-data når appen ikke er i forgrunnen"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Gir appen tilgang til XR-data når den ikke er i forgrunnen."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Bruk biometri"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Bruk biometri eller skjermlås"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Bekreft at det er deg"</string>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index 2591a154a78c..93ead6dfff57 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"तपाईंको महत्त्वपूर्ण संकेत बारे सेन्सर डेटा पहुँच गर्नुहोस्"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"नोटिफिकेसनहरू"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"सूचनाहरू देखाउनुहोस्"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR सम्बन्धी ट्रयाकिङ डेटा"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"तपाईं र तपाईंको वरपरको वातावरणका बारेमा XR सम्बन्धी डेटा एक्सेस गर्ने"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"XR सम्बन्धी संवेदनशील ट्रयाकिङ डेटा"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"संवेदनशील ट्रयाकिङ डेटा (जस्तै, आँखाको गतिविधि) एक्सेस गर्ने"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"विन्डो सामग्रीको पुनःबहाली गर्नुहोस्।"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"तपाईँको अन्तरक्रिया भइरहेको विन्डोको सामग्रीको निरीक्षण गर्नुहोस्।"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"छोएर गरिने खोजलाई सुचारु गर्नुहोस्"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"यसले एपलाई तपाईंको तस्बिरको सङ्ग्रह परिमार्जन गर्न दिन्छ।"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"आफ्नो मिडियाको सङ्ग्रहका स्थानहरू पढ्नुहोस्‌"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"यसले एपलाई तपाईंको मिडिया सङ्ग्रहका स्थानहरू पढ्न दिन्छ।"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"तपाईंको आँखाको गतिविधिसम्बन्धी अनुमानित डेटा ट्रयाक गर्ने"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"तपाईंले यो अनुमति दिनुभयो भने यो एपले तपाईंको आँखाको गतिविधिसम्बन्धी अनुमानित डेटा ट्रयाक गर्न सक्छ।"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"तपाईं कहाँ हेरिरहनुभएको छ भन्ने कुरा ट्रयाक गर्ने"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"तपाईंले यो अनुमति दिनुभयो भने यो एपले आँखाको गतिविधिसम्बन्धी सटीक डेटा एक्सेस गर्न सक्छ।"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"तपाईंको अनुहार ट्रयाक गर्ने"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"तपाईंले यो अनुमति दिनुभयो भने यो एपले फेस ट्रयाकिङ डेटा एक्सेस गर्न सक्छ।"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"तपाईंका हातहरू ट्र्याक गर्ने"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"तपाईंले यो अनुमति दिनुभयो भने यो एपले ह्यान्ड ट्र्याकिङ डेटा एक्सेस गर्न सक्छ।"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"तपाईंको टाउको ट्रयाक गर्ने"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"तपाईंले यो अनुमति दिनुभयो भने यो एपले हेड ट्रयाकिङ डेटा एक्सेस गर्न सक्छ।"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"तपाईंको वरपरको वातावरणका बारेमा बुझ्ने"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"तपाईंले यो अनुमति दिनुभयो भने यो एपले तपाईंको वरपरको वातावरणसम्बन्धी ट्रयाकिङ डेटा एक्सेस गर्न सक्छ।"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"तपाईंको वरपरको वातावरणका ससाना विवरणहरू पनि बुझ्ने"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"तपाईंले यो अनुमति दिनुभयो भने यो एपले तपाईंको वरपरको वातावरणका बारेमा ससाना विवरणहरू समावेश गरिएको ट्रयाकिङ डेटा एक्सेस गर्न सक्छ।"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"फोरग्राउन्डमा नचलिरहेका बेला XR सम्बन्धी डेटा एक्सेस गर्ने"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"तपाईंले यो अनुमति दिनुभयो भने यो एप फोरग्राउन्डमा नचलिरहेका बेला पनि यो एपले XR सम्बन्धी डेटा एक्सेस गर्न सक्छ।"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"बायोमेट्रिक्स प्रयोग गर्नुहोस्"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"बायोमेट्रिक्स वा स्क्रिन लक प्रयोग गर्नुहोस्"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"यो व्यक्ति तपाईं नै हो भन्ने प्रमाणित गर्नुहोस्"</string>
@@ -1091,7 +1071,7 @@
<string name="lockscreen_glogin_too_many_attempts" msgid="3775904917743034195">"निकै धेरै कोसिसहरू"</string>
<string name="lockscreen_glogin_instructions" msgid="4695162942525531700">"अनलक गर्नको लागि, तपाईँको Google खातासँग साइन इन गर्नुहोस्।"</string>
<string name="lockscreen_glogin_username_hint" msgid="6916101478673157045">"प्रयोगकर्तानाम (इमेल)"</string>
- <string name="lockscreen_glogin_password_hint" msgid="3031027901286812848">"पासवर्ड:"</string>
+ <string name="lockscreen_glogin_password_hint" msgid="3031027901286812848">"पासवर्ड"</string>
<string name="lockscreen_glogin_submit_button" msgid="3590556636347843733">"साइन इन गर्नुहोस्"</string>
<string name="lockscreen_glogin_invalid_input" msgid="4369219936865697679">"अमान्य प्रयोगकर्तानाम वा पासवर्ड"</string>
<string name="lockscreen_glogin_account_recovery_hint" msgid="1683405808525090649">"तपाईँको एक-पटके टेक्स्ट म्यासेज वा पासवर्ड बिर्सनुभयो?\n भ्रमण गर्नुहोस"<b>"google.com/accounts/recovery"</b></string>
@@ -1844,7 +1824,7 @@
<string name="hearing_device_notification_switch_button" msgid="3619524619430941300">"बदल्नुहोस्"</string>
<string name="hearing_device_notification_settings_button" msgid="6673651052880279178">"सेटिङ"</string>
<string name="user_switched" msgid="7249833311585228097">"अहिलेको प्रयोगकर्ता <xliff:g id="NAME">%1$s</xliff:g>।"</string>
- <string name="user_switching_message" msgid="1912993630661332336">"स्विच गरेर <xliff:g id="NAME">%1$s</xliff:g> बनाइँदै..."</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g> मा स्विच गरिँदै छ…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"लग आउट गर्दै <xliff:g id="NAME">%1$s</xliff:g>…"</string>
<string name="owner_name" msgid="8713560351570795743">"मालिक"</string>
<string name="guest_name" msgid="8502103277839834324">"अतिथि"</string>
diff --git a/core/res/res/values-night/colors.xml b/core/res/res/values-night/colors.xml
index 7b9b2d666292..e19ee23a8bd2 100644
--- a/core/res/res/values-night/colors.xml
+++ b/core/res/res/values-night/colors.xml
@@ -50,6 +50,8 @@
<!-- Color for various surfaces related to system-wide blur -->
<color name="surface_effect_0">@color/surface_effect_0_color</color>
<color name="surface_effect_1">@color/surface_effect_1_color</color>
+ <color name="surface_effect_2">@color/surface_effect_2_color</color>
+ <color name="surface_effect_3">@color/surface_effect_3_color</color>
<!-- Color for side fps toast dark theme-->
<color name="side_fps_toast_background">#2E3132</color>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index bbdc1bb09c5f..fc12906e14fa 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"toegang krijgen tot sensorgegevens over je vitale functies"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Meldingen"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"meldingen tonen"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR-trackinggegevens"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"toegang tot XR-gegevens over jou en de omgeving om je heen"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"gevoelige XR-trackinggegevens"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"toegang tot gevoelige trackinggegevens, zoals oogbewegingen"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Content van vensters ophalen"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"De content inspecteren van een venster waarmee je interactie hebt."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Verkennen via aanraking aanzetten"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Hiermee sta je de app toe je fotocollectie aan te passen."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"locaties van je mediacollecties bekijken"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Hiermee sta je de app toe locaties van je mediacollectie te bekijken."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"je oogbewegingen bij benadering volgen"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Hiermee kan de app je oogbewegingen bij benadering volgen."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"volgen waar je naar kijkt"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Hiermee kan de app toegang krijgen tot nauwkeurige gegevens voor oogbewegingen."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"je gezicht volgen"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Hiermee kan de app toegang krijgen tot gegevens voor gezichtstracking."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"je handen volgen"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Hiermee kan de app toegang krijgen tot gegevens voor handtracking."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"je hoofd volgen"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Hiermee kan de app toegang krijgen tot gegevens voor hoofdtracking."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"je directe omgeving begrijpen"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Hiermee kan de app toegang krijgen tot trackinggegevens over de omgeving direct om je heen."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"je directe omgeving begrijpen met veel details"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Hiermee kan de app toegang krijgen tot trackinggegevens over de omgeving direct om je heen met veel details."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"toegang tot XR-gegevens terwijl de app niet op de voorgrond wordt gebruikt"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Hiermee kan de app toegang krijgen tot XR-gegevens terwijl de app niet op de voorgrond wordt gebruikt."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Biometrische gegevens gebruiken"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biometrische gegevens of schermvergrendeling gebruiken"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Je identiteit bevestigen"</string>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index a1b24ebe52ed..3200f40606c6 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"ଆପଣଙ୍କ ଗୁରୁତପୂର୍ଣ୍ଣ ସଂକେତଗୁଡ଼ିକ ବିଷୟରେ ସେନ୍ସର୍‍ ଡାଟା ଆକ୍ସେସ୍‍ କରେ"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଦେଖାନ୍ତୁ"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR ଟ୍ରାକିଂ ଡାଟା"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"ଆପଣଙ୍କ ଚାରିପାଖର ପରିବେଶ ଏବଂ ଆପଣଙ୍କ ବିଷୟରେ XR ଡାଟା ଆକ୍ସେସ କରନ୍ତୁ"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"ସମ୍ବେଦନଶୀଳ XR ଟ୍ରାକିଂ ଡାଟା"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"ସମ୍ବେଦନଶୀଳ ଟ୍ରାକିଂ ଡାଟା ଆକ୍ସେସ କରନ୍ତୁ, ଯେପରି କି ଆଇ ଗେଜ"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"ୱିଣ୍ଡୋ କଣ୍ଟେଣ୍ଟ ହାସଲ କରନ୍ତୁ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"ଆପଣ କାମ କରୁଥିବା ୱିଣ୍ଡୋର କଣ୍ଟେଣ୍ଟକୁ ଯାଞ୍ଚ କରନ୍ତୁ।"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"ସ୍ପର୍ଶ ଦ୍ୱାରା ଏକ୍ସପ୍ଲୋର୍‍ ଅନ୍‍ କରନ୍ତୁ"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"ଆପଣଙ୍କ ଫଟୋ ସଂଗ୍ରହ ପରିବର୍ତ୍ତନ କରିବାକୁ ଆପ୍‍ ଅନୁମତି ଦେଇଥାଏ।"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"ଆପଣଙ୍କ ମିଡିଆ ସଂଗ୍ରହ ଠାରୁ ଲୋକେସନ୍‍ଗୁଡିକୁ ପଢନ୍ତୁ"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"ଆପଣଙ୍କ ମିଡିଆ ସଂଗ୍ରହ ଠାରୁ ଅବସ୍ଥାନଗୁଡିକୁ ପଢିବାକୁ ଆପ୍‍ ଅନୁମତି ଦେଇଥାଏ।"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"ଆପଣଙ୍କର ଆନୁମାନିକ ଆଇ ଗେଜ ଟ୍ରାକ କରନ୍ତୁ"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"ଆପଣଙ୍କର ଆନୁମାନିକ ଆଇ ଗେଜ ଟ୍ରାକ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"ଆପଣ କେଉଁଠିକୁ ଦେଖୁଛନ୍ତି ତାହା ଟ୍ରାକ କରନ୍ତୁ"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"ଆପଣଙ୍କର ସଠିକ ଆଇ ଗେଜ ଡାଟା ଆକ୍ସେସ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"ଆପଣଙ୍କର ମୁହଁକୁ ଟ୍ରାକ କରନ୍ତୁ"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"ଫେସ ଟ୍ରାକିଂ ଡାଟା ଆକ୍ସେସ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"ଆପଣଙ୍କର ହାତକୁ ଟ୍ରାକ କରନ୍ତୁ"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"ହେଣ୍ଡ ଟ୍ରାକିଂ ଡାଟା ଆକ୍ସେସ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"ଆପଣଙ୍କର ମୁଣ୍ଡକୁ ଟ୍ରାକ କରନ୍ତୁ"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"ହେଡ ଟ୍ରାକିଂ ଡାଟା ଆକ୍ସେସ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"ଆପଣଙ୍କର ଅତିନିକଟର ପରିବେଶ ବିଷୟରେ ବୁଝନ୍ତୁ"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"ଆପଣଙ୍କ ଚାରିପାଖର ପରିବେଶ ବିଷୟରେ ଟ୍ରାକିଂ ଡାଟା ଆକ୍ସେସ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"ଅଧିକ ବିବରଣୀ ସହ ଆପଣଙ୍କର ଅତିନିକଟର ପରିବେଶ ବିଷୟରେ ବୁଝନ୍ତୁ"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"ବହୁତ ଅଧିକ ସହ ଆପଣଙ୍କ ଚାରିପାଖର ପରିବେଶ ବିଷୟରେ ଟ୍ରାକିଂ ଡାଟା ଆକ୍ସେସ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"ଫୋରଗ୍ରାଉଣ୍ଡରେ ନଥିବା ବେଳେ XR ଡାଟା ଆକ୍ସେସ କରନ୍ତୁ"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"ଫୋରଗ୍ରାଉଣ୍ଡରେ ନଥିବା ବେଳେ XR ଡାଟା ଆକ୍ସେସ କରିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦିଅନ୍ତୁ।"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"ବାୟୋମେଟ୍ରିକ୍ସ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ବାୟୋମେଟ୍ରିକ୍ସ ବା ସ୍କ୍ରିନ୍ ଲକ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"ଏହା ଆପଣ ବୋଲି ଯାଞ୍ଚ କରନ୍ତୁ"</string>
@@ -1246,7 +1226,7 @@
<string name="delete" msgid="1514113991712129054">"ଡିଲିଟ କରନ୍ତୁ"</string>
<string name="copyUrl" msgid="6229645005987260230">"URL କପି କରନ୍ତୁ"</string>
<string name="selectTextMode" msgid="3225108910999318778">"ଟେକ୍ସଟ୍‍ ଚୟନ କରନ୍ତୁ"</string>
- <string name="undo" msgid="3175318090002654673">"ପୂର୍ବ ପରି କରନ୍ତୁ"</string>
+ <string name="undo" msgid="3175318090002654673">"ଅନଡୁ କରନ୍ତୁ"</string>
<string name="redo" msgid="7231448494008532233">"ପୁଣି କରନ୍ତୁ"</string>
<string name="autofill" msgid="511224882647795296">"ଅଟୋଫିଲ୍‌"</string>
<string name="textSelectionCABTitle" msgid="5151441579532476940">"ଟେକ୍ସଟ୍‍ ଚୟନ"</string>
@@ -1844,7 +1824,7 @@
<string name="hearing_device_notification_switch_button" msgid="3619524619430941300">"ସୁଇଚ କରନ୍ତୁ"</string>
<string name="hearing_device_notification_settings_button" msgid="6673651052880279178">"ସେଟିଂସ"</string>
<string name="user_switched" msgid="7249833311585228097">"ବର୍ତ୍ତମାନର ୟୁଜର୍‌ ହେଉଛନ୍ତି <xliff:g id="NAME">%1$s</xliff:g>।"</string>
- <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g>ରେ ସ୍ୱିଚ କରନ୍ତୁ…"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g>ରେ ସୁଇଚ ହେଉଛି…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"<xliff:g id="NAME">%1$s</xliff:g>ଙ୍କୁ ଲଗଆଉଟ୍‍ କରାଯାଉଛି…"</string>
<string name="owner_name" msgid="8713560351570795743">"ମାଲିକ"</string>
<string name="guest_name" msgid="8502103277839834324">"ଅତିଥି"</string>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 70dcd66a2fd7..cee65af4fc0b 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"ਆਪਣੇ ਸਰੀਰ ਦੇ ਅਹਿਮ ਚਿੰਨ੍ਹਾਂ ਬਾਰੇ ਸੰਵੇਦਕ ਡਾਟਾ ਤੱਕ ਪਹੁੰਚ ਕਰਨ"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"ਸੂਚਨਾਵਾਂ"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"ਸੂਚਨਾਵਾਂ ਦਿਖਾਓ"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR ਟਰੈਕਿੰਗ ਡਾਟਾ"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"ਆਪਣੇ ਅਤੇ ਆਪਣੇ ਆਲੇ-ਦੁਆਲੇ ਦੇ ਵਾਤਾਵਰਨ ਬਾਰੇ XR ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰੋ"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"ਸੰਵੇਦਨਸ਼ੀਲ XR ਟਰੈਕਿੰਗ ਡਾਟਾ"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"ਸੰਵੇਦਨਸ਼ੀਲ ਟਰੈਕਿੰਗ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰੋ, ਜਿਵੇਂ ਕਿ ਅੱਖਾਂ ਦੀ ਹਲਚਲ"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"ਵਿੰਡੋ ਸਮੱਗਰੀ ਮੁੜ-ਪ੍ਰਾਪਤ ਕਰਨਾ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"ਉਸ ਵਿੰਡੋ ਸਮੱਗਰੀ ਦੀ ਜਾਂਚ ਕਰੋ, ਜਿਸ ਨਾਲ ਤੁਸੀਂ ਅੰਤਰਕਿਰਿਆ ਕਰ ਰਹੇ ਹੋ"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"\'ਸਪੱਰਸ਼ ਰਾਹੀਂ ਪੜਚੋਲ ਕਰੋ\' ਚਾਲੂ ਕਰਨਾ"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"ਐਪ ਨੂੰ ਤੁਹਾਡੇ ਫ਼ੋਟੋ ਸੰਗ੍ਰਹਿ ਨੂੰ ਸੋਧਣ ਦਿੰਦੀ ਹੈ।"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"ਤੁਹਾਡੇ ਮੀਡੀਆ ਸੰਗ੍ਰਹਿ ਦੇ ਟਿਕਾਣਿਆਂ ਨੂੰ ਪੜ੍ਹਨਾ"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"ਐਪ ਨੂੰ ਤੁਹਾਡੇ ਮੀਡੀਆ ਸੰਗ੍ਰਹਿ ਦੇ ਟਿਕਾਣਿਆਂ ਨੂੰ ਪੜ੍ਹਨ ਦਿੰਦੀ ਹੈ।"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"ਆਪਣੀ ਅੰਦਾਜ਼ਨ ਅੱਖਾਂ ਦੀ ਹਲਚਲ ਨੂੰ ਟਰੈਕ ਕਰੋ"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"ਇਸ ਨਾਲ ਐਪ ਨੂੰ ਤੁਹਾਡੀਆਂ ਅੱਖਾਂ ਦੀ ਹਲਚਲ ਨੂੰ ਟਰੈਕ ਕਰਨ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ।"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"ਇਹ ਟਰੈਕ ਕਰੋ ਕਿ ਤੁਸੀਂ ਕਿੱਥੇ ਦੇਖ ਰਹੇ ਹੋ"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"ਇਸ ਨਾਲ ਐਪ ਨੂੰ ਤੁਹਾਡੀਆਂ ਅੱਖਾਂ ਦੀ ਹਲਚਲ ਦੇ ਸਟੀਕ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ।"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"ਆਪਣੇ ਚਿਹਰੇ ਨੂੰ ਟਰੈਕ ਕਰੋ"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"ਇਸ ਨਾਲ ਐਪ ਨੂੰ ਚਿਹਰਾ ਟਰੈਕਿੰਗ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ।"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"ਆਪਣੇ ਹੱਥਾਂ ਨੂੰ ਟਰੈਕ ਕਰੋ"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"ਇਸ ਨਾਲ ਐਪ ਨੂੰ ਹੱਥ ਟਰੈਕਿੰਗ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ।"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"ਆਪਣੇ ਸਿਰ ਨੂੰ ਟਰੈਕ ਕਰੋ"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"ਇਸ ਨਾਲ ਐਪ ਨੂੰ ਹੈੱਡ ਟਰੈਕਿੰਗ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ।"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"ਆਪਣੇ ਮੌਜੂਦਾ ਵਾਤਾਵਰਨ ਨੂੰ ਸਮਝੋ"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"ਇਸ ਨਾਲ ਐਪ ਨੂੰ ਤੁਹਾਡੇ ਆਲੇ-ਦੁਆਲੇ ਦੇ ਵਾਤਾਵਰਨ ਦੇ ਟਰੈਕਿੰਗ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ।"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"ਆਪਣੇ ਮੌਜੂਦਾ ਵਾਤਾਵਰਨ ਨੂੰ ਬਰੀਕੀ ਨਾਲ ਸਮਝੋ"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"ਇਸ ਨਾਲ ਐਪ ਨੂੰ ਤੁਹਾਡੇ ਆਲੇ-ਦੁਆਲੇ ਦੇ ਵਾਤਾਵਰਨ ਬਾਰੇ ਬਰੀਕੀ ਨਾਲ ਟਰੈਕਿੰਗ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ।"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"ਫੋਰਗ੍ਰਾਊਂਡ ਸੇਵਾ ਨਾ ਹੋਣ \'ਤੇ ਵੀ XR ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰੋ"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"ਇਸ ਨਾਲ ਐਪ ਨੂੰ XR ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ, ਭਾਵੇਂ ਉਸ ਵਿੱਚ ਫੋਰਗ੍ਰਾਊਂਡ ਸੇਵਾ ਨਾ ਹੋਵੇ।"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"ਬਾਇਓਮੈਟ੍ਰਿਕ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ਬਾਇਓਮੈਟ੍ਰਿਕ ਜਾਂ ਸਕ੍ਰੀਨ ਲਾਕ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"ਆਪਣੀ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index c92c2bb45480..0c6eb46afc67 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -355,14 +355,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"dostęp do danych czujnika podstawowych funkcji życiowych"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Powiadomienia"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"pokazuj powiadomienia"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"dane śledzenia XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"dostęp do danych XR dotyczących Ciebie i Twojego otoczenia"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"wrażliwe dane śledzenia XR"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"dostęp do wrażliwych danych śledzenia, takich jak ruchy gałek ocznych"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Pobieranie zawartości okna"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Sprawdzanie zawartości okna, z którego korzystasz."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Włączenie czytania dotykiem"</string>
@@ -658,38 +654,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Zezwala aplikacji na modyfikowanie kolekcji zdjęć."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"odczytywanie lokalizacji z kolekcji multimediów"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Zezwala aplikacji na odczytywanie lokalizacji z kolekcji multimediów."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"śledzenie przybliżonych ruchów gałek ocznych"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Zezwala aplikacji na śledzenie przybliżonych ruchów gałek ocznych."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"śledzenie punktu skupienia wzroku"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Zezwala aplikacji na dostęp do dokładnych danych o ruchach gałek ocznych."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"śledzenie twarzy"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Zezwala aplikacji na dostęp do danych śledzenia twarzy."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"śledzenie rąk"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Zezwala aplikacji na dostęp do danych śledzenia rąk."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"śledzenie ruchów głowy"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Zezwala aplikacji na dostęp do danych śledzenia ruchów głowy."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"analizowanie bliskiego otoczenia"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Zezwala aplikacji na dostęp do danych śledzenia bliskiego otoczenia."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"bardzo szczegółowe analizowanie bliskiego otoczenia"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Zezwala aplikacji na dostęp do bardzo szczegółowych danych śledzenia bliskiego otoczenia."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"dostęp do danych XR, gdy aplikacja nie jest na pierwszym planie"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Zezwala aplikacji na dostęp do danych XR, gdy nie jest ona na pierwszym planie."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Używaj biometrii"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Używaj biometrii lub blokady ekranu"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Potwierdź, że to Ty"</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 99c4375ec5f9..4fe1c96986c0 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"acesse dados do sensor sobre seus sinais vitais"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notificações"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"mostrar notificações"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"Dados de rastreamento de XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"acessar dados de XR sobre você e o ambiente ao seu redor"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"dados de rastreamento sensíveis de XR"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"acessar dados de rastreamento sensíveis, como o olhar"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Acessar conteúdo de uma janela"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspeciona o conteúdo de uma janela com a qual você está interagindo."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Ativar Explorar por toque"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Permite que o app modifique sua coleção de fotos."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"ler locais na sua coleção de mídias"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Permite que o app leia os locais na sua coleção de mídias."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"rastrear seu olhar aproximado"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Permite que o app rastreie seu olhar aproximado."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"rastrear para onde você está olhando"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Permite que o app acesse dados precisos de olhar."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"rastrear seu rosto"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Permite que o app acesse dados de rastreamento do rosto."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"rastrear suas mãos"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Permite que o app acesse dados de rastreamento das mãos."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"rastrear sua cabeça"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Permite que o app acesse dados de rastreamento da cabeça."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"entender o ambiente diretamente ao seu redor"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Permite que o app acesse dados de rastreamento sobre o ambiente diretamente ao seu redor."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"entender o ambiente diretamente ao seu redor com riqueza de detalhes"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Permite que o app acesse dados de rastreamento sobre o ambiente diretamente ao seu redor com riqueza de detalhes."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"acessar dados de XR sem estar em primeiro plano"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Permite que o app acesse dados de XR sem estar em primeiro plano."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Usar biometria"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Usar biometria ou bloqueio de tela"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Confirme que é você"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index a45354643bf5..e17b96f8a5e8 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"aceder a dados do sensor acerca dos seus sinais vitais"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notificações"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"mostrar notificações"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"dados de monitorização de XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"aceder a dados de XR sobre si e o ambiente à sua volta"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"dados de monitoriz. de XR confidenciais"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"aceder a dados de monitorização confidenciais, como o olhar"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Obter conteúdo da janela"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspecionar o conteúdo de uma janela com a qual está a interagir."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Ativar Explorar Através do Toque"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Permite que a app modifique a sua coleção de fotos."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"ler as localizações a partir da sua coleção de multimédia"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Permite que a app leia as localizações a partir da sua coleção de multimédia."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"monitorizar o seu olhar aproximado"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Permite que a app monitorize o seu olhar aproximado."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"monitorizar para onde está a olhar"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Permite que a app aceda a dados precisos do olhar."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"monitorizar o seu rosto"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Permite que a app aceda a dados de monitorização facial."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"monitorizar as suas mãos"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Permite que a app aceda a dados de monitorização das mãos."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"monitorizar a sua cabeça"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Permite que a app aceda a dados de posição da cabeça."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"compreender o seu ambiente imediato"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Permite que a app aceda a dados de monitorização sobre o ambiente diretamente à sua volta."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"compreender o seu ambiente imediato com grande detalhe"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Permite que a app aceda a dados de monitorização sobre o ambiente diretamente à sua volta com detalhes muito precisos."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"aceder aos dados de XR quando não estiver em primeiro plano"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Permite que app aceda a dados de XR quando não está em primeiro plano."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Usar a biometria"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Usar a biometria ou o bloqueio de ecrã"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Confirme a sua identidade"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 99c4375ec5f9..4fe1c96986c0 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"acesse dados do sensor sobre seus sinais vitais"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notificações"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"mostrar notificações"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"Dados de rastreamento de XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"acessar dados de XR sobre você e o ambiente ao seu redor"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"dados de rastreamento sensíveis de XR"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"acessar dados de rastreamento sensíveis, como o olhar"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Acessar conteúdo de uma janela"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspeciona o conteúdo de uma janela com a qual você está interagindo."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Ativar Explorar por toque"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Permite que o app modifique sua coleção de fotos."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"ler locais na sua coleção de mídias"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Permite que o app leia os locais na sua coleção de mídias."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"rastrear seu olhar aproximado"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Permite que o app rastreie seu olhar aproximado."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"rastrear para onde você está olhando"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Permite que o app acesse dados precisos de olhar."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"rastrear seu rosto"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Permite que o app acesse dados de rastreamento do rosto."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"rastrear suas mãos"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Permite que o app acesse dados de rastreamento das mãos."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"rastrear sua cabeça"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Permite que o app acesse dados de rastreamento da cabeça."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"entender o ambiente diretamente ao seu redor"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Permite que o app acesse dados de rastreamento sobre o ambiente diretamente ao seu redor."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"entender o ambiente diretamente ao seu redor com riqueza de detalhes"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Permite que o app acesse dados de rastreamento sobre o ambiente diretamente ao seu redor com riqueza de detalhes."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"acessar dados de XR sem estar em primeiro plano"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Permite que o app acesse dados de XR sem estar em primeiro plano."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Usar biometria"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Usar biometria ou bloqueio de tela"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Confirme que é você"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 28728b5c6a15..596a3ed91ea5 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"să acceseze datele de la senzori despre semnele vitale"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Notificări"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"să afișeze notificări"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"Date de urmărire XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"să acceseze date XR despre tine și mediul din jur;"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"date de urmărire XR sensibile;"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"să acceseze date de urmărire sensibile, cum ar fi privirea;"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"să preia conținutul ferestrei"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Inspectează conținutul unei ferestre cu care interacționezi."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"să activeze funcția Explorează prin atingere"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Permite aplicației să-ți modifice colecția de fotografii."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"să citească locațiile din colecția media"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Permite aplicației să citească locațiile din colecția ta media."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"să-ți urmărească privirea aproximativă;"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Permite aplicației să-ți urmărească privirea aproximativă."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"să urmărească unde te uiți;"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Permite aplicației să acceseze date exacte despre privire."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"să-ți urmărească fața;"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Permite aplicației să acceseze date de urmărire a feței."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"să-ți urmărească mâinile;"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Permite aplicației să acceseze date de urmărire a mâinilor."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"să-ți urmărească mișcările capului;"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Permite aplicației să acceseze date de urmărire a mișcărilor capului."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"să înțeleagă mediul imediat apropiat;"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Permite aplicației să acceseze date de urmărire despre mediul din jurul tău."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"să înțeleagă mediul imediat apropiat în detaliu;"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Permite aplicației să acceseze date de urmărire despre mediul din jurul tău, cu detalii foarte precise."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"să acceseze date XR când nu ești în prim-plan;"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Permite aplicației să acceseze datele XR când nu ești în prim-plan."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Folosește sistemele biometrice"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Folosește sistemele biometrice sau blocarea ecranului"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Confirmă-ți identitatea"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index f587a73836e3..5104ca11097d 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -355,14 +355,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"доступ к данным датчиков о состоянии организма"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Уведомления"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"показ уведомлений"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"данные XR для отслеживания"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"доступ к данным расширенной реальности с информацией о вас и окружающей обстановке"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"конфиденц. данные XR для отслеживания"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"доступ к конфиденциальным данным для отслеживания, например направления взгляда"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Получать содержимое окна"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Анализировать содержимое активного окна."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Включать Изучение касанием"</string>
@@ -658,38 +654,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Приложение сможет вносить изменения в вашу фотоколлекцию."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"Доступ к геоданным в медиаколлекции"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Приложение получит доступ к геоданным в вашей медиаколлекции."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"отслеживание примерного направления взгляда"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Приложение сможет отслеживать примерное направление взгляда."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"отслеживание направления взгляда"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Приложение получит доступ к точным данным о направлении взгляда."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"отслеживание лица"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Приложение получит доступ к данным для отслеживания лица."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"отслеживание рук"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Приложение получит доступ к данным для отслеживания рук."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"отслеживание движения головы"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Приложение получит доступ к данным для отслеживания движений головы."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"понимание обстановки вокруг вас"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Приложение получит доступ к данным для отслеживания обстановки вокруг вас."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"глубокое понимание обстановки вокруг вас"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Приложение получит доступ к подробным данным для отслеживания обстановки вокруг вас."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"доступ к данным XR в фоновом режиме"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Приложение получит доступ к данным расширенной реальности в фоновом режиме."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Использовать биометрию"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Использовать биометрию или блокировку экрана"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Подтвердите, что это вы"</string>
@@ -2302,7 +2282,7 @@
<string name="conversation_title_fallback_group_chat" msgid="456073374993104303">"Групповой чат"</string>
<string name="unread_convo_overflow" msgid="920517615597353833">"<xliff:g id="MAX_UNREAD_COUNT">%1$d</xliff:g>+"</string>
<string name="resolver_personal_tab" msgid="2051260504014442073">"Личный"</string>
- <string name="resolver_work_tab" msgid="2690019516263167035">"Рабочее"</string>
+ <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>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index f30a48331cc7..8df50b7c62c3 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"ඔබේ ජෛව ලක්ෂණ පිළිබඳ සංවේදක දත්ත වෙත පිවිසෙන්න"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"දැනුම්දීම්"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"දැනුම්දීම් පෙන්වන්න"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR ලුහුබැඳීමේ දත්ත"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"ඔබ සහ ඔබ අවට පරිසරය පිළිබඳ XR දත්ත වෙත ප්‍රවේශ වන්න"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"සංවේදී XR ලුහුබැඳීමේ දත්ත"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"ඇස් බැල්ම වැනි සංවේදී ලුහුබැඳීමේ දත්ත වෙත ප්‍රවේශ වීම"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"කවුළු අන්න්තර්ගතය ලබාගන්න"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"ඔබ අන්තර්ක්‍රියාකාරී වන කවුළුවේ අන්තර්ගතය පරීක්ෂා කරන්න."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"ස්පර්ශයෙන් ගවේෂණය සක්‍රිය කරන්න"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"ඔබගේ ඡායාරූප එකතුව වෙනස් කිරීමට යෙදුමට ඉඩ දෙයි."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"ඔබගේ මාධ්‍ය එකතුවෙන් ස්ථාන කියවන්න"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"ඔබගේ මාධ්‍ය එකතුවෙන් ස්ථාන කියවීමට යෙදුමට ඉඩ දෙයි."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"ඔබේ ආසන්න ඇස් බැල්ම ලුහුබඳින්න"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"ඔබගේ ආසන්න ඇස් බැල්ම ලුහුබැඳීමට යෙදුමට ඉඩ දෙයි."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"ඔබ බලන තැන ලුහුබඳින්න"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"යෙදුමට නිරවද්‍ය ඇස් බැල්ම දත්ත වෙත ප්‍රවේශ වීමට ඉඩ දෙයි."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"ඔබේ මුහුණ ලුහුබඳින්න"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"මුහුණු ලුහුබැඳීමේ දත්ත වෙත ප්‍රවේශ වීමට යෙදුමට ඉඩ දෙන්න."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"ඔබේ දෑත් ලුහුබඳින්න"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"හස්තීයව ලුහුබැඳීමේ දත්ත වෙත ප්‍රවේශ වීමට යෙදුමට ඉඩ දෙන්න."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"ඔබේ හිස ලුහුබඳින්න"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"යෙදුමට හිස ලුහුබැඳීමේ දත්ත වෙත ප්‍රවේශ වීමට ඉඩ දෙන්න."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"ඔබේ ආසන්න පරිසරය තේරුම් ගන්න"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"ඔබ වටා ඇති පරිසරය පිළිබඳ ලුහුබැඳීමේ දත්ත වෙත කෙලින්ම ප්‍රවේශ වීමට යෙදුමට ඉඩ දෙන්න."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"ඔබේ ආසන්න පරිසරය ඉතා විස්තරාත්මකව තේරුම් ගන්න"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"ඉතා ඉහළ විස්තර සහිතව ඔබ වටා ඇති පරිසරය පිළිබඳ ලුහුබැඳීමේ දත්ත වෙත ප්‍රවේශ වීමට යෙදුමට ඉඩ දෙයි."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"පෙරබිමෙහි නොමැති විට XR දත්ත වෙත ප්‍රවේශ වන්න"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"පෙරබිමෙහි නොමැති විට XR දත්ත වෙත ප්‍රවේශ වීමට යෙදුමට ඉඩ දෙයි."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"ජෛවමිතික භාවිත කරන්න"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ජෛවමිතික හෝ තිර අගුල භාවිත කරන්න"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"එය ඔබ බව තහවුරු කරන්න"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 49600ced8654..1d5b4e5f111d 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -355,14 +355,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"prístup k dátam senzorov vašich životných funkcií"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Upozornenia"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"zobrazovať upozornenia"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"údaje sledovania UR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"prístup k údajom UR o vás a prostredí okolo vás"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"citlivé údaje sledovania UR"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"prístup k citlivým údajom sledovania, ako je pohľad"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Načítať obsah okna"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Môžete preskúmať obsah okna, s ktorým pracujete."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Zapnúť funkciu Preskúmanie dotykom"</string>
@@ -658,38 +654,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Umožňuje aplikácii upravovať zbierku fotiek."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"čítať polohy zo zbierky médií"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Umožňuje aplikácii čítať polohy zo zbierky médií."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"sledovať približný smer vášho pohľadu"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Umožňuje aplikácii sledovať približný smer vášho pohľadu."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"sledovať, kam sa pozeráte"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Umožňuje aplikácii získať prístup k presným údajom o pohľade."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"sledovať vašu tvár"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Umožňuje aplikácii získať prístup k údajom sledovania tváre."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"sledovať vaše ruky"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Umožňuje aplikácii získať prístup k údajom sledovania rúk."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"sledovať vašu hlavu"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Umožňuje aplikácii získať prístup k údajom sledovania hlavy."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"porozumieť, čo je vo vašom bezprostrednom okolí"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Umožňuje aplikácii získať prístup k údajom sledovania prostredia vo vašom okolí."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"veľmi presne porozumieť, čo je vo vašom okolí"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Umožňuje aplikácii získať prístup k veľmi podrobným údajom sledovania prostredia vo vašom okolí."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"získať k údajom UR, keď aplikácia nie je spustená na popredí"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Umožňuje aplikácii získať prístup k údajom UR, keď nie je na popredí."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Použiť biometrické údaje"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Použiť biometrické údaje alebo zámku obrazovky"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Potvrďte, že ste to vy"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index c8dc4eec6c16..3f9592bbddd0 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -355,14 +355,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"dostop do podatkov tipala o vaših vitalnih znakih"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Obvestila"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"prikaz obvestil"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"Podatki o sledenju za RR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"dostop do podatkov razširjene resničnosti (RR) o vas in vaši okolici"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"občutljivi podatki o sledenju za RR"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"dostop do občutljivih podatkov o sledenju, na primer o smeri pogleda"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Pridobiti vsebino okna"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Preverjanje vsebine okna, ki ga uporabljate."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Vklopiti raziskovanje z dotikom"</string>
@@ -658,38 +654,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Aplikaciji omogoča spreminjanje zbirke fotografij."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"branje lokacij v predstavnostni zbirki"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Aplikaciji omogoča branje lokacij v predstavnostni zbirki."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"sledenje približni smeri pogleda"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Aplikaciji omogoča sledenje približni smeri pogleda."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"sledenje smeri vašega pogleda"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Aplikaciji omogoča dostop do natančnih podatkov o smeri pogleda."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"sledenje obrazu"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Aplikaciji omogoča dostop do podatkov o sledenju obrazu."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"sledenje premikom dlani"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Aplikaciji omogoča dostop do podatkov o sledenju premikom dlani."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"spremljanje premikov glave"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Aplikaciji omogoča dostop do podatkov o spremljanju premikov glave."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"razumevanje vaše neposredne okolice"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Aplikaciji omogoča dostop do podatkov o spremljanju vaše neposredne okolice."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"zelo podrobno razumevanje vaše neposredne okolice"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Aplikaciji omogoča dostop do zelo podrobnih podatkov o spremljanju vaše neposredne okolice."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"dostop do podatkov razširjene resničnosti (RR), ko se aplikacija ne izvaja v ospredju"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Aplikaciji omogoča dostop do podatkov razširjene resničnosti (RR), ko se aplikacija ne izvaja v ospredju."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Uporaba biometrike"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Uporaba biometrike ali odklepanja s poverilnico"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Potrdite, da ste res vi"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 54810231691d..d6ad76bc17fa 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -354,14 +354,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"приступа подацима сензора о виталним функцијама"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Обавештења"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"приказивање обавештења"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"подаци о праћењу проширене стварности"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"приступа подацима проширене стварности о вама и окружењу око вас"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"осетљиви подаци о XR праћењу"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"приступа осетљивим подацима о праћењу, на пример подацима о погледу"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"да преузима садржај прозора"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Проверава садржај прозора са којим остварујете интеракцију."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"да укључи Истраживања додиром"</string>
@@ -657,38 +653,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Дозвољава апликацији да мења колекцију слика."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"читање локација из медијске колекције"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Дозвољава апликацији да чита локације из медијске колекције."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"праћење приближних података о погледу"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Дозвољава апликацији да прати приближне податке о погледу."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"праћење погледа"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Дозвољава апликацији да приступа прецизним подацима о погледу."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"праћење лица"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Дозвољава апликацији да приступа подацима о праћењу лица."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"праћење руку"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Дозвољава апликацији да приступа подацима о праћењу руку."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"праћење главе"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Дозвољава апликацији да приступа подацима о праћењу главе."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"разумевање непосредног окружења"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Дозвољава апликацији да приступа подацима о праћењу вашег непосредног окружења."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"разумевање непосредног окружења са мноштвом детаља"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Дозвољава апликацији да приступа подацима о праћењу вашег непосредног окружења који садрже мноштво детаља."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"приступ подацима проширене стварности када није у првом плану"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Дозвољава апликацији да приступа подацима проширене стварности када није у првом плану."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Користите биометрију"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Користите биометрију или откључавање екрана"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Потврдите идентитет"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 38634d574e03..3d88850b5b0a 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"få åtkomst till sensordata om dina vitalparametrar"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Aviseringar"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"visa aviseringar"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR-spårningsdata"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"få åtkomst till XR-data om dig och din omgivning"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"känslig XR-spårningsdata"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"få åtkomst till känslig spårningsdata, som ögonrörelser"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Hämta fönsterinnehåll"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Granska innehållet i ett fönster som du interagerar med."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Aktivera Explore by touch"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Tillåter att appen gör ändringar i din fotosamling."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"läsa av platser i din mediesamling"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Tillåter att appen läser av platser i din mediesamling."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"spåra dina ungefärliga ögonrörelser"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Tillåter att appen spårar dina ungefärliga ögonrörelser."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"spåra var du tittar"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Tillåter att appen får åtkomst till exakta ögonrörelser."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"spåra ditt ansikte"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Tillåter att appen får åtkomst till data om ansiktsspårning."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"spåra dina händer"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Tillåter att appen får åtkomst till data om handspårning."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"spåra ditt huvud"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Tillåter att appen får åtkomst till data om huvudföljning."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"förstå din omgivning"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Tillåter att appen får åtkomst till spårningsdata om omgivningen runtomkring dig."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"förstå din omgivning i detalj"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Tillåter att appen får åtkomst till spårningsdata om omgivningen runtomkring dig i mycket hög detalj."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"få åtkomst till XR-data när appen inte är i förgrunden"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Tillåter att appen får åtkomst till XR-data när den inte är i förgrunden."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Använd biometri"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Använd biometrisk data eller skärmlåset"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Verifiera din identitet"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index b6eab89286f8..6d67618ff05b 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"fikia data ya kitambuzi kuhusu alama zako muhimu"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Arifa"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"kuonyesha arifa"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"data ya ufuatiliaji wa XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"kufikia data ya XR kukuhusu na mazingira yaliyo karibu nawe"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"data nyeti ya ufuatiliaji wa XR"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"kufikia data nyeti ya ufuatiliaji, kama vile mahali ambako macho yanaangalia"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Kufikia maudhui ya dirisha"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Kuchunguza maudhui ya dirisha unalotumia."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Kuwasha \'Chunguza kwa Kugusa\'"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Inaruhusu programu kubadilisha mkusanyiko wa picha zako."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"kusoma maeneo kwenye mkusanyiko wa vipengee vyako"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Inaruhusu programu kusoma maeneo kwenye mkusanyiko wa vipengee vyako."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"kufuatilia kadirio la data ya mahali ambako macho yanaangalia"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Huruhusu programu ifuatilie kadirio la data ya mahali ambako macho yako yanaangalia."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"kufuatilia mahali unakoangalia"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Huruhusu programu ifikie data mahususi ya mahali ambako macho yako yanaangalia."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"kufuatilia mijongeo ya uso wako"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Huruhusu programu ifikie data ya ufuatiliaji wa mijongeo ya uso."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"kufuatilia mijongeo ya mikono yako"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Huruhusu programu ifikie data ya ufuatiliaji wa mijongeo ya mikono."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"kufuatilia mijongeo ya kichwa chako"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Huruhusu programu ifikie data ya ufuatiliaji wa mijongeo ya kichwa."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"kufahamu mazingira yaliyo karibu nawe"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Huruhusu programu ifikie data ya ufuatiliaji kuhusu mazingira yaliyo karibu nawe."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"kufahamu mazingira yaliyo karibu nawe kwa usahihi zaidi"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Huruhusu programu ifikie data ya ufuatiliaji kuhusu mazingira yaliyo karibu nawe kwa usahihi zaidi."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"kufikia data ya XR wakati haipo mbele ya skrini ya kifaa"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Huruhusu programu ifikie data ya XR wakati haitumiki mbele ya skrini ya kifaa."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Tumia bayometriki"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Tumia bayometriki au mbinu ya kufunga skrini"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Thibitisha kuwa ni wewe"</string>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index d48f4a276391..6a8179cf4b17 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"உங்கள் உடல் இயக்கம் பற்றி உணர்விகள் கூறும் தகவலைப் பார்க்கலாம்"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"அறிவிப்புகள்"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"அறிவிப்புகளைக் காட்டும்"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR கண்காணிப்புத் தரவு"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"உங்களையும் உங்கள் சுற்றுச்சூழலையும் பற்றிய XR தரவை அணுகும்"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"பாதுகாக்க வேண்டிய XR கண்காணிப்புத் தரவு"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"கண் பார்வை போன்ற பாதுகாக்க வேண்டிய கண்காணிப்புத் தரவை அணுகும்"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"சாளர உள்ளடக்கத்தைப் பெறும்"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"நீங்கள் பணியாற்றிக் கொண்டிருக்கும் சாளரத்தின் உள்ளடக்கத்தைப் பார்க்கலாம்."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"தொடுவதன் மூலம் அறிவதை இயக்கும்"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"உங்களின் படத் தொகுப்பை மாற்ற ஆப்ஸை அனுமதிக்கும்."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"மீடியா தொகுப்பிலிருந்து இடங்களை அறிதல்"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"உங்களின் மீடியா தொகுப்பிலிருந்து இடங்களை அறிந்துகொள்ள ஆப்ஸை அனுமதிக்கும்."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"உங்கள் தோராயமான கண் பார்வைத் தரவைக் கண்காணிக்கும்"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"உங்கள் தோராயமான கண் பார்வையின் தரவைக் கண்காணிக்க ஆப்ஸை அனுமதிக்கும்."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"எங்கே பார்க்கிறீர்கள் என்பதைக் கண்காணித்தல்"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"துல்லியமான கண் பார்வையின் தரவை அணுக ஆப்ஸை அனுமதிக்கும்."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"உங்கள் முகத்தைக் கண்காணித்தல்"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"முகக் கண்காணிப்புத் தரவை அணுக ஆப்ஸை அனுமதிக்கும்."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"உங்கள் கைகளைக் கண்காணித்தல்"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"கை அசைவு அறிதல் தரவை அணுக ஆப்ஸை அனுமதிக்கும்."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"உங்கள் தலையைக் கண்காணித்தல்"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"ஹெட் டிராக்கிங் தரவை அணுக ஆப்ஸை அனுமதிக்கும்."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"உங்களின் சுற்றுச்சூழலைப் புரிந்துகொள்ளுதல்"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"உங்களின் சுற்றுச்சூழல் தரவை அணுக ஆப்ஸை அனுமதிக்கும்."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"உங்களின் சுற்றுச்சூழலை மிக விரிவான விவரத்துடன் புரிந்துகொள்ளுதல்"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"உங்கள் சுற்றுச்சூழல் பற்றிய மிக விரிவான விவரங்களுடன் கூடிய தரவை நேரடியாக அணுக ஆப்ஸை அனுமதிக்கும்."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"முன்புலத்தில் இல்லாதபோது XR தரவை அணுகுதல்"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"முன்புலத்தில் இல்லாதபோது XR தரவை அணுக ஆப்ஸை அனுமதிக்கும்."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"பயோமெட்ரிக்ஸைப் பயன்படுத்து"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"பயோமெட்ரிக்ஸையோ திரைப் பூட்டையோ பயன்படுத்து"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"நீங்கள்தான் என உறுதிசெய்க"</string>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index 84e56d2a181e..11611ead7bf2 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"మీ అత్యంత కీలకమైన గుర్తుల గురించి సెన్సార్ డేటాను యాక్సెస్ చేస్తుంది"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"నోటిఫికేషన్‌లు"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"నోటిఫికేషన్‌లను చూపండి"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR ట్రాకింగ్ డేటా"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"మీ గురించి, మీ చుట్టూ ఉన్న పరిసరాల గురించి XR డేటాను యాక్సెస్ చేయండి"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"సున్నితమైన XR ట్రాకింగ్ డేటా"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"కంటి చూపు వంటి సున్నితమైన ట్రాకింగ్ డేటాను యాక్సెస్ చేయండి"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"విండో కంటెంట్‍ను తిరిగి పొందుతుంది"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"మీరు పరస్పర చర్య చేస్తున్న విండో కంటెంట్‌‍ను పరిశీలిస్తుంది."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"తాకడం ద్వారా విశ్లేషణను ఆన్ చేయండి"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"మీ ఫోటో సేకరణను ఎడిట్ చేయడానికి యాప్‌ను అనుమతిస్తుంది."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"మీ మీడియా సేకరణ నుండి లొకేషన్లను చదవండి"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"మీ మీడియా సేకరణ నుండి లొకేషన్లను చదవడానికి యాప్‌ను అనుమతిస్తుంది."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"మీ సుమారు కంటి చూపును ట్రాక్ చేయండి"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"మీ సుమారు కంటి చూపును ట్రాక్ చేయడానికి యాప్‌ను అనుమతిస్తుంది."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"మీరు ఎక్కడ చూస్తున్నారో ట్రాక్ చేయండి"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"కంటి చూపునకు సంబంధించిన ఖచ్చితమైన డేటాను యాక్సెస్ చేయడానికి యాప్‌ను అనుమతిస్తుంది."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"మీ ముఖాన్ని ట్రాక్ చేయండి"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"ఫేస్ ట్రాకింగ్ డేటాను యాక్సెస్ చేయడానికి యాప్‌ను అనుమతిస్తుంది."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"మీ చేతి కదలికలను ట్రాక్ చేయండి"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"హ్యాండ్ ట్రాకింగ్ డేటాను యాక్సెస్ చేయడానికి యాప్‌ను అనుమతిస్తుంది."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"మీ తలను ట్రాక్ చేయండి"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"హెడ్ ట్రాకింగ్ డేటాను యాక్సెస్ చేయడానికి యాప్‌ను అనుమతిస్తుంది."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"మీ చుట్టూ ఉన్న పరిసరాలను అర్థం చేసుకోండి"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"మీ చుట్టూ ఉన్న పర్యావరణం గురించి ట్రాకింగ్ డేటాను నేరుగా యాక్సెస్ చేయడానికి యాప్‌ను అనుమతిస్తుంది."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"మీ చుట్టూ ఉన్న పరిసరాలను చాలా వివరంగా అర్థం చేసుకోండి"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"మీ చుట్టూ ఉన్న పర్యావరణం గురించి ట్రాకింగ్ డేటాను చాలా ఎక్కువ వివరాలతో యాక్సెస్ చేయడానికి యాప్‌ను అనుమతిస్తుంది."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"ముందుభాగంలో లేనప్పుడు XR డేటాను యాక్సెస్ చేయండి"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"ముందుభాగంలో లేనప్పుడు XR డేటాను యాక్సెస్ చేయడానికి యాప్‌ను అనుమతిస్తుంది."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"బయోమెట్రిక్స్‌ను ఉపయోగించండి"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"బయోమెట్రిక్స్‌ను లేదా స్క్రీన్ లాక్‌ను ఉపయోగించండి"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"ఈ చర్య చేస్తోంది మీరేనని వెరిఫై చేయండి"</string>
@@ -715,8 +695,8 @@
<string name="fingerprint_acquired_immobile" msgid="1621891895241888048">"ప్రతిసారి మీ వేలిని కొద్ది కొద్దిగా జరపండి"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
- <string name="fingerprint_error_not_match" msgid="4599441812893438961">"వేలిముద్ర గుర్తించబడలేదు"</string>
- <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"వేలిముద్ర గుర్తించబడలేదు"</string>
+ <string name="fingerprint_error_not_match" msgid="4599441812893438961">"వేలిముద్ర (ఫింగర్-ప్రింట్) మ్యాచ్ కాలేదు"</string>
+ <string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"వేలిముద్ర (ఫింగర్-ప్రింట్) మ్యాచ్ కాలేదు"</string>
<string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ముఖం గుర్తించలేదు. బదులుగా వేలిముద్ర ఉపయోగించండి."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"వేలిముద్ర ప్రమాణీకరించబడింది"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ముఖం ప్రమాణీకరించబడింది"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index e16a28a09964..d854025051bd 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"เข้าถึงข้อมูลเซ็นเซอร์เกี่ยวกับสัญญาณชีพของคุณ"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"การแจ้งเตือน"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"แสดงการแจ้งเตือน"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"ข้อมูลการติดตาม XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"เข้าถึงข้อมูล XR เกี่ยวกับคุณและสภาพแวดล้อมรอบตัว"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"ข้อมูลการติดตาม XR ที่มีความละเอียดอ่อน"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"เข้าถึงข้อมูลการติดตามที่มีความละเอียดอ่อน เช่น การจ้องด้วยตา"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"เรียกข้อมูลเนื้อหาของหน้าต่าง"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"ตรวจสอบเนื้อหาของหน้าต่างที่คุณกำลังโต้ตอบอยู่"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"เปิด \"แตะเพื่อสำรวจ\""</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"อนุญาตให้แอปแก้ไขคอลเล็กชันรูปภาพของคุณ"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"อ่านตำแหน่งจากคอลเล็กชันสื่อของคุณ"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"อนุญาตให้แอปอ่านตำแหน่งจากคอลเล็กชันสื่อของคุณ"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"ติดตามการจ้องด้วยตาโดยประมาณ"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"อนุญาตให้แอปติดตามข้อมูลการจ้องด้วยตาโดยประมาณ"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"ติดตามตำแหน่งที่คุณมอง"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"อนุญาตให้แอปเข้าถึงข้อมูลการจ้องด้วยตาอย่างละเอียด"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"ติดตามการเคลื่อนไหวของใบหน้า"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"อนุญาตให้แอปเข้าถึงข้อมูลการติดตามการเคลื่อนไหวของใบหน้า"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"ติดตามการเคลื่อนไหวของมือ"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"อนุญาตให้แอปเข้าถึงข้อมูลการติดตามการเคลื่อนไหวของมือ"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"ติดตามการเคลื่อนไหวของศีรษะ"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"อนุญาตให้แอปเข้าถึงข้อมูลการติดตามการเคลื่อนไหวของศีรษะ"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"เข้าใจสภาพแวดล้อมที่อยู่ใกล้ตัวคุณ"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"อนุญาตให้แอปเข้าถึงข้อมูลการติดตามเกี่ยวกับสภาพแวดล้อมรอบตัวคุณโดยตรง"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"เข้าใจสภาพแวดล้อมที่อยู่ใกล้ตัวคุณอย่างละเอียด"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"อนุญาตให้แอปเข้าถึงข้อมูลการติดตามเกี่ยวกับสภาพแวดล้อมรอบตัวคุณโดยตรงที่มีรายละเอียดสูงมาก"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"เข้าถึงข้อมูล XR ขณะที่ไม่ได้ทำงานอยู่ในเบื้องหน้า"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"อนุญาตให้แอปเข้าถึงข้อมูล XR ขณะที่ไม่ได้ทำงานอยู่ในเบื้องหน้า"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"ใช้ข้อมูลไบโอเมตริก"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"ใช้ข้อมูลไบโอเมตริกหรือการล็อกหน้าจอ"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"ยืนยันว่าเป็นตัวคุณ"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 98de10643617..78f44c8f0bd9 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"i-access ang data ng sensor tungkol sa iyong vital signs"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Mga Notification"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"magpakita ng mga notification"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"Data ng pag-track ng XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"i-access ang XR data tungkol sa iyo at sa kapaligiran sa paligid mo"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"Sensitibong data ng pag-track ng XR"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"i-access ang sensitibong data sa pag-track, gaya ng pagtitig"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Kunin ang content ng window"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Siyasatin ang nilalaman ng isang window kung saan ka nakikipag-ugnayan."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"I-on ang Explore by Touch"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Pinapayagan ang app na baguhin ang iyong koleksyon ng larawan."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"basahin ang mga lokasyon mula sa iyong koleksyon ng media"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Pinapayagan ang app na basahin ang mga lokasyon mula sa iyong koleksyon ng media."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"i-track ang iyong tinatayang pagtitig"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Nagbibigay-daan sa app na i-track ang iyong tinatayang pagtitig."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"i-track kung saan ka nakatingin"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Nagbibigay-daan sa app na ma-access ang tumpak na data ng pagtitig."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"i-track ang iyong mukha"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Nagbibigay-daan sa app na i-access ang data ng pag-track sa mukha."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"i-track ang iyong mga kamay"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Nagbibigay-daan sa app na i-access ang data ng pag-track sa kamay."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"i-track ang iyong ulo"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Nagbibigay-daan sa app na i-access ang data ng pag-track ng ulo."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"maunawaan ang iyong kapaligiran"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Nagbibigay-daan sa app na i-access ang data ng pag-track tungkol sa kapaligirang direktang nasa paligid mo."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"maunawaan ang iyong kapaligiran sa mataas na detalye"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Binibigyang-daan ang app na i-access ang data ng pag-track tungkol sa kapaligirang direktang nasa paligid mo na may napakataas na detalye."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"i-access ang XR data habang wala sa foreground"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Nagbibigay-daan sa app na i-access ang XR data habang wala sa foreground."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Gumamit ng biometrics"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Gumamit ng biometrics o lock ng screen"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"I-verify na ikaw ito"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 2ec15cac8655..b575d9f996ea 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"hayati belirtilerinizle ilgili sensör verilerine erişme"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Bildirimler"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"bildirimleri göster"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR takip verileri"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"sizinle ve çevrenizdeki ortamla ilgili XR verilerine erişme"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"hassas XR takip verileri"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"göz hareketleri gibi hassas takip verilerine erişme"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Pencere içeriğini alma"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Etkileşim kurduğunuz pencerenin içeriğini inceler."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Dokunarak Keşfet\'i açma"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Uygulamanın fotoğraf koleksiyonunuzu değiştirmesine izin verir."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"medya koleksiyonunuzdaki konumları okuma"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Uygulamanın medya koleksiyonunuzdaki konumları okumasına izin verir."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"yaklaşık göz hareketinizi takip etme"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Uygulamanın, yaklaşık göz hareketinizi takip etmesine izin verir."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"baktığınız noktayı takip etme"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Uygulamanın, tam göz hareketiyle ilgili verilere erişmesine izin verir."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"yüzünüzü takip etme"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Uygulamanın, yüz takibi verilerine erişmesine izin verir."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"ellerinizi takip etme"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Uygulamanın, el takibi verilerine erişmesine izin verir."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"başınızı takip etme"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Uygulamanın, baş takibi verilerine erişmesine izin verir."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"yakın çevrenizi anlama"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Uygulamanın, hemen etrafınızdaki ortamla ilgili takip verilerine erişmesine izin verir."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"yakın çevrenizi ayrıntılı bir şekilde anlama"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Uygulamanın, hemen etrafınızdaki ortamla ilgili takip verilerine çok ayrıntılı bir şekilde erişmesine izin verir."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"ön planda değilken XR verilerine erişme"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Uygulamanın, ön planda değilken XR verilerine erişmesine izin verir."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Biyometri kullan"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biyometri veya ekran kilidi kullan"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Kimliğinizi doğrulayın"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 9aeee9c85ad1..737c245b017a 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -355,14 +355,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"отримувати доступ до інформації датчиків про ваші життєві показники"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Сповіщення"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"показувати сповіщення"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"дані відстеження розширеної реальності"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"отримувати доступ до даних розширеної реальності про вас і оточення"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"чутливі дані відстеж. розшир. реальності"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"отримувати доступ до чутливих даних відстеження, наприклад даних про напрямок погляду"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Отримувати вміст вікна"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Перевіряти вміст вікна, з яким ви взаємодієте."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Увімкнути функцію дослідження дотиком"</string>
@@ -658,38 +654,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Додаток зможе змінювати вашу колекцію фотографій."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"розпізнавати геодані з колекції медіа-вмісту"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Додаток зможе розпізнавати геодані з вашої колекції медіа-вмісту."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"відстежувати приблизний напрямок вашого погляду"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Дозволяє додатку відстежувати приблизний напрямок вашого погляду."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"відстежувати напрямок вашого погляду"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Дозволяє додатку отримувати точні дані про напрямок погляду."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"відстежувати рухи вашого обличчя"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Дозволяє додатку отримувати доступ до даних відстеження рухів обличчя."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"відстежувати ваші руки"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Дозволяє додатку отримувати доступ до даних відстеження рук."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"відстежувати рухи вашої голови"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Дозволяє додатку отримувати доступ до даних відстеження руху голови."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"розпізнавати об’єкти у вашому найближчому оточенні"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Дозволяє додатку отримувати доступ до даних про оточення навколо вас."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"розпізнавати об’єкти у вашому оточенні з високою деталізацією"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Дозволяє додатку отримувати доступ до дуже детальних даних про оточення навколо вас."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"отримувати доступ до даних розширеної реальності у фоновому режимі"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Дозволяє додатку отримувати доступ до даних розширеної реальності у фоновому режимі."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Доступ через біометрію"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Використовувати біометрію або дані для розблокування екрана"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Підтвердьте, що це ви"</string>
@@ -1846,7 +1826,7 @@
<string name="hearing_device_notification_switch_button" msgid="3619524619430941300">"Перемкнути"</string>
<string name="hearing_device_notification_settings_button" msgid="6673651052880279178">"Налаштування"</string>
<string name="user_switched" msgid="7249833311585228097">"Поточний користувач: <xliff:g id="NAME">%1$s</xliff:g>."</string>
- <string name="user_switching_message" msgid="1912993630661332336">"Перехід у режим \"<xliff:g id="NAME">%1$s</xliff:g>\"…"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"Перехід в обліковий запис \"<xliff:g id="NAME">%1$s</xliff:g>\"…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"Вихід з облікового запису користувача <xliff:g id="NAME">%1$s</xliff:g>…"</string>
<string name="owner_name" msgid="8713560351570795743">"Власник"</string>
<string name="guest_name" msgid="8502103277839834324">"Гість"</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index f934b87d9f5a..82292bf7cd79 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"اپنی علامات حیات کے متعلق سنسر ڈیٹا تک رسائی حاصل کریں"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"اطلاعات"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"اطلاعات دکھائیں"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"‏‫XR ٹریکنگ ڈیٹا"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"‏اپنے اور اپنے آس پاس کے ماحول کے بارے میں XR ڈیٹا تک رسائی حاصل کریں"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"‏حساس XR ٹریکنگ ڈیٹا"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"آنکھوں جیسے حساس ٹریکنگ ڈیٹا تک رسائی حاصل کریں"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"ونڈو مواد بازیافت کرنے کی"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"کسی ایسی ونڈو کے مواد کا معائنہ کریں جس کے ساتھ آپ تعامل کر رہے ہیں۔"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"ٹچ کے ذریعے دریافت کریں کو آن کرنے کی"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"ایپ کو آپ کی تصویر کے مجموعے میں ترمیم کی اجازت دیتا ہے۔"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"اپنی میڈيا کے مجموعے سے مقامات پڑھیں"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"ایپ کو آپ کی میڈيا کے مجموعے سے مقامات پڑھنے کی اجازت دیتا ہے۔"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"اپنی آنکھوں کی تخمینی نگاہوں کو ٹریک کریں"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"ایپ کو آپ کی تخمینی نگاہوں کو ٹریک کرنے کی اجازت ملتی ہے۔"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"وہ جگہ ٹریک کریں جہاں آپ دیکھ رہے ہیں"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"ایپ کو آنکھوں کے عین مطابق ڈیٹا تک رسائی کی اجازت ملتی ہے۔"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"اپنے چہرے کو ٹریک کریں"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"ایپ کو ایپس کو فیس ٹریکنگ ڈیٹا تک رسائی کی اجازت ملتی ہے۔"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"اپنے ہاتھوں کو ٹریک کریں"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"ایپ کو ہینڈ ٹریکنگ ڈیٹا تک رسائی کی اجازت ملتی ہے۔"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"اپنے سر کو ٹریک کریں"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"ایپ کو ہیڈ ٹریکنگ ڈیٹا تک رسائی کی اجازت ملتی ہے۔"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"اپنے آس پاس کے ماحول کو سمجھیں"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"ایپ کو براہ راست آپ کے آس پاس کے ماحول کے بارے میں ٹریکنگ ڈیٹا تک رسائی کی اجازت ملتی ہے۔"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"اپنے آس پاس کے ماحول کو اعلیٰ تفصیل سے سمجھیں"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"ایپ کو بہت زیادہ تفصیل کے ساتھ براہ راست آپ کے آس پاس کے ماحول کے بارے میں ٹریکنگ ڈیٹا تک رسائی کی اجازت ملتی ہے۔"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"‏‫XR ڈیٹا تک رسائی حاصل کریں جبکہ پیش منظر میں نہ ہو"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"‏ایپ کو پیش منظر میں نہ ہوتے ہوئے XR ڈیٹا تک رسائی کی اجازت ملتی ہے۔"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"بایو میٹرکس استعمال کریں"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"بایو میٹرکس یا اسکرین لاک استعمال کریں"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"توثیق کریں کہ یہ آپ ہیں"</string>
@@ -1844,7 +1824,7 @@
<string name="hearing_device_notification_switch_button" msgid="3619524619430941300">"سوئچ کریں"</string>
<string name="hearing_device_notification_settings_button" msgid="6673651052880279178">"ترتیبات"</string>
<string name="user_switched" msgid="7249833311585228097">"موجودہ صارف <xliff:g id="NAME">%1$s</xliff:g>۔"</string>
- <string name="user_switching_message" msgid="1912993630661332336">"<xliff:g id="NAME">%1$s</xliff:g> پر سوئچ کیا جا رہا ہے…"</string>
+ <string name="user_switching_message" msgid="1912993630661332336">"‫<xliff:g id="NAME">%1$s</xliff:g> پر سوئچ کیا جا رہا ہے…"</string>
<string name="user_logging_out_message" msgid="7216437629179710359">"<xliff:g id="NAME">%1$s</xliff:g> لاگ آؤٹ ہو رہا ہے…"</string>
<string name="owner_name" msgid="8713560351570795743">"مالک"</string>
<string name="guest_name" msgid="8502103277839834324">"مہمان"</string>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index 942be7901bc7..0e6616582f0a 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"organizm holati haqidagi sezgich ma’lumotlariga kirish"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Bildirishnomalar"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"bildirishnomalarni chiqarish"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR kuzatuv maʼlumotlari"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"siz va atrofingizdagi muhit haqidagi XR maʼlumotlarga kirish"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"nozik XR kuzatuv maʼlumotlari"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"nigoh kabi nozik kuzatuv maʼlumotlariga kirish"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Oynadagi kontentni o‘qiydi"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Joriy oynadagi kontent mazmunini aniqlaydi."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Teginib o‘rganish xizmatini yoqadi"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Ilovaga suratlar to‘plamingizni o‘zgartirishga ruxsat beradi."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"multimedia to‘plamidan joylashuv axborotini o‘qish"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Ilovaga multimedia to‘plamingizdan joylashuv axborotini o‘qishga ruxsat beradi."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"taxminiy nigohni kuzatish"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Ilovaga taxminiy nigohingizni kuzatish imkonini beradi."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"qayerga qarayotganingizni kuzatish"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Ilovaga nigohga oid aniq maʼlumotlarga kirish imkonini beradi."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"yuzingizni kuzatish"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Ilovaga yuz harakatini kuzatish maʼlumotlariga kirish imkonini beradi."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"qoʻllaringiz harakatini kuzatish"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Ilovaga qoʻl harakatini kuzatish maʼlumotlariga kirish imkonini beradi."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"boshingiz harakatini kuzatish"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Ilovaga bosh harakatini kuzatish maʼlumotlariga kirish imkonini beradi."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"atrofingizdagi vaziyatni chuqur tushunish"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Ilovaga bevosita atrofingizdagi muhit haqidagi kuzatuv maʼlumotlariga kirish imkonini beradi."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"atrofingizdagi vaziyatni juda yuqori aniqlikda chuqur tushunish"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Ilovaga bevosita atrofingizdagi juda yuqori aniqlikda muhit haqidagi kuzatuv maʼlumotlariga kirish imkonini beradi."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"XR maʼlumotlariga faol rejimda emasligida kirish"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Ilovaga faol rejimda emasligida XR maʼlumotlariga kirish imkonini beradi."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Biometrik tasdiqlash"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Biometrika yoki ekran qulfi"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Oʻzingizni taniting"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 947a9b4145a8..754e66e817cb 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"truy cập dữ liệu cảm biến về dấu hiệu sinh tồn của bạn"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Thông báo"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"hiển thị thông báo"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"dữ liệu theo dõi XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"truy cập vào dữ liệu XR về bạn và môi trường xung quanh bạn"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"dữ liệu theo dõi XR mang tính nhạy cảm"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"truy cập vào dữ liệu theo dõi mang tính nhạy cảm, chẳng hạn như vị trí ánh mắt"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Truy xuất nội dung cửa sổ"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Kiểm tra nội dung của cửa sổ bạn đang tương tác."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Bật tính năng Khám phá bằng cách chạm"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Cho phép ứng dụng này sửa đổi bộ sưu tập ảnh của bạn."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"đọc vị trí từ bộ sưu tập phương tiện"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Cho phép ứng dụng này đọc vị trí từ bộ sưu tập phương tiện của bạn."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"theo dõi vị trí gần đúng của ánh mắt bạn"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Cho phép ứng dụng này theo dõi vị trí gần đúng của ánh mắt bạn."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"theo dõi vị trí bạn đang nhìn"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Cho phép ứng dụng này truy cập vào dữ liệu vị trí chính xác của ánh mắt."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"theo dõi cử động của khuôn mặt"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Cho phép ứng dụng này truy cập vào dữ liệu theo dõi cử động của khuôn mặt."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"theo dõi cử động của tay"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Cho phép ứng dụng này truy cập vào dữ liệu theo dõi cử động của tay."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"theo dõi cử động của đầu"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Cho phép ứng dụng này truy cập vào dữ liệu theo dõi cử động của đầu."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"hiểu về môi trường ngay xung quanh bạn"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Cho phép ứng dụng này truy cập vào dữ liệu theo dõi về môi trường ngay xung quanh bạn."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"hiểu cụ thể về môi trường ngay xung quanh bạn"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Cho phép ứng dụng này truy cập vào dữ liệu theo dõi cụ thể về môi trường ngay xung quanh bạn."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"truy cập vào dữ liệu XR khi không ở chế độ nền trước"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Cho phép ứng dụng này truy cập vào dữ liệu thực tế mở rộng (XR) khi không ở chế độ nền trước."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Dùng dữ liệu sinh trắc học"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Dùng dữ liệu sinh trắc học hoặc phương thức khóa màn hình"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Xác minh danh tính của bạn"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 46c53eb074ac..1f625ad55355 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"访问与您的生命体征相关的传感器数据"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"通知"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"显示通知"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"扩展现实跟踪数据"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"访问有关您和您周围环境的扩展现实数据"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"敏感的扩展现实跟踪数据"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"访问视线等敏感的跟踪数据"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"检索窗口内容"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"检测您与之互动的窗口的内容。"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"启用触摸浏览"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"允许该应用修改您的照片收藏。"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"从您的媒体收藏中读取位置信息"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"允许该应用从您的媒体收藏中读取位置信息。"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"跟踪您的大致视线"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"允许应用跟踪您的大致视线。"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"跟踪您的视线方向"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"允许应用访问精确的视线跟踪数据。"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"跟踪您的面部表情"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"允许应用访问面部跟踪数据。"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"跟踪您的手部动作"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"允许应用访问手部跟踪数据。"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"跟踪您的头部动作"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"允许应用访问头部追踪数据。"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"了解您周围的环境"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"允许应用访问关于您周围环境的跟踪数据。"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"详细了解您周围的环境"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"允许应用访问关于您周围环境的详细跟踪数据。"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"不在前台时访问扩展现实数据"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"允许应用不在前台时访问扩展现实数据。"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"使用生物识别"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"使用生物识别或屏幕锁定凭据"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"验证是您本人在操作"</string>
@@ -1067,7 +1047,7 @@
<string name="lockscreen_transport_stop_description" msgid="1449552232598355348">"停止"</string>
<string name="lockscreen_transport_rew_description" msgid="7680106856221622779">"快退"</string>
<string name="lockscreen_transport_ffw_description" msgid="4763794746640196772">"快进"</string>
- <string name="emergency_calls_only" msgid="3057351206678279851">"只能拨打紧急呼叫电话"</string>
+ <string name="emergency_calls_only" msgid="3057351206678279851">"只能拨打紧急求助电话"</string>
<string name="lockscreen_network_locked_message" msgid="2814046965899249635">"网络已锁定"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="2867953953604224166">"SIM 卡已用 PUK 码锁定。"</string>
<string name="lockscreen_sim_puk_locked_instructions" msgid="5307979043730860995">"请参阅《用户指南》或与客服人员联系。"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index d013a475539b..fc2783ce95db 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"存取與你生命體徵相關的感應器資料"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"通知"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"顯示通知"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"XR 追蹤資料"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"存取與你和周遭環境相關的 XR 資料"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"敏感的 XR 追蹤資料"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"存取敏感的追蹤資料,例如視線"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"擷取視窗內容"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"檢查你使用中的視窗內容。"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"開啟「輕觸探索」功能"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"允許應用程式修改你的相片集。"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"讀取媒體集的位置"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"允許應用程式讀取媒體集的位置。"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"追蹤視線的概略方向"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"允許應用程式追蹤你概略的視線。"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"追蹤視線"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"允許應用程式存取精確的視線資料。"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"追蹤面孔"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"允許應用程式存取面孔追蹤資料。"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"追蹤手勢"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"允許應用程式存取手勢追蹤資料。"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"追蹤頭部"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"允許應用程式存取頭部追蹤資料。"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"瞭解當下環境"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"允許應用程式存取與你周遭環境相關的追蹤資料。"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"詳細瞭解當下環境"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"允許應用程式存取與你周遭環境相關的極詳細追蹤資料。"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"在非前景執行時存取 XR 資料"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"允許應用程式在非前景執行時存取 XR 資料。"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"使用生物識別"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"使用生物識別或螢幕鎖定"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"驗證是你本人"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index f1c9dcdffe62..c53aaa1b0f48 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"存取與你生命徵象相關的感應器資料"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"通知"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"顯示通知"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"延展實境追蹤資料"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"存取與你和周遭環境相關的延展實境資料"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"敏感的延展實境追蹤資料"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"存取敏感的追蹤資料,例如視線"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"擷取視窗內容"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"檢查你存取的視窗內容。"</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"啟用輕觸探索功能"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"允許應用程式修改你的相片收藏。"</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"讀取你的媒體收藏的位置資訊"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"允許應用程式讀取你的媒體收藏的位置資訊。"</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"追蹤視線的大概方向"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"允許應用程式追蹤你視線的大概方向。"</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"追蹤視線"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"允許應用程式存取視線精確方向的資料。"</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"追蹤臉部"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"允許應用程式存取臉部追蹤資料。"</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"追蹤手勢"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"允許應用程式存取手勢追蹤資料。"</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"追蹤頭部"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"允許應用程式存取頭部追蹤資料。"</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"瞭解當下環境"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"允許應用程式存取與你周遭環境相關的追蹤資料。"</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"深入瞭解當下環境"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"允許應用程式存取與你周遭環境相關的詳細追蹤資料。"</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"在非前景執行時存取延展實境資料"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"允許應用程式在非前景執行時存取延展實境資料。"</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"使用生物辨識功能"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"使用生物辨識或螢幕鎖定功能"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"驗證你的身分"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 5732cec9af95..079bf67bec6b 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -353,14 +353,10 @@
<string name="permgroupdesc_sensors" msgid="2610631290633747752">"finyelela idatha yesizweli mayelana nezimpawu zakho ezibalulekile"</string>
<string name="permgrouplab_notifications" msgid="5472972361980668884">"Izaziso"</string>
<string name="permgroupdesc_notifications" msgid="4608679556801506580">"bonisa izaziso"</string>
- <!-- no translation found for permgrouplab_xr_tracking (7418994009794287471) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking (6777198859446500821) -->
- <skip />
- <!-- no translation found for permgrouplab_xr_tracking_sensitive (1194833982988144536) -->
- <skip />
- <!-- no translation found for permgroupdesc_xr_tracking_sensitive (9178027369004805829) -->
- <skip />
+ <string name="permgrouplab_xr_tracking" msgid="7418994009794287471">"Idatha yokulandelela ye-XR"</string>
+ <string name="permgroupdesc_xr_tracking" msgid="6777198859446500821">"finyelela idatha ye-XR emayelana nawe nendawo ekuzungezile"</string>
+ <string name="permgrouplab_xr_tracking_sensitive" msgid="1194833982988144536">"idatha ebucayi yokulandelela i-XR"</string>
+ <string name="permgroupdesc_xr_tracking_sensitive" msgid="9178027369004805829">"finyelela idatha yokulandelela ebucayi, efana nokubuka kweso"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="7554282892101587296">"Thola okuqukethwe kwewindi"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="6195610527625237661">"Hlola okuqukethwe kwewindi ohlanganyela nalo."</string>
<string name="capability_title_canRequestTouchExploration" msgid="327598364696316213">"Vula ukuhlola ngokuthinta"</string>
@@ -656,38 +652,22 @@
<string name="permdesc_imagesWrite" msgid="5195054463269193317">"Ivumela uhlelo lwakho lokusebenza ukuthi lilungise iqoqo lakho lesithombe."</string>
<string name="permlab_mediaLocation" msgid="7368098373378598066">"funda izindawo kusukela kuqoqo lakho lemidiya"</string>
<string name="permdesc_mediaLocation" msgid="597912899423578138">"Ivumela uhlelo lokusebenza ukuthi lifunde izindawo kusukela kuqoqo lakho lemidiya."</string>
- <!-- no translation found for permlab_eye_tracking_coarse (7989596289790269059) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_coarse (870510233930553355) -->
- <skip />
- <!-- no translation found for permlab_eye_tracking_fine (6914457357027049512) -->
- <skip />
- <!-- no translation found for permdesc_eye_tracking_fine (5788889152304524730) -->
- <skip />
- <!-- no translation found for permlab_face_tracking (2272048395128283324) -->
- <skip />
- <!-- no translation found for permdesc_face_tracking (2622783922311211866) -->
- <skip />
- <!-- no translation found for permlab_hand_tracking (6478233866595566940) -->
- <skip />
- <!-- no translation found for permdesc_hand_tracking (8639715900104966456) -->
- <skip />
- <!-- no translation found for permlab_head_tracking (1309731456372087270) -->
- <skip />
- <!-- no translation found for permdesc_head_tracking (231597390513699188) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_coarse (6518646430502858641) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_coarse (4508880777646198656) -->
- <skip />
- <!-- no translation found for permlab_scene_understanding_fine (409126403264393251) -->
- <skip />
- <!-- no translation found for permdesc_scene_understanding_fine (6223368011593524179) -->
- <skip />
- <!-- no translation found for permlab_xr_tracking_in_background (7117098718465619023) -->
- <skip />
- <!-- no translation found for permdesc_xr_tracking_in_background (939504041387836853) -->
- <skip />
+ <string name="permlab_eye_tracking_coarse" msgid="7989596289790269059">"landelela ukuthi iso lakho libheke ngakuphi"</string>
+ <string name="permdesc_eye_tracking_coarse" msgid="870510233930553355">"Ivumela i-app ukuthi ilandelele ukubuka kwakho kweso."</string>
+ <string name="permlab_eye_tracking_fine" msgid="6914457357027049512">"landelela lapho obheke khona"</string>
+ <string name="permdesc_eye_tracking_fine" msgid="5788889152304524730">"Ivumela i-app ifinyelele idatha yokubuka kweso okunembile."</string>
+ <string name="permlab_face_tracking" msgid="2272048395128283324">"landelela ubuso bakho"</string>
+ <string name="permdesc_face_tracking" msgid="2622783922311211866">"Ivumela i-app ukuthi ifinyelele idatha yokulandelela ukunyakaza kobuso."</string>
+ <string name="permlab_hand_tracking" msgid="6478233866595566940">"landelela izandla zakho"</string>
+ <string name="permdesc_hand_tracking" msgid="8639715900104966456">"Ivumela i-app ukuthi ifinyelele idatha yokulandelela ukunyakaza kwesandla."</string>
+ <string name="permlab_head_tracking" msgid="1309731456372087270">"landelela ikhanda lakho"</string>
+ <string name="permdesc_head_tracking" msgid="231597390513699188">"Ivumela i-app ukuthi ifinyelele idatha yokulandelela ukunyakaza kwekhanda."</string>
+ <string name="permlab_scene_understanding_coarse" msgid="6518646430502858641">"qonda indawo okuyo eseduze"</string>
+ <string name="permdesc_scene_understanding_coarse" msgid="4508880777646198656">"Ivumela i-app ukuthi ifinyelele idatha elandelela indawo ekuzungezile."</string>
+ <string name="permlab_scene_understanding_fine" msgid="409126403264393251">"qonda indawo yakho eseduze ngemininingwane ephezulu"</string>
+ <string name="permdesc_scene_understanding_fine" msgid="6223368011593524179">"Ivumela i-app ukuthi ifinyelele idatha elandelela indawo ekuzungezile ngemininingwane ephezulu kakhulu."</string>
+ <string name="permlab_xr_tracking_in_background" msgid="7117098718465619023">"finyelela idatha ye-XR ngenkathi ungekho ngaphambili"</string>
+ <string name="permdesc_xr_tracking_in_background" msgid="939504041387836853">"Ivumela i-app ukuba ifinyelele idatha ye-XR ngenkathi ingekho ngaphambili."</string>
<string name="biometric_app_setting_name" msgid="3339209978734534457">"Sebenzisa i-biometrics"</string>
<string name="biometric_or_screen_lock_app_setting_name" msgid="5348462421758257752">"Sebenzisa i-biometrics noma ukukhiya isikrini"</string>
<string name="biometric_dialog_default_title" msgid="55026799173208210">"Qinisekisa ukuthi nguwe"</string>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 15230c299973..9983c459d71a 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -853,11 +853,14 @@
element.
<aside class="note"><b>Note:</b>
<ul>
+ <li>To improve the layout of apps on form factors with smallest width >= 600dp, the
+ system ignores this attribute for apps that target Android 16 (API level 36) or
+ higher.</li>
<li>Device manufacturers can configure devices to override (ignore) this attribute
to improve the layout of apps.</li>
<li>On devices with Android 16 (API level 36) or higher installed, virtual device
- owners (limited to select trusted and privileged apps) can configure devices
- they manage to override (ignore) this attribute to improve app layout. See also
+ owners (select trusted and privileged apps) can configure devices they manage to
+ override (ignore) this attribute to improve app layout. See also
<a href="https://source.android.com/docs/core/permissions/app-streaming">
Companion app streaming</a>.</li>
</ul>
@@ -1482,19 +1485,20 @@
<li>On Android 11 (API level 30) and lower, the value of
{@link android.R.attr#screenOrientation} is ignored for resizeable activities
in multi-window mode.</li>
+ <li>To improve the layout of apps on form factors with smallest width >= 600dp, the
+ system ignores this attribute for apps that target Android 16 (API level 36) or
+ higher.</li>
<li>Device manufacturers can configure devices to override (ignore) this attribute
to force apps to resize. The override does not affect the app's support for
- multi-window mode. See
- <a href="{@docRoot}guide/practices/device-compatibility-mode">Device
- compatibility mode</a>.</li>
+ multi-window mode.</li>
<li>On devices with Android 16 (API level 36) or higher installed, virtual device
- owners (limited to select trusted and privileged apps) can configure devices
- they manage to override (ignore) this attribute to force apps to resize. See
- <a href="{@docRoot}guide/practices/device-compatibility-mode">Device
- compatibility mode</a>. See also
- <a href="https://source.android.com/docs/core/permissions/app-streaming">
+ owners (select trusted and privileged apps) can configure devices they manage to
+ override (ignore) this attribute to force apps to resize. See
+ also <a href="https://source.android.com/docs/core/permissions/app-streaming">
Companion app streaming</a>.</li>
</ul>
+ <p>See <a href="{@docRoot}guide/practices/device-compatibility-mode"> Device
+ compatibility mode</a>.</p>
</aside> -->
<attr name="resizeableActivity" format="boolean" />
@@ -1519,18 +1523,19 @@
<ul>
<li>This attribute is ignored if the activity has
{@link android.R.attr#resizeableActivity} set to {@code true}.</li>
+ <li>To improve the layout of apps on form factors with smallest width >= 600dp, the
+ system ignores this attribute for apps that target Android 16 (API level 36) or
+ higher.</li>
<li>Device manufacturers can configure devices to override (ignore) this attribute
- to improve the layout of apps. See
- <a href="{@docRoot}guide/practices/device-compatibility-mode#override_any_orientation_to_user">
- Device compatibility mode</a>.</li>
+ to improve the layout of apps.</li>
<li>On devices with Android 16 (API level 36) or higher installed, virtual device
- owners (limited to select trusted and privileged apps) can configure devices
- they manage to override (ignore) this attribute to improve app layout. See
- <a href="{@docRoot}guide/practices/device-compatibility-mode#override_any_orientation_to_user">
- Device compatibility mode</a>. See also
+ owners (select trusted and privileged apps) can configure devices they manage to
+ override (ignore) this attribute to improve app layout. See
<a href="https://source.android.com/docs/core/permissions/app-streaming">
Companion app streaming</a>.</li>
</ul>
+ <p>See <a href="{@docRoot}guide/practices/device-compatibility-mode"> Device
+ compatibility mode</a>.</p>
</aside> -->
<attr name="maxAspectRatio" format="float" />
@@ -1540,24 +1545,25 @@
<p>Minimum aspect ratio, expressed as (longer dimension / shorter dimension) in decimal
form. For example, if the minimum aspect ratio is 4:3, set value to 1.33.
<p>Value needs to be greater or equal to 1.0, otherwise it is ignored.
- <aside class="note"><b>Note:</b>
+ <aside class="note"><b>Note:</b>
<ul>
<li>This attribute is ignored if the activity has
{@link android.R.attr#resizeableActivity} set to {@code true}.</li>
+ <li>To improve the layout of apps on form factors with smallest width >= 600dp, the
+ system ignores this attribute for apps that target Android 16 (API level 36) or
+ higher.</li>
<li>Device manufacturers can configure devices to override (ignore) this attribute
- to improve the layout of apps. See
- <a href="{@docRoot}guide/practices/device-compatibility-mode">Device
- compatibility mode</a>.</li>
+ to improve the layout of apps.</li>
<li>On devices with Android 16 (API level 36) or higher installed, virtual device
- owners (limited to select trusted and privileged apps) can configure devices
- they manage to override (ignore) this attribute to improve app layout. See
- <a href="{@docRoot}guide/practices/device-compatibility-mode">Device
- compatibility mode</a>. See also
+ owners (select trusted and privileged apps) can configure devices they manage to
+ override (ignore) this attribute to improve app layout. See
<a href="https://source.android.com/docs/core/permissions/app-streaming">
Companion app streaming</a>.</li>
</ul>
+ <p>See <a href="{@docRoot}guide/practices/device-compatibility-mode"> Device
+ compatibility mode</a>.</p>
</aside> -->
- <attr name="minAspectRatio" format="float" />
+ <attr name="minAspectRatio" format="float" />
<!-- This value indicates how tasks rooted at this activity will behave in lockTask mode.
While in lockTask mode the system will not launch non-permitted tasks until
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 864daf9d2072..4e93c44e44bd 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -585,6 +585,8 @@
<!-- Color for various surfaces related to system-wide blur -->
<color name="surface_effect_0">@color/surface_effect_0_color</color>
<color name="surface_effect_1">@color/surface_effect_1_color</color>
+ <color name="surface_effect_2">@color/surface_effect_2_color</color>
+ <color name="surface_effect_3">@color/surface_effect_3_color</color>
<!-- Color for system bars -->
<color name="navigation_bar_compatible">@android:color/black</color>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 2188469bdf03..1cb38bed1388 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -3165,11 +3165,6 @@
1 : boot to the first switchable full user for initial boot (unprovisioned device), else to the headless system user, i.e. user 0. -->
<integer name="config_hsumBootStrategy">0</integer>
- <!-- Whether to boot system with the headless system user, i.e. user 0. If set to true,
- system will be booted with the headless system user, or user 0. It has no effect if device
- is not in Headless System User Mode (HSUM). -->
- <bool name="config_bootToHeadlessSystemUser">false</bool>
-
<!-- Whether multiple admins are allowed on the device. If set to true, new users can be created
with admin privileges and admin privileges can be granted/revoked from existing users. -->
<bool name="config_enableMultipleAdmins">false</bool>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 7a93ca1e9ac6..6a83bae15e76 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -5009,6 +5009,9 @@
<!-- Title of hearing aids feature, shown in the warning dialog about the accessibility shortcut. [CHAR LIMIT=none] -->
<string name="hearing_aids_feature_name">Hearing devices</string>
+ <!-- Title of autoclick feature, shown in the warning dialog about the accessibility shortcut. [CHAR LIMIT=none] -->
+ <string name="autoclick_feature_name">Autoclick</string>
+
<!-- Text of hearing device disconnected state. [CHAR LIMIT=20] -->
<string name="hearing_device_status_disconnected">Disconnected</string>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index b013ffd41ecb..c8c1e73bfba2 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -368,7 +368,6 @@
<java-symbol type="bool" name="config_enableMultipleAdmins"/>
<java-symbol type="bool" name="config_allowAlarmsOnStoppedUsers"/>
<java-symbol type="bool" name="config_showNotificationForBackgroundUserAlarms"/>
- <java-symbol type="bool" name="config_bootToHeadlessSystemUser"/>
<java-symbol type="bool" name="config_omnipresentCommunalUser"/>
<java-symbol type="bool" name="config_enableNewAutoSelectNetworkUI"/>
<java-symbol type="bool" name="config_disableUsbPermissionDialogs"/>
@@ -535,6 +534,8 @@
<java-symbol type="color" name="surface_effect_0" />
<java-symbol type="color" name="surface_effect_1" />
+ <java-symbol type="color" name="surface_effect_2" />
+ <java-symbol type="color" name="surface_effect_3" />
<java-symbol type="color" name="tab_indicator_text_v4" />
<java-symbol type="dimen" name="accessibility_touch_slop" />
@@ -3235,8 +3236,6 @@
<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" />
@@ -3791,6 +3790,7 @@
<java-symbol type="string" name="accessibility_shortcut_disabling_service" />
<java-symbol type="string" name="color_inversion_feature_name" />
<java-symbol type="string" name="color_correction_feature_name" />
+ <java-symbol type="string" name="autoclick_feature_name"/>
<java-symbol type="string" name="reduce_bright_colors_feature_name" />
<java-symbol type="string" name="config_defaultAccessibilityService" />
<java-symbol type="string" name="config_defaultSelectToSpeakService" />
diff --git a/core/tests/coretests/Android.bp b/core/tests/coretests/Android.bp
index 4c49ff849d49..05fb5735972e 100644
--- a/core/tests/coretests/Android.bp
+++ b/core/tests/coretests/Android.bp
@@ -249,8 +249,14 @@ android_library {
android_ravenwood_test {
name: "FrameworksCoreTestsRavenwood",
libs: [
- "android.test.base.stubs.system",
- "android.test.runner.stubs.system",
+ "android.test.base.stubs",
+ "android.test.mock.stubs",
+ "android.test.runner.stubs",
+ "android.view.flags-aconfig-java",
+ "ext",
+ "framework",
+ "framework-res",
+ "org.apache.http.legacy.stubs",
],
static_libs: [
"androidx.annotation_annotation",
@@ -264,6 +270,7 @@ android_ravenwood_test {
"flag-junit",
"flag-junit",
"perfetto_trace_java_protos",
+ "platform-compat-test-rules",
"platform-test-annotations",
"testng",
],
@@ -278,8 +285,12 @@ android_ravenwood_test {
"src/android/content/res/*.java",
"src/android/content/res/*.kt",
"src/android/database/CursorWindowTest.java",
+ "src/android/graphics/*.java",
+ "src/android/graphics/*.kt",
"src/android/os/**/*.java",
"src/android/telephony/PinResultTest.java",
+ "src/android/text/**/*.java",
+ "src/android/text/**/*.kt",
"src/android/util/**/*.java",
"src/android/view/DisplayAdjustmentsTests.java",
"src/android/view/DisplayInfoTest.java",
@@ -288,20 +299,21 @@ android_ravenwood_test {
"src/com/android/internal/os/**/*.java",
"src/com/android/internal/power/EnergyConsumerStatsTest.java",
"src/com/android/internal/ravenwood/**/*.java",
-
- // Pull in R.java from FrameworksCoreTests-resonly, not from FrameworksCoreTests,
- // to avoid having a dependency to FrameworksCoreTests.
- // This way, when updating source files and running this test, we don't need to
- // rebuild the entire FrameworksCoreTests, which would be slow.
"src/com/android/internal/util/**/*.java",
":FrameworksCoreTestDoubles-sources",
":FrameworksCoreTests-aidl",
":FrameworksCoreTests-helpers",
+
+ // Pull in R.java from FrameworksCoreTests-resonly, not from FrameworksCoreTests,
+ // to avoid having a dependency to FrameworksCoreTests.
+ // This way, when updating source files and running this test, we don't need to
+ // rebuild the entire FrameworksCoreTests, which would be slow.
":FrameworksCoreTests-resonly{.aapt.srcjar}",
],
exclude_srcs: [
"src/android/content/res/FontScaleConverterActivityTest.java",
+ "src/android/graphics/GraphicsPerformanceTests.java",
],
resource_apk: "FrameworksCoreTests-resonly",
aidl: {
@@ -313,6 +325,7 @@ android_ravenwood_test {
"res/xml/power_profile_test_cpu_legacy.xml",
"res/xml/power_profile_test_modem.xml",
],
+ sdk_version: "core_platform",
auto_gen_config: true,
team: "trendy_team_ravenwood",
}
diff --git a/core/tests/coretests/src/android/content/res/FontScaleConverterTest.kt b/core/tests/coretests/src/android/content/res/FontScaleConverterTest.kt
index 0e5d92688123..2c614424a9a5 100644
--- a/core/tests/coretests/src/android/content/res/FontScaleConverterTest.kt
+++ b/core/tests/coretests/src/android/content/res/FontScaleConverterTest.kt
@@ -17,10 +17,8 @@
package android.content.res
import android.platform.test.annotations.Presubmit
-import android.platform.test.ravenwood.RavenwoodRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertWithMessage
-import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -28,9 +26,6 @@ import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class FontScaleConverterTest {
- @get:Rule
- val ravenwoodRule: RavenwoodRule = RavenwoodRule.Builder().build()
-
@Test
fun straightInterpolation() {
val table = createTable(8f to 8f, 10f to 10f, 20f to 20f)
diff --git a/core/tests/coretests/src/android/graphics/BitmapFactoryTest.java b/core/tests/coretests/src/android/graphics/BitmapFactoryTest.java
index 84bdbe03df13..263307ee3df7 100644
--- a/core/tests/coretests/src/android/graphics/BitmapFactoryTest.java
+++ b/core/tests/coretests/src/android/graphics/BitmapFactoryTest.java
@@ -20,7 +20,9 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import android.os.MemoryFile;
import android.os.ParcelFileDescriptor;
+import android.platform.test.annotations.DisabledOnRavenwood;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
@@ -37,6 +39,7 @@ public class BitmapFactoryTest {
// tests that we can decode bitmaps from MemoryFiles
@SmallTest
@Test
+ @DisabledOnRavenwood(blockedBy = MemoryFile.class)
public void testBitmapParcelFileDescriptor() throws Exception {
Bitmap bitmap1 = Bitmap.createBitmap(
new int[] { Color.BLUE }, 1, 1, Bitmap.Config.RGB_565);
diff --git a/core/tests/coretests/src/android/graphics/BitmapTest.java b/core/tests/coretests/src/android/graphics/BitmapTest.java
index 0126d367eb20..61c3d7813e88 100644
--- a/core/tests/coretests/src/android/graphics/BitmapTest.java
+++ b/core/tests/coretests/src/android/graphics/BitmapTest.java
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import android.hardware.HardwareBuffer;
+import android.platform.test.annotations.DisabledOnRavenwood;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
@@ -252,6 +253,7 @@ public class BitmapTest {
| GraphicBuffer.USAGE_SW_WRITE_OFTEN;
@Test
+ @DisabledOnRavenwood(blockedBy = HardwareBuffer.class)
public void testWrapHardwareBufferWithSrgbColorSpace() {
GraphicBuffer buffer = GraphicBuffer.create(10, 10, PixelFormat.RGBA_8888, GRAPHICS_USAGE);
Canvas canvas = buffer.lockCanvas();
@@ -265,6 +267,7 @@ public class BitmapTest {
}
@Test
+ @DisabledOnRavenwood(blockedBy = HardwareBuffer.class)
public void testWrapHardwareBufferWithDisplayP3ColorSpace() {
GraphicBuffer buffer = GraphicBuffer.create(10, 10, PixelFormat.RGBA_8888, GRAPHICS_USAGE);
Canvas canvas = buffer.lockCanvas();
diff --git a/core/tests/coretests/src/android/graphics/PaintTest.java b/core/tests/coretests/src/android/graphics/PaintTest.java
index 56760d77e28b..deb5157bb339 100644
--- a/core/tests/coretests/src/android/graphics/PaintTest.java
+++ b/core/tests/coretests/src/android/graphics/PaintTest.java
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import android.platform.test.annotations.DisabledOnRavenwood;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
@@ -97,6 +98,7 @@ public class PaintTest {
@SmallTest
@Test
+ @DisabledOnRavenwood(bug = 391381043)
public void testHintingWidth() {
final Typeface fontTypeface = Typeface.createFromAsset(
InstrumentationRegistry.getInstrumentation().getContext().getAssets(), FONT_PATH);
@@ -143,6 +145,7 @@ public class PaintTest {
}
@Test
+ @DisabledOnRavenwood(bug = 391381043)
public void testHasGlyph_variationSelectors() {
final Typeface fontTypeface = Typeface.createFromAsset(
InstrumentationRegistry.getInstrumentation().getContext().getAssets(),
diff --git a/core/tests/coretests/src/android/graphics/TypefaceSystemFallbackTest.java b/core/tests/coretests/src/android/graphics/TypefaceSystemFallbackTest.java
index 2b6eda8f0988..dc3376e09b15 100644
--- a/core/tests/coretests/src/android/graphics/TypefaceSystemFallbackTest.java
+++ b/core/tests/coretests/src/android/graphics/TypefaceSystemFallbackTest.java
@@ -35,9 +35,9 @@ import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.text.FontConfig;
import android.util.ArrayMap;
-import androidx.test.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
+import androidx.test.platform.app.InstrumentationRegistry;
import com.android.text.flags.Flags;
@@ -63,9 +63,6 @@ import java.util.Map;
@SmallTest
@RunWith(AndroidJUnit4.class)
public class TypefaceSystemFallbackTest {
- private static final String SYSTEM_FONT_DIR = "/system/fonts/";
- private static final String SYSTEM_FONTS_XML = "/system/etc/fonts.xml";
-
private static final String[] TEST_FONT_FILES = {
"a3em.ttf", // Supports "a","b","c". The width of "a" is 3em, others are 1em.
"b3em.ttf", // Supports "a","b","c". The width of "b" is 3em, others are 1em.
@@ -118,8 +115,6 @@ public class TypefaceSystemFallbackTest {
@Before
public void setUp() {
- final AssetManager am =
- InstrumentationRegistry.getInstrumentation().getContext().getAssets();
for (final String fontFile : TEST_FONT_FILES) {
final String sourceInAsset = "fonts/" + fontFile;
copyAssetToFile(sourceInAsset, new File(TEST_FONT_DIR, fontFile));
@@ -216,7 +211,8 @@ public class TypefaceSystemFallbackTest {
FontConfig fontConfig;
try {
fontConfig = FontListParser.parse(
- SYSTEM_FONTS_XML, SYSTEM_FONT_DIR, null, TEST_OEM_DIR, null, 0, 0);
+ SystemFonts.LEGACY_FONTS_XML, SystemFonts.SYSTEM_FONT_DIR,
+ null, TEST_OEM_DIR, null, 0, 0);
} catch (IOException | XmlPullParserException e) {
throw new RuntimeException(e);
}
diff --git a/core/tests/coretests/src/android/graphics/TypefaceTest.java b/core/tests/coretests/src/android/graphics/TypefaceTest.java
index 80efa511d163..0c8b5ab5f3f9 100644
--- a/core/tests/coretests/src/android/graphics/TypefaceTest.java
+++ b/core/tests/coretests/src/android/graphics/TypefaceTest.java
@@ -26,6 +26,7 @@ import android.content.res.Resources;
import android.graphics.fonts.FontFamily;
import android.graphics.fonts.SystemFonts;
import android.os.SharedMemory;
+import android.platform.test.annotations.DisabledOnRavenwood;
import android.text.FontConfig;
import android.util.ArrayMap;
@@ -196,6 +197,7 @@ public class TypefaceTest {
@SmallTest
@Test
+ @DisabledOnRavenwood(blockedBy = SharedMemory.class)
public void testSerialize() throws Exception {
FontConfig fontConfig = SystemFonts.getSystemPreinstalledFontConfig();
Map<String, FontFamily[]> fallbackMap = SystemFonts.buildSystemFallback(fontConfig);
diff --git a/core/tests/coretests/src/android/os/PerfettoTraceTest.java b/core/tests/coretests/src/android/os/PerfettoTraceTest.java
index fb743d2b42ad..69150150d6f9 100644
--- a/core/tests/coretests/src/android/os/PerfettoTraceTest.java
+++ b/core/tests/coretests/src/android/os/PerfettoTraceTest.java
@@ -108,8 +108,8 @@ public class PerfettoTraceTest {
PerfettoTrace.Session session = new PerfettoTrace.Session(true, traceConfig.toByteArray());
PerfettoTrace.instant(FOO_CATEGORY, "event")
- .addFlow(2)
- .addTerminatingFlow(3)
+ .setFlow(2)
+ .setTerminatingFlow(3)
.addArg("long_val", 10000000000L)
.addArg("bool_val", true)
.addArg("double_val", 3.14)
diff --git a/core/tests/coretests/src/android/text/AndroidCharacterTest.java b/core/tests/coretests/src/android/text/AndroidCharacterTest.java
index 1c5986a838fc..819a5fb8fd40 100644
--- a/core/tests/coretests/src/android/text/AndroidCharacterTest.java
+++ b/core/tests/coretests/src/android/text/AndroidCharacterTest.java
@@ -18,6 +18,7 @@ package android.text;
import static org.junit.Assert.assertArrayEquals;
+import android.platform.test.annotations.DisabledOnRavenwood;
import android.platform.test.annotations.Presubmit;
import androidx.test.filters.SmallTest;
@@ -26,6 +27,7 @@ import org.junit.Test;
@Presubmit
@SmallTest
+@DisabledOnRavenwood(reason = "No need to make j.l.Character match behavior of AndroidCharacter")
public class AndroidCharacterTest {
@Test
diff --git a/core/tests/coretests/src/android/text/SpanColorsTest.java b/core/tests/coretests/src/android/text/SpanColorsTest.java
index d2cb8c160d21..4cdbd0886310 100644
--- a/core/tests/coretests/src/android/text/SpanColorsTest.java
+++ b/core/tests/coretests/src/android/text/SpanColorsTest.java
@@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat;
import android.graphics.Color;
import android.graphics.drawable.ShapeDrawable;
+import android.platform.test.annotations.DisabledOnRavenwood;
import android.platform.test.annotations.Presubmit;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
@@ -35,6 +36,7 @@ import org.junit.runner.RunWith;
@Presubmit
@SmallTest
@RunWith(AndroidJUnit4.class)
+@DisabledOnRavenwood(blockedBy = ShapeDrawable.class)
public class SpanColorsTest {
private final TextPaint mWorkPaint = new TextPaint();
private SpanColors mSpanColors;
diff --git a/core/tests/coretests/src/android/text/SpannableTest.java b/core/tests/coretests/src/android/text/SpannableTest.java
index a3e6a7812324..710d1e2a3314 100644
--- a/core/tests/coretests/src/android/text/SpannableTest.java
+++ b/core/tests/coretests/src/android/text/SpannableTest.java
@@ -16,10 +16,10 @@
package android.text;
+import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import android.platform.test.annotations.Presubmit;
-import android.test.MoreAsserts;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
@@ -50,13 +50,13 @@ public abstract class SpannableTest {
// but other spans are not, unless the query region is empty, in
// in which case any abutting spans are returned.
spans = spannable.getSpans(0, 1, Object.class);
- MoreAsserts.assertEquals(new Object[]{emptySpan}, spans);
+ assertArrayEquals(new Object[]{emptySpan}, spans);
spans = spannable.getSpans(0, 2, Object.class);
- MoreAsserts.assertEquals(new Object[]{emptySpan, unemptySpan}, spans);
+ assertArrayEquals(new Object[]{emptySpan, unemptySpan}, spans);
spans = spannable.getSpans(1, 2, Object.class);
- MoreAsserts.assertEquals(new Object[]{emptySpan, unemptySpan}, spans);
+ assertArrayEquals(new Object[]{emptySpan, unemptySpan}, spans);
spans = spannable.getSpans(2, 2, Object.class);
- MoreAsserts.assertEquals(new Object[]{unemptySpan}, spans);
+ assertArrayEquals(new Object[]{unemptySpan}, spans);
}
@Test
diff --git a/core/tests/coretests/src/android/text/StaticLayoutTest.java b/core/tests/coretests/src/android/text/StaticLayoutTest.java
index 3541900dcacf..55f38b2fc2bd 100644
--- a/core/tests/coretests/src/android/text/StaticLayoutTest.java
+++ b/core/tests/coretests/src/android/text/StaticLayoutTest.java
@@ -25,6 +25,7 @@ import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.FontMetricsInt;
import android.os.LocaleList;
+import android.platform.test.annotations.DisabledOnRavenwood;
import android.platform.test.annotations.Presubmit;
import android.text.Layout.Alignment;
import android.text.method.EditorState;
@@ -726,6 +727,7 @@ public class StaticLayoutTest {
}
@Test
+ @DisabledOnRavenwood(bug = 391342883)
public void testLocaleSpanAffectsHyphenation() {
TextPaint paint = new TextPaint();
paint.setTextLocale(Locale.US);
diff --git a/core/tests/coretests/src/android/text/TextUtilsTest.java b/core/tests/coretests/src/android/text/TextUtilsTest.java
index f552265cc507..e38c8800169a 100644
--- a/core/tests/coretests/src/android/text/TextUtilsTest.java
+++ b/core/tests/coretests/src/android/text/TextUtilsTest.java
@@ -18,6 +18,7 @@ package android.text;
import static android.text.TextUtils.formatSimple;
+import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -28,7 +29,6 @@ import static org.junit.Assert.fail;
import android.os.Parcel;
import android.platform.test.annotations.Presubmit;
-import android.test.MoreAsserts;
import android.text.style.StyleSpan;
import android.text.util.Rfc822Token;
import android.text.util.Rfc822Tokenizer;
@@ -237,7 +237,7 @@ public class TextUtilsTest {
for (String s : splitter) {
strings.add(s);
}
- MoreAsserts.assertEquals(expectedStrings, strings.toArray(new String[]{}));
+ assertArrayEquals(expectedStrings, strings.toArray(new String[]{}));
}
@Test
diff --git a/core/tests/coretests/src/android/text/format/DateFormatTest.java b/core/tests/coretests/src/android/text/format/DateFormatTest.java
index 59af6dd20478..c16393c2643d 100644
--- a/core/tests/coretests/src/android/text/format/DateFormatTest.java
+++ b/core/tests/coretests/src/android/text/format/DateFormatTest.java
@@ -74,8 +74,9 @@ public class DateFormatTest {
DateFormatSymbols dfs = DateFormat.getIcuDateFormatSymbols(Locale.US);
assertEquals("AM", dfs.getAmPmStrings()[0]);
assertEquals("PM", dfs.getAmPmStrings()[1]);
- assertEquals("a", dfs.getAmpmNarrowStrings()[0]);
- assertEquals("p", dfs.getAmpmNarrowStrings()[1]);
+ // getAmpmNarrowStrings() is a @CorePlatformApi that we should stop using in framework
+ // assertEquals("a", dfs.getAmpmNarrowStrings()[0]);
+ // assertEquals("p", dfs.getAmpmNarrowStrings()[1]);
}
@Test
diff --git a/core/tests/coretests/src/android/text/format/DateIntervalFormatTest.java b/core/tests/coretests/src/android/text/format/DateIntervalFormatTest.java
index a07d399218e3..e54273479b80 100644
--- a/core/tests/coretests/src/android/text/format/DateIntervalFormatTest.java
+++ b/core/tests/coretests/src/android/text/format/DateIntervalFormatTest.java
@@ -40,6 +40,7 @@ import static org.junit.Assert.assertTrue;
import android.icu.util.Calendar;
import android.icu.util.TimeZone;
import android.icu.util.ULocale;
+import android.platform.test.annotations.DisabledOnRavenwood;
import android.platform.test.annotations.Presubmit;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -686,6 +687,7 @@ public class DateIntervalFormatTest {
}
@Test
+ @DisabledOnRavenwood(bug = 391381043)
public void testIsLibcoreVFlagEnabled() {
// This flag has been fully ramped. It should never be false.
assertTrue(DateIntervalFormat.isLibcoreVFlagEnabled());
diff --git a/core/tests/coretests/src/android/text/format/DateUtilsTest.java b/core/tests/coretests/src/android/text/format/DateUtilsTest.java
index 47be893eb3e9..a853d4a0c051 100644
--- a/core/tests/coretests/src/android/text/format/DateUtilsTest.java
+++ b/core/tests/coretests/src/android/text/format/DateUtilsTest.java
@@ -21,6 +21,7 @@ import static org.junit.Assert.assertEquals;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.LocaleList;
+import android.platform.test.annotations.DisabledOnRavenwood;
import android.platform.test.annotations.Presubmit;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -116,6 +117,7 @@ public class DateUtilsTest {
}
@Test
+ @DisabledOnRavenwood(reason = "DateFormat.set24HourTimePref is not available on host JVM")
public void testFormatSameDayTime() {
// This test assumes a default DateFormat.is24Hour setting.
DateFormat.set24HourTimePref(null);
diff --git a/core/tests/coretests/src/android/text/format/TimeMigrationUtilsTest.java b/core/tests/coretests/src/android/text/format/TimeMigrationUtilsTest.java
index c8cb5f38b185..49f3373d0659 100644
--- a/core/tests/coretests/src/android/text/format/TimeMigrationUtilsTest.java
+++ b/core/tests/coretests/src/android/text/format/TimeMigrationUtilsTest.java
@@ -18,6 +18,7 @@ package android.text.format;
import static org.junit.Assert.assertEquals;
+import android.platform.test.annotations.DisabledOnRavenwood;
import android.platform.test.annotations.Presubmit;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -72,6 +73,7 @@ public class TimeMigrationUtilsTest {
* Compares TimeMigrationUtils.formatSimpleDateTime() with the code it is replacing.
*/
@Test
+ @DisabledOnRavenwood(blockedBy = Time.class)
public void formatMillisAsDateTime_matchesOldBehavior() {
// A selection of interesting locales.
Locale[] locales = new Locale[] {
diff --git a/core/tests/coretests/src/android/text/format/TimeTest.java b/core/tests/coretests/src/android/text/format/TimeTest.java
index 6138ea1926dd..29c58998a635 100644
--- a/core/tests/coretests/src/android/text/format/TimeTest.java
+++ b/core/tests/coretests/src/android/text/format/TimeTest.java
@@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import android.platform.test.annotations.DisabledOnRavenwood;
import android.platform.test.annotations.Presubmit;
import android.util.Log;
import android.util.TimeFormatException;
@@ -34,6 +35,7 @@ import org.junit.runner.RunWith;
@Presubmit
@SmallTest
@RunWith(AndroidJUnit4.class)
+@DisabledOnRavenwood(blockedBy = Time.class)
public class TimeTest {
@Test
diff --git a/core/tests/coretests/src/android/text/method/BackspaceTest.java b/core/tests/coretests/src/android/text/method/BackspaceTest.java
index a7ff244507cb..646e8f92fbb3 100644
--- a/core/tests/coretests/src/android/text/method/BackspaceTest.java
+++ b/core/tests/coretests/src/android/text/method/BackspaceTest.java
@@ -16,6 +16,7 @@
package android.text.method;
+import android.platform.test.annotations.DisabledOnRavenwood;
import android.platform.test.annotations.Presubmit;
import android.text.InputType;
import android.util.KeyUtils;
@@ -41,6 +42,7 @@ import org.junit.runner.RunWith;
@Presubmit
@SmallTest
@RunWith(AndroidJUnit4.class)
+@DisabledOnRavenwood(blockedBy = EditText.class)
public class BackspaceTest {
private EditText mTextView;
diff --git a/core/tests/coretests/src/android/text/method/EditorState.java b/core/tests/coretests/src/android/text/method/EditorState.java
index 4eff7a49ac7b..633fa112c016 100644
--- a/core/tests/coretests/src/android/text/method/EditorState.java
+++ b/core/tests/coretests/src/android/text/method/EditorState.java
@@ -16,7 +16,7 @@
package android.text.method;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -181,4 +181,3 @@ public class EditorState {
Assert.assertEquals(expected.mSelectionEnd, mSelectionEnd);
}
}
-
diff --git a/core/tests/coretests/src/android/text/method/ForwardDeleteTest.java b/core/tests/coretests/src/android/text/method/ForwardDeleteTest.java
index 1e4024d92f97..8044fd7a3432 100644
--- a/core/tests/coretests/src/android/text/method/ForwardDeleteTest.java
+++ b/core/tests/coretests/src/android/text/method/ForwardDeleteTest.java
@@ -16,6 +16,7 @@
package android.text.method;
+import android.platform.test.annotations.DisabledOnRavenwood;
import android.platform.test.annotations.Presubmit;
import android.text.InputType;
import android.util.KeyUtils;
@@ -40,6 +41,7 @@ import org.junit.runner.RunWith;
@Presubmit
@SmallTest
@RunWith(AndroidJUnit4.class)
+@DisabledOnRavenwood(blockedBy = EditText.class)
public class ForwardDeleteTest {
private EditText mTextView;
diff --git a/core/tests/coretests/src/android/text/method/InsertModeTransformationMethodTest.java b/core/tests/coretests/src/android/text/method/InsertModeTransformationMethodTest.java
index e2c19024a840..37ad204ad64c 100644
--- a/core/tests/coretests/src/android/text/method/InsertModeTransformationMethodTest.java
+++ b/core/tests/coretests/src/android/text/method/InsertModeTransformationMethodTest.java
@@ -19,6 +19,7 @@ package android.text.method;
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
+import android.platform.test.annotations.DisabledOnRavenwood;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.annotations.RequiresFlagsEnabled;
@@ -44,6 +45,7 @@ import org.junit.runner.RunWith;
@Presubmit
@SmallTest
@RunWith(AndroidJUnit4.class)
+@DisabledOnRavenwood(blockedBy = View.class)
public class InsertModeTransformationMethodTest {
private static View sView;
private static final String TEXT = "abc def";
diff --git a/core/tests/coretests/src/android/text/util/LinkifyTest.java b/core/tests/coretests/src/android/text/util/LinkifyTest.java
index 52f3b2e0534f..98bdb0b53df6 100644
--- a/core/tests/coretests/src/android/text/util/LinkifyTest.java
+++ b/core/tests/coretests/src/android/text/util/LinkifyTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertTrue;
import android.content.Context;
import android.content.res.Configuration;
import android.os.LocaleList;
+import android.platform.test.annotations.DisabledOnRavenwood;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.method.LinkMovementMethod;
@@ -46,6 +47,7 @@ import java.util.Locale;
*/
@SmallTest
@RunWith(AndroidJUnit4.class)
+@DisabledOnRavenwood(blockedBy = Linkify.class)
public class LinkifyTest {
private static final LocaleList LOCALE_LIST_US = new LocaleList(Locale.US);
diff --git a/core/tests/coretests/src/android/widget/RemoteViewsTest.java b/core/tests/coretests/src/android/widget/RemoteViewsTest.java
index 8b0d3158e9e7..9110898e18c9 100644
--- a/core/tests/coretests/src/android/widget/RemoteViewsTest.java
+++ b/core/tests/coretests/src/android/widget/RemoteViewsTest.java
@@ -22,6 +22,7 @@ import static com.android.internal.R.id.pending_intent_tag;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
@@ -1065,6 +1066,22 @@ public class RemoteViewsTest {
assertEquals(b1Memory + b2Memory, rv.estimateTotalBitmapMemoryUsage());
}
+ @Test
+ public void remoteResponse_FillInIntentNestedIntentKeysCollected() {
+ Intent fillInIntent = new Intent();
+ fillInIntent.putExtra("extraIntent", new Intent());
+ RemoteViews.RemoteResponse.fromFillInIntent(fillInIntent);
+ assertNotEquals(0, fillInIntent.getExtendedFlags()
+ & Intent.EXTENDED_FLAG_NESTED_INTENT_KEYS_COLLECTED);
+
+ fillInIntent = new Intent();
+ fillInIntent.putExtra("extraIntent", new Intent());
+ RemoteViews rv = new RemoteViews(mPackage, R.layout.remote_views_test);
+ rv.setOnClickFillInIntent(R.id.view, fillInIntent);
+ assertNotEquals(0, fillInIntent.getExtendedFlags()
+ & Intent.EXTENDED_FLAG_NESTED_INTENT_KEYS_COLLECTED);
+ }
+
private static LayoutInflater.Factory2 createLayoutInflaterFactory(String viewTypeToReplace,
View replacementView) {
return new LayoutInflater.Factory2() {
diff --git a/core/tests/coretests/src/com/android/internal/os/KernelSingleUidTimeReaderTest.java b/core/tests/coretests/src/com/android/internal/os/KernelSingleUidTimeReaderTest.java
index 3239598eccdc..0ba2d851feb9 100644
--- a/core/tests/coretests/src/com/android/internal/os/KernelSingleUidTimeReaderTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/KernelSingleUidTimeReaderTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import android.annotation.SuppressLint;
import android.platform.test.annotations.IgnoreUnderRavenwood;
import android.platform.test.ravenwood.RavenwoodRule;
import android.util.SparseArray;
@@ -287,6 +288,7 @@ public class KernelSingleUidTimeReaderTest {
0, lastUidCpuTimes.size());
}
+ @SuppressLint("CheckResult")
@Test
public void testAddDeltaFromBpf() {
LongArrayMultiStateCounter counter = new LongArrayMultiStateCounter(2, 5);
diff --git a/core/tests/coretests/src/com/android/internal/os/LongArrayMultiStateCounterTest.java b/core/tests/coretests/src/com/android/internal/os/LongArrayMultiStateCounterTest.java
index 7e5d0a4c2e42..959e121aae9e 100644
--- a/core/tests/coretests/src/com/android/internal/os/LongArrayMultiStateCounterTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/LongArrayMultiStateCounterTest.java
@@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;
+import android.annotation.SuppressLint;
import android.os.BadParcelableException;
import android.os.Parcel;
import android.platform.test.ravenwood.RavenwoodRule;
@@ -176,6 +177,7 @@ public class LongArrayMultiStateCounterTest {
assertCounts(newCounter, 0, new long[]{116, 232, 364, 528});
}
+ @SuppressLint("CheckResult")
private void assertCounts(LongArrayMultiStateCounter counter, int state, long[] expected) {
long[] counts = new long[expected.length];
counter.getCounts(counts, state);
diff --git a/graphics/java/android/graphics/AvoidXfermode.java b/graphics/java/android/graphics/AvoidXfermode.java
index 683c15702427..5296ee848872 100644
--- a/graphics/java/android/graphics/AvoidXfermode.java
+++ b/graphics/java/android/graphics/AvoidXfermode.java
@@ -23,6 +23,7 @@ package android.graphics;
* @removed
*/
@Deprecated
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class AvoidXfermode extends Xfermode {
// these need to match the enum in AvoidXfermode.h on the native side
diff --git a/graphics/java/android/graphics/BLASTBufferQueue.java b/graphics/java/android/graphics/BLASTBufferQueue.java
index 9b9be244cf90..9f605342e378 100644
--- a/graphics/java/android/graphics/BLASTBufferQueue.java
+++ b/graphics/java/android/graphics/BLASTBufferQueue.java
@@ -26,6 +26,7 @@ import java.util.function.Consumer;
/**
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class BLASTBufferQueue {
// Note: This field is accessed by native code.
public long mNativeObject; // BLASTBufferQueue*
diff --git a/graphics/java/android/graphics/BaseCanvas.java b/graphics/java/android/graphics/BaseCanvas.java
index a2a0f4936888..0ca58cc07213 100644
--- a/graphics/java/android/graphics/BaseCanvas.java
+++ b/graphics/java/android/graphics/BaseCanvas.java
@@ -48,6 +48,7 @@ import java.util.Objects;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public abstract class BaseCanvas {
/**
* Should only be assigned in constructors (or setBitmap if software canvas),
diff --git a/graphics/java/android/graphics/BaseRecordingCanvas.java b/graphics/java/android/graphics/BaseRecordingCanvas.java
index 5b1fa7b15e6d..0511bd15dd13 100644
--- a/graphics/java/android/graphics/BaseRecordingCanvas.java
+++ b/graphics/java/android/graphics/BaseRecordingCanvas.java
@@ -44,6 +44,7 @@ import java.util.Objects;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class BaseRecordingCanvas extends Canvas {
public BaseRecordingCanvas(long nativeCanvas) {
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index 0c4ea79dd5be..cd5a54c2fd3f 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -51,6 +51,7 @@ import java.nio.ShortBuffer;
import java.util.ArrayList;
import java.util.WeakHashMap;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class Bitmap implements Parcelable {
private static final String TAG = "Bitmap";
diff --git a/graphics/java/android/graphics/BitmapFactory.java b/graphics/java/android/graphics/BitmapFactory.java
index 1c2014183bb7..a5535c8d8485 100644
--- a/graphics/java/android/graphics/BitmapFactory.java
+++ b/graphics/java/android/graphics/BitmapFactory.java
@@ -41,6 +41,7 @@ import java.io.InputStream;
* Creates Bitmap objects from various sources, including files, streams,
* and byte-arrays.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class BitmapFactory {
private static final int DECODE_BUFFER_SIZE = 16 * 1024;
diff --git a/graphics/java/android/graphics/BitmapRegionDecoder.java b/graphics/java/android/graphics/BitmapRegionDecoder.java
index 29112af9516b..9b3f7158a3e5 100644
--- a/graphics/java/android/graphics/BitmapRegionDecoder.java
+++ b/graphics/java/android/graphics/BitmapRegionDecoder.java
@@ -37,6 +37,7 @@ import java.io.InputStream;
* to get a decoded Bitmap of the specified region.
*
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class BitmapRegionDecoder {
private long mNativeBitmapRegionDecoder;
private boolean mRecycled;
diff --git a/graphics/java/android/graphics/BitmapShader.java b/graphics/java/android/graphics/BitmapShader.java
index dcfff62459ab..ac3543a403cc 100644
--- a/graphics/java/android/graphics/BitmapShader.java
+++ b/graphics/java/android/graphics/BitmapShader.java
@@ -31,6 +31,7 @@ import java.lang.annotation.RetentionPolicy;
* Shader used to draw a bitmap as a texture. The bitmap can be repeated or
* mirrored by setting the tiling mode.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class BitmapShader extends Shader {
/**
* Prevent garbage collection.
diff --git a/graphics/java/android/graphics/BlendMode.java b/graphics/java/android/graphics/BlendMode.java
index c6ae680d01bf..c07af4e23b6f 100644
--- a/graphics/java/android/graphics/BlendMode.java
+++ b/graphics/java/android/graphics/BlendMode.java
@@ -19,6 +19,7 @@ package android.graphics;
import android.annotation.NonNull;
import android.annotation.Nullable;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public enum BlendMode {
/**
diff --git a/graphics/java/android/graphics/BlendModeColorFilter.java b/graphics/java/android/graphics/BlendModeColorFilter.java
index d4e23732bdc3..d5dd0d3c5330 100644
--- a/graphics/java/android/graphics/BlendModeColorFilter.java
+++ b/graphics/java/android/graphics/BlendModeColorFilter.java
@@ -23,6 +23,7 @@ import android.annotation.NonNull;
* A color filter that can be used to tint the source pixels using a single
* color and a specific {@link BlendMode}.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class BlendModeColorFilter extends ColorFilter {
@ColorInt final int mColor;
diff --git a/graphics/java/android/graphics/BlurMaskFilter.java b/graphics/java/android/graphics/BlurMaskFilter.java
index f3064f872041..22ed524e8ec0 100644
--- a/graphics/java/android/graphics/BlurMaskFilter.java
+++ b/graphics/java/android/graphics/BlurMaskFilter.java
@@ -22,6 +22,7 @@ package android.graphics;
* inside, or straddles, the original mask's border, is controlled by the
* Blur enum.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class BlurMaskFilter extends MaskFilter {
public enum Blur {
diff --git a/graphics/java/android/graphics/Camera.java b/graphics/java/android/graphics/Camera.java
index 46640d7222ca..27b695c8c77f 100644
--- a/graphics/java/android/graphics/Camera.java
+++ b/graphics/java/android/graphics/Camera.java
@@ -21,6 +21,7 @@ package android.graphics;
* generate a matrix that can be applied, for instance, on a
* {@link Canvas}.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Camera {
/**
* Creates a new camera, with empty transformations.
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index 28c2ca36fd2e..9137150b104c 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -54,6 +54,7 @@ import java.lang.annotation.RetentionPolicy;
* <a href="{@docRoot}guide/topics/graphics/2d-graphics.html">
* Canvas and Drawables</a> developer guide.</p></div>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Canvas extends BaseCanvas {
private static int sCompatibilityVersion = 0;
private static boolean sCompatibilityRestore = false;
diff --git a/graphics/java/android/graphics/CanvasProperty.java b/graphics/java/android/graphics/CanvasProperty.java
index e949584b0659..755161d387cc 100644
--- a/graphics/java/android/graphics/CanvasProperty.java
+++ b/graphics/java/android/graphics/CanvasProperty.java
@@ -25,6 +25,7 @@ import com.android.internal.util.VirtualRefBasePtr;
* TODO: Make public?
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class CanvasProperty<T> {
private VirtualRefBasePtr mProperty;
diff --git a/graphics/java/android/graphics/ColorFilter.java b/graphics/java/android/graphics/ColorFilter.java
index 7050325997b6..918f26dfe640 100644
--- a/graphics/java/android/graphics/ColorFilter.java
+++ b/graphics/java/android/graphics/ColorFilter.java
@@ -23,6 +23,7 @@ import libcore.util.NativeAllocationRegistry;
* each pixel drawn with that paint. This is an abstract class that should
* never be used directly.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class ColorFilter {
private static class NoImagePreloadHolder {
diff --git a/graphics/java/android/graphics/ColorMatrixColorFilter.java b/graphics/java/android/graphics/ColorMatrixColorFilter.java
index bfdf3187c575..cb78a8384994 100644
--- a/graphics/java/android/graphics/ColorMatrixColorFilter.java
+++ b/graphics/java/android/graphics/ColorMatrixColorFilter.java
@@ -27,6 +27,7 @@ import android.os.Build;
*
* @see ColorMatrix
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class ColorMatrixColorFilter extends ColorFilter {
@UnsupportedAppUsage
private final ColorMatrix mMatrix = new ColorMatrix();
diff --git a/graphics/java/android/graphics/Compatibility.java b/graphics/java/android/graphics/Compatibility.java
index 747fbf111b4b..f89a4f7810c1 100644
--- a/graphics/java/android/graphics/Compatibility.java
+++ b/graphics/java/android/graphics/Compatibility.java
@@ -21,6 +21,7 @@ package android.graphics;
* specified by the app.
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class Compatibility {
private Compatibility() {}
diff --git a/graphics/java/android/graphics/ComposePathEffect.java b/graphics/java/android/graphics/ComposePathEffect.java
index 7d59ecea948e..b380d2e78d4c 100644
--- a/graphics/java/android/graphics/ComposePathEffect.java
+++ b/graphics/java/android/graphics/ComposePathEffect.java
@@ -16,6 +16,7 @@
package android.graphics;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class ComposePathEffect extends PathEffect {
/**
diff --git a/graphics/java/android/graphics/ComposeShader.java b/graphics/java/android/graphics/ComposeShader.java
index e7145686247e..57a11d232ac5 100644
--- a/graphics/java/android/graphics/ComposeShader.java
+++ b/graphics/java/android/graphics/ComposeShader.java
@@ -22,6 +22,7 @@ import android.annotation.NonNull;
/** A subclass of shader that returns the composition of two other shaders, combined by
an {@link android.graphics.Xfermode} subclass.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class ComposeShader extends Shader {
Shader mShaderA;
diff --git a/graphics/java/android/graphics/CornerPathEffect.java b/graphics/java/android/graphics/CornerPathEffect.java
index 8f4d7d9b1c49..37f0d2979e5e 100644
--- a/graphics/java/android/graphics/CornerPathEffect.java
+++ b/graphics/java/android/graphics/CornerPathEffect.java
@@ -16,6 +16,7 @@
package android.graphics;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class CornerPathEffect extends PathEffect {
/**
diff --git a/graphics/java/android/graphics/DashPathEffect.java b/graphics/java/android/graphics/DashPathEffect.java
index ef3ebe8089ca..ff3c376be29d 100644
--- a/graphics/java/android/graphics/DashPathEffect.java
+++ b/graphics/java/android/graphics/DashPathEffect.java
@@ -16,6 +16,7 @@
package android.graphics;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class DashPathEffect extends PathEffect {
/**
diff --git a/graphics/java/android/graphics/DiscretePathEffect.java b/graphics/java/android/graphics/DiscretePathEffect.java
index 3b3c9c9be6c2..77f984589896 100644
--- a/graphics/java/android/graphics/DiscretePathEffect.java
+++ b/graphics/java/android/graphics/DiscretePathEffect.java
@@ -16,6 +16,7 @@
package android.graphics;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class DiscretePathEffect extends PathEffect {
/**
diff --git a/graphics/java/android/graphics/DrawFilter.java b/graphics/java/android/graphics/DrawFilter.java
index c7fdcb22c71d..505a830d725b 100644
--- a/graphics/java/android/graphics/DrawFilter.java
+++ b/graphics/java/android/graphics/DrawFilter.java
@@ -22,6 +22,7 @@ package android.graphics;
* can disable/enable antialiasing, or change the color for everything this is
* drawn.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class DrawFilter {
/**
diff --git a/graphics/java/android/graphics/EmbossMaskFilter.java b/graphics/java/android/graphics/EmbossMaskFilter.java
index 003678ae5a3c..f0a661f57291 100644
--- a/graphics/java/android/graphics/EmbossMaskFilter.java
+++ b/graphics/java/android/graphics/EmbossMaskFilter.java
@@ -16,6 +16,7 @@
package android.graphics;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class EmbossMaskFilter extends MaskFilter {
/**
* Create an emboss maskfilter
diff --git a/graphics/java/android/graphics/FontFamily.java b/graphics/java/android/graphics/FontFamily.java
index 88f0e8ef8a94..09022ee35e64 100644
--- a/graphics/java/android/graphics/FontFamily.java
+++ b/graphics/java/android/graphics/FontFamily.java
@@ -41,6 +41,7 @@ import java.nio.channels.FileChannel;
* @deprecated Use {@link android.graphics.fonts.FontFamily} instead.
*/
@Deprecated
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class FontFamily {
private static String TAG = "FontFamily";
diff --git a/graphics/java/android/graphics/FontListParser.java b/graphics/java/android/graphics/FontListParser.java
index 13c4a94cb9b6..8d0f12866bcf 100644
--- a/graphics/java/android/graphics/FontListParser.java
+++ b/graphics/java/android/graphics/FontListParser.java
@@ -48,6 +48,7 @@ import java.util.regex.Pattern;
* Parser for font config files.
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class FontListParser {
private static final String TAG = "FontListParser";
diff --git a/graphics/java/android/graphics/ForceDarkType.java b/graphics/java/android/graphics/ForceDarkType.java
index 396b03703bb9..d21aef30a45c 100644
--- a/graphics/java/android/graphics/ForceDarkType.java
+++ b/graphics/java/android/graphics/ForceDarkType.java
@@ -29,6 +29,7 @@ import java.lang.annotation.RetentionPolicy;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class ForceDarkType {
/**
* Force dark disabled: normal, default operation.
diff --git a/graphics/java/android/graphics/FrameInfo.java b/graphics/java/android/graphics/FrameInfo.java
index 3b8f46630344..520213892d01 100644
--- a/graphics/java/android/graphics/FrameInfo.java
+++ b/graphics/java/android/graphics/FrameInfo.java
@@ -38,6 +38,7 @@ import java.lang.annotation.RetentionPolicy;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class FrameInfo {
public long[] frameInfo = new long[FRAME_INFO_SIZE];
diff --git a/graphics/java/android/graphics/Gainmap.java b/graphics/java/android/graphics/Gainmap.java
index 63ca3b8313ce..7fc13db85659 100644
--- a/graphics/java/android/graphics/Gainmap.java
+++ b/graphics/java/android/graphics/Gainmap.java
@@ -86,6 +86,7 @@ import java.lang.annotation.RetentionPolicy;
* for these functions cancels out and does not affect the result, so other bases may be used
* if preferred.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class Gainmap implements Parcelable {
/** @hide */
diff --git a/graphics/java/android/graphics/GraphicBuffer.java b/graphics/java/android/graphics/GraphicBuffer.java
index 6705b25ab0ec..4982851c65de 100644
--- a/graphics/java/android/graphics/GraphicBuffer.java
+++ b/graphics/java/android/graphics/GraphicBuffer.java
@@ -28,6 +28,7 @@ import android.os.Parcelable;
* @hide
*/
@SuppressWarnings("UnusedDeclaration")
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class GraphicBuffer implements Parcelable {
// Note: keep usage flags in sync with GraphicBuffer.h and gralloc.h
public static final int USAGE_SW_READ_NEVER = 0x0;
diff --git a/graphics/java/android/graphics/GraphicsProtos.java b/graphics/java/android/graphics/GraphicsProtos.java
index 6bc41d39ff98..fa7eaf946845 100644
--- a/graphics/java/android/graphics/GraphicsProtos.java
+++ b/graphics/java/android/graphics/GraphicsProtos.java
@@ -24,6 +24,7 @@ import android.util.proto.ProtoOutputStream;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class GraphicsProtos {
/** GraphicsProtos can never be an instance */
private GraphicsProtos() {}
diff --git a/graphics/java/android/graphics/GraphicsStatsService.java b/graphics/java/android/graphics/GraphicsStatsService.java
index 7a012bcde799..d0b9998e18c8 100644
--- a/graphics/java/android/graphics/GraphicsStatsService.java
+++ b/graphics/java/android/graphics/GraphicsStatsService.java
@@ -74,6 +74,7 @@ import java.util.TimeZone;
* for the process to use.
*
* @hide */
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class GraphicsStatsService extends IGraphicsStats.Stub {
public static final String GRAPHICS_STATS_SERVICE = "graphicsstats";
diff --git a/graphics/java/android/graphics/HardwareBufferRenderer.java b/graphics/java/android/graphics/HardwareBufferRenderer.java
index e04f13c9b922..81798709b7c6 100644
--- a/graphics/java/android/graphics/HardwareBufferRenderer.java
+++ b/graphics/java/android/graphics/HardwareBufferRenderer.java
@@ -55,6 +55,7 @@ import java.util.function.Consumer;
* HardwareBufferRenderer will never clear contents before each draw invocation so previous contents
* in the {@link HardwareBuffer} target will be preserved across renders.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class HardwareBufferRenderer implements AutoCloseable {
private static final ColorSpace DEFAULT_COLORSPACE = ColorSpace.get(Named.SRGB);
diff --git a/graphics/java/android/graphics/HardwareRenderer.java b/graphics/java/android/graphics/HardwareRenderer.java
index ef6b72871415..3444f84c20af 100644
--- a/graphics/java/android/graphics/HardwareRenderer.java
+++ b/graphics/java/android/graphics/HardwareRenderer.java
@@ -79,6 +79,7 @@ import sun.misc.Cleaner;
* Failure to do so will cause the render thread to stall on that surface, blocking all
* HardwareRenderer instances.</p>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class HardwareRenderer {
private static final String LOG_TAG = "HardwareRenderer";
diff --git a/graphics/java/android/graphics/HardwareRendererObserver.java b/graphics/java/android/graphics/HardwareRendererObserver.java
index d5a6a2fe158a..99263780f407 100644
--- a/graphics/java/android/graphics/HardwareRendererObserver.java
+++ b/graphics/java/android/graphics/HardwareRendererObserver.java
@@ -28,6 +28,7 @@ import java.lang.ref.WeakReference;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class HardwareRendererObserver {
private final long[] mFrameMetrics;
private final Handler mHandler;
diff --git a/graphics/java/android/graphics/ImageDecoder.java b/graphics/java/android/graphics/ImageDecoder.java
index 639517996724..419929a39007 100644
--- a/graphics/java/android/graphics/ImageDecoder.java
+++ b/graphics/java/android/graphics/ImageDecoder.java
@@ -44,6 +44,7 @@ import android.media.MediaFormat;
import android.net.Uri;
import android.os.Build;
import android.os.Trace;
+import android.ravenwood.annotation.RavenwoodIgnore;
import android.system.ErrnoException;
import android.system.Os;
import android.util.DisplayMetrics;
@@ -173,6 +174,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
* });
* </pre>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class ImageDecoder implements AutoCloseable {
/**
* Source of encoded image data.
@@ -1987,6 +1989,7 @@ public final class ImageDecoder implements AutoCloseable {
* Check if HEVC decoder is supported by the device.
*/
@SuppressWarnings("AndroidFrameworkCompatChange")
+ @RavenwoodIgnore(blockedBy = MediaCodecList.class)
private static boolean isHevcDecoderSupported() {
synchronized (sIsHevcDecoderSupportedLock) {
if (sIsHevcDecoderSupportedInitialized) {
@@ -2010,6 +2013,7 @@ public final class ImageDecoder implements AutoCloseable {
* Checks if the device supports decoding 10-bit AV1.
*/
@SuppressWarnings("AndroidFrameworkCompatChange") // This is not an app-visible API.
+ @RavenwoodIgnore(blockedBy = MediaCodecList.class)
private static boolean isP010SupportedForAV1() {
synchronized (sIsP010SupportedLock) {
if (sIsP010SupportedFlagsInitialized) {
@@ -2025,6 +2029,7 @@ public final class ImageDecoder implements AutoCloseable {
* This method is called by JNI.
*/
@SuppressWarnings("unused")
+ @RavenwoodIgnore(blockedBy = MediaCodecList.class)
private static boolean isP010SupportedForHEVC() {
synchronized (sIsP010SupportedLock) {
if (sIsP010SupportedFlagsInitialized) {
diff --git a/graphics/java/android/graphics/ImageFormat.java b/graphics/java/android/graphics/ImageFormat.java
index b4899f975f43..4c9f5ac6ba92 100644
--- a/graphics/java/android/graphics/ImageFormat.java
+++ b/graphics/java/android/graphics/ImageFormat.java
@@ -24,6 +24,7 @@ import com.android.internal.camera.flags.Flags;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class ImageFormat {
/** @hide */
@Retention(RetentionPolicy.SOURCE)
diff --git a/graphics/java/android/graphics/LayerRasterizer.java b/graphics/java/android/graphics/LayerRasterizer.java
index 25155ab284fb..1a44248d01b0 100644
--- a/graphics/java/android/graphics/LayerRasterizer.java
+++ b/graphics/java/android/graphics/LayerRasterizer.java
@@ -20,6 +20,7 @@ package android.graphics;
* @removed feature is not supported by hw-accerlerated or PDF backends
*/
@Deprecated
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class LayerRasterizer extends Rasterizer {
public LayerRasterizer() { }
diff --git a/graphics/java/android/graphics/LeakyTypefaceStorage.java b/graphics/java/android/graphics/LeakyTypefaceStorage.java
index 618e60d442d7..25a843696cc5 100644
--- a/graphics/java/android/graphics/LeakyTypefaceStorage.java
+++ b/graphics/java/android/graphics/LeakyTypefaceStorage.java
@@ -32,6 +32,7 @@ import java.util.ArrayList;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class LeakyTypefaceStorage {
private static final Object sLock = new Object();
diff --git a/graphics/java/android/graphics/LightingColorFilter.java b/graphics/java/android/graphics/LightingColorFilter.java
index fe73a1a70b9c..1afdc7706396 100644
--- a/graphics/java/android/graphics/LightingColorFilter.java
+++ b/graphics/java/android/graphics/LightingColorFilter.java
@@ -40,6 +40,7 @@ import android.os.Build;
* </pre>
* The result is pinned to the <code>[0..255]</code> range for each channel.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class LightingColorFilter extends ColorFilter {
@ColorInt
private int mMul;
diff --git a/graphics/java/android/graphics/LinearGradient.java b/graphics/java/android/graphics/LinearGradient.java
index 087937144b97..c6566c9b27fe 100644
--- a/graphics/java/android/graphics/LinearGradient.java
+++ b/graphics/java/android/graphics/LinearGradient.java
@@ -24,6 +24,7 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.os.Build;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class LinearGradient extends Shader {
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float mX0;
diff --git a/graphics/java/android/graphics/MaskFilter.java b/graphics/java/android/graphics/MaskFilter.java
index d4743155729e..b490650e4d0c 100644
--- a/graphics/java/android/graphics/MaskFilter.java
+++ b/graphics/java/android/graphics/MaskFilter.java
@@ -21,6 +21,7 @@ package android.graphics;
* an alpha-channel mask before drawing it. A subclass of MaskFilter may be
* installed into a Paint. Blur and emboss are implemented as subclasses of MaskFilter.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class MaskFilter {
protected void finalize() throws Throwable {
diff --git a/graphics/java/android/graphics/Mesh.java b/graphics/java/android/graphics/Mesh.java
index 6be8332e784b..f4d841b161fa 100644
--- a/graphics/java/android/graphics/Mesh.java
+++ b/graphics/java/android/graphics/Mesh.java
@@ -37,6 +37,7 @@ import java.nio.ShortBuffer;
* for the mesh. Once generated, a mesh object can be drawn through
* {@link Canvas#drawMesh(Mesh, BlendMode, Paint)}
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Mesh {
private long mNativeMeshWrapper;
private boolean mIsIndexed;
diff --git a/graphics/java/android/graphics/MeshSpecification.java b/graphics/java/android/graphics/MeshSpecification.java
index b1aae7f37c31..9c7e948dfc1b 100644
--- a/graphics/java/android/graphics/MeshSpecification.java
+++ b/graphics/java/android/graphics/MeshSpecification.java
@@ -72,6 +72,7 @@ import java.lang.annotation.RetentionPolicy;
* These should be kept in mind when generating a mesh specification, as exceeding them will
* lead to errors.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class MeshSpecification {
long mNativeMeshSpec;
diff --git a/graphics/java/android/graphics/Movie.java b/graphics/java/android/graphics/Movie.java
index 9c9535d16aab..cefe391f2d2c 100644
--- a/graphics/java/android/graphics/Movie.java
+++ b/graphics/java/android/graphics/Movie.java
@@ -27,6 +27,7 @@ import java.io.InputStream;
* @deprecated Prefer {@link android.graphics.drawable.AnimatedImageDrawable}.
*/
@Deprecated
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Movie {
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private long mNativeMovie;
diff --git a/graphics/java/android/graphics/NinePatch.java b/graphics/java/android/graphics/NinePatch.java
index 382269f74366..00df23fe76ba 100644
--- a/graphics/java/android/graphics/NinePatch.java
+++ b/graphics/java/android/graphics/NinePatch.java
@@ -32,6 +32,7 @@ import android.compat.annotation.UnsupportedAppUsage;
* using a WYSIWYG graphics editor.
* </p>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class NinePatch {
/**
* Struct of inset information attached to a 9 patch bitmap.
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index 3d4dccf095f5..a0ca0988e03c 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -66,6 +66,7 @@ import java.util.Objects;
* The Paint class holds the style and color information about how to draw
* geometries, text and bitmaps.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Paint {
private static final String TAG = "Paint";
diff --git a/graphics/java/android/graphics/PaintFlagsDrawFilter.java b/graphics/java/android/graphics/PaintFlagsDrawFilter.java
index 232661113b5a..f4c49b11ea96 100644
--- a/graphics/java/android/graphics/PaintFlagsDrawFilter.java
+++ b/graphics/java/android/graphics/PaintFlagsDrawFilter.java
@@ -16,6 +16,7 @@
package android.graphics;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class PaintFlagsDrawFilter extends DrawFilter {
/**
* Subclass of DrawFilter that affects every paint by first clearing
diff --git a/graphics/java/android/graphics/PathDashPathEffect.java b/graphics/java/android/graphics/PathDashPathEffect.java
index 2b6a6edcc266..dc92e6caabcd 100644
--- a/graphics/java/android/graphics/PathDashPathEffect.java
+++ b/graphics/java/android/graphics/PathDashPathEffect.java
@@ -16,6 +16,7 @@
package android.graphics;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class PathDashPathEffect extends PathEffect {
public enum Style {
diff --git a/graphics/java/android/graphics/PathEffect.java b/graphics/java/android/graphics/PathEffect.java
index 3292501e6324..9bb71935cfd0 100644
--- a/graphics/java/android/graphics/PathEffect.java
+++ b/graphics/java/android/graphics/PathEffect.java
@@ -21,6 +21,7 @@ package android.graphics;
* the geometry of a drawing primitive before it is transformed by the
* canvas' matrix and drawn.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class PathEffect {
protected void finalize() throws Throwable {
diff --git a/graphics/java/android/graphics/PathIterator.java b/graphics/java/android/graphics/PathIterator.java
index d7caabf9f91b..1ed70d02d140 100644
--- a/graphics/java/android/graphics/PathIterator.java
+++ b/graphics/java/android/graphics/PathIterator.java
@@ -34,6 +34,7 @@ import java.util.Iterator;
* <code>PathIterator</code> can be used to query a given {@link Path} object, to discover its
* operations and point values.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class PathIterator implements Iterator<PathIterator.Segment> {
private final float[] mPointsArray;
@@ -47,9 +48,11 @@ public class PathIterator implements Iterator<PathIterator.Segment> {
private static final boolean IS_DALVIK = "dalvik".equalsIgnoreCase(
System.getProperty("java.vm.name"));
- private static final NativeAllocationRegistry sRegistry =
- NativeAllocationRegistry.createMalloced(
- PathIterator.class.getClassLoader(), nGetFinalizer());
+ private static class NoImagePreloadHolder {
+ private static final NativeAllocationRegistry sRegistry =
+ NativeAllocationRegistry.createMalloced(
+ PathIterator.class.getClassLoader(), nGetFinalizer());
+ }
/**
* The <code>Verb</code> indicates the operation for a given segment of a path. These
@@ -69,6 +72,11 @@ public class PathIterator implements Iterator<PathIterator.Segment> {
public static final int VERB_CLOSE = 5;
public static final int VERB_DONE = 6;
+
+ static {
+ // Keep <cinit> exist in bytecode
+ }
+
/**
* Returns a {@link PathIterator} object for this path, which can be used to query the
* data (operations and points) in the path. Iterators can only be used on Path objects
@@ -90,7 +98,7 @@ public class PathIterator implements Iterator<PathIterator.Segment> {
mPointsArray = new float[POINT_ARRAY_SIZE];
mPointsAddress = 0;
}
- sRegistry.registerNativeAllocation(this, mNativeIterator);
+ NoImagePreloadHolder.sRegistry.registerNativeAllocation(this, mNativeIterator);
}
/**
diff --git a/graphics/java/android/graphics/PathMeasure.java b/graphics/java/android/graphics/PathMeasure.java
index 2c6cfa5c2e3d..4d123db41ee7 100644
--- a/graphics/java/android/graphics/PathMeasure.java
+++ b/graphics/java/android/graphics/PathMeasure.java
@@ -16,6 +16,7 @@
package android.graphics;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class PathMeasure {
private Path mPath;
diff --git a/graphics/java/android/graphics/Picture.java b/graphics/java/android/graphics/Picture.java
index ee4165b8da05..54eb2bc659bc 100644
--- a/graphics/java/android/graphics/Picture.java
+++ b/graphics/java/android/graphics/Picture.java
@@ -33,6 +33,7 @@ import java.io.OutputStream;
* <p class="note"><strong>Note:</strong> Prior to API level 23 a picture cannot
* be replayed on a hardware accelerated canvas.</p>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Picture {
private PictureCanvas mRecordingCanvas;
// TODO: Figure out if this was a false-positive
diff --git a/graphics/java/android/graphics/PixelXorXfermode.java b/graphics/java/android/graphics/PixelXorXfermode.java
index 27884e07ecfb..64278525bb1f 100644
--- a/graphics/java/android/graphics/PixelXorXfermode.java
+++ b/graphics/java/android/graphics/PixelXorXfermode.java
@@ -20,6 +20,7 @@ package android.graphics;
* @removed
*/
@Deprecated
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class PixelXorXfermode extends Xfermode {
public PixelXorXfermode(int opColor) {
diff --git a/graphics/java/android/graphics/PorterDuff.java b/graphics/java/android/graphics/PorterDuff.java
index eb940e2f9017..730a804e17c3 100644
--- a/graphics/java/android/graphics/PorterDuff.java
+++ b/graphics/java/android/graphics/PorterDuff.java
@@ -26,6 +26,7 @@ import android.compat.annotation.UnsupportedAppUsage;
*
* Consider using {@link BlendMode} instead as it provides a wider variety of tinting options
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class PorterDuff {
/**
* {@usesMathJax}
diff --git a/graphics/java/android/graphics/PorterDuffColorFilter.java b/graphics/java/android/graphics/PorterDuffColorFilter.java
index 0700f217ecf0..777ef6ce906b 100644
--- a/graphics/java/android/graphics/PorterDuffColorFilter.java
+++ b/graphics/java/android/graphics/PorterDuffColorFilter.java
@@ -25,6 +25,7 @@ import android.os.Build;
* A color filter that can be used to tint the source pixels using a single
* color and a specific {@link PorterDuff Porter-Duff composite mode}.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class PorterDuffColorFilter extends ColorFilter {
@ColorInt
private int mColor;
diff --git a/graphics/java/android/graphics/PorterDuffXfermode.java b/graphics/java/android/graphics/PorterDuffXfermode.java
index 83d0507a5074..e10d7370d6f9 100644
--- a/graphics/java/android/graphics/PorterDuffXfermode.java
+++ b/graphics/java/android/graphics/PorterDuffXfermode.java
@@ -23,6 +23,7 @@ package android.graphics;
* information on the available alpha compositing and blending modes.</p>
*
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class PorterDuffXfermode extends Xfermode {
/**
* Create an xfermode that uses the specified porter-duff mode.
diff --git a/graphics/java/android/graphics/PostProcessor.java b/graphics/java/android/graphics/PostProcessor.java
index 6fed39b9975d..066214ac6cd6 100644
--- a/graphics/java/android/graphics/PostProcessor.java
+++ b/graphics/java/android/graphics/PostProcessor.java
@@ -37,6 +37,7 @@ import android.graphics.drawable.Drawable;
*
* <p>Supplied to ImageDecoder via {@link ImageDecoder#setPostProcessor setPostProcessor}.</p>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public interface PostProcessor {
/**
* Do any processing after (for example) decoding.
diff --git a/graphics/java/android/graphics/RadialGradient.java b/graphics/java/android/graphics/RadialGradient.java
index e582e66e1627..06e92eae9c82 100644
--- a/graphics/java/android/graphics/RadialGradient.java
+++ b/graphics/java/android/graphics/RadialGradient.java
@@ -24,6 +24,7 @@ import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Build;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class RadialGradient extends Shader {
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float mX;
diff --git a/graphics/java/android/graphics/Rasterizer.java b/graphics/java/android/graphics/Rasterizer.java
index 575095426563..5e67da50a40d 100644
--- a/graphics/java/android/graphics/Rasterizer.java
+++ b/graphics/java/android/graphics/Rasterizer.java
@@ -24,6 +24,7 @@ package android.graphics;
/**
* @removed feature is not supported by hw-accerlerated or PDF backends
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Rasterizer {
protected void finalize() throws Throwable { }
diff --git a/graphics/java/android/graphics/RecordingCanvas.java b/graphics/java/android/graphics/RecordingCanvas.java
index cc5b3b94e0fa..a56f461e511a 100644
--- a/graphics/java/android/graphics/RecordingCanvas.java
+++ b/graphics/java/android/graphics/RecordingCanvas.java
@@ -33,6 +33,7 @@ import dalvik.annotation.optimization.CriticalNative;
* {@link RenderNode#endRecording()} is called. It must not be retained beyond that as it is
* internally reused.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class RecordingCanvas extends BaseRecordingCanvas {
// The recording canvas pool should be large enough to handle a deeply nested
// view hierarchy because display lists are generated recursively.
diff --git a/graphics/java/android/graphics/Region.java b/graphics/java/android/graphics/Region.java
index 29708738d2db..e2215d4bf300 100644
--- a/graphics/java/android/graphics/Region.java
+++ b/graphics/java/android/graphics/Region.java
@@ -23,6 +23,7 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.util.Pools.SynchronizedPool;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Region implements Parcelable {
private static final int MAX_POOL_SIZE = 10;
diff --git a/graphics/java/android/graphics/RegionIterator.java b/graphics/java/android/graphics/RegionIterator.java
index 443b23c1b5fc..5d74487e5a8e 100644
--- a/graphics/java/android/graphics/RegionIterator.java
+++ b/graphics/java/android/graphics/RegionIterator.java
@@ -16,6 +16,7 @@
package android.graphics;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class RegionIterator {
/**
diff --git a/graphics/java/android/graphics/RenderEffect.java b/graphics/java/android/graphics/RenderEffect.java
index b8a46856601e..06bfb82ef630 100644
--- a/graphics/java/android/graphics/RenderEffect.java
+++ b/graphics/java/android/graphics/RenderEffect.java
@@ -30,6 +30,7 @@ import libcore.util.NativeAllocationRegistry;
* Additionally a {@link RenderEffect} can be applied to a View's backing RenderNode through
* {@link android.view.View#setRenderEffect(RenderEffect)}
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class RenderEffect {
private static class RenderEffectHolder {
diff --git a/graphics/java/android/graphics/RenderNode.java b/graphics/java/android/graphics/RenderNode.java
index 03a8b306f99d..fa41876187cf 100644
--- a/graphics/java/android/graphics/RenderNode.java
+++ b/graphics/java/android/graphics/RenderNode.java
@@ -192,6 +192,7 @@ import java.lang.ref.WeakReference;
* top-level content is desired, and finally calling {@link Surface#unlockCanvasAndPost(Canvas)}.
* </p>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class RenderNode {
// Use a Holder to allow static initialization in the boot image.
diff --git a/graphics/java/android/graphics/RuntimeColorFilter.java b/graphics/java/android/graphics/RuntimeColorFilter.java
index a64acfe767a9..06aecc3f2c49 100644
--- a/graphics/java/android/graphics/RuntimeColorFilter.java
+++ b/graphics/java/android/graphics/RuntimeColorFilter.java
@@ -37,6 +37,7 @@ import com.android.graphics.hwui.flags.Flags;
* </pre>
*/
@FlaggedApi(Flags.FLAG_RUNTIME_COLOR_FILTERS_BLENDERS)
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class RuntimeColorFilter extends ColorFilter {
private String mAgsl;
diff --git a/graphics/java/android/graphics/RuntimeShader.java b/graphics/java/android/graphics/RuntimeShader.java
index db2376e008f5..6464f72490c4 100644
--- a/graphics/java/android/graphics/RuntimeShader.java
+++ b/graphics/java/android/graphics/RuntimeShader.java
@@ -248,6 +248,7 @@ import libcore.util.NativeAllocationRegistry;
* the bitmap), remember that the coordinates are local to the canvas.</p>
*
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class RuntimeShader extends Shader {
private static class NoImagePreloadHolder {
diff --git a/graphics/java/android/graphics/RuntimeXfermode.java b/graphics/java/android/graphics/RuntimeXfermode.java
index c8a0b1a11339..1e20bd352244 100644
--- a/graphics/java/android/graphics/RuntimeXfermode.java
+++ b/graphics/java/android/graphics/RuntimeXfermode.java
@@ -39,6 +39,7 @@ import libcore.util.NativeAllocationRegistry;
* </pre>
*/
@FlaggedApi(Flags.FLAG_RUNTIME_COLOR_FILTERS_BLENDERS)
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class RuntimeXfermode extends Xfermode {
private static class NoImagePreloadHolder {
diff --git a/graphics/java/android/graphics/Shader.java b/graphics/java/android/graphics/Shader.java
index 4d6beadc0fdd..369fab45bf69 100644
--- a/graphics/java/android/graphics/Shader.java
+++ b/graphics/java/android/graphics/Shader.java
@@ -29,6 +29,7 @@ import libcore.util.NativeAllocationRegistry;
* paint.setShader(shader). After that any object (other than a bitmap) that is
* drawn with that paint will get its color(s) from the shader.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Shader {
private static class NoImagePreloadHolder {
diff --git a/graphics/java/android/graphics/SumPathEffect.java b/graphics/java/android/graphics/SumPathEffect.java
index 8fedc317c428..3543e101fb38 100644
--- a/graphics/java/android/graphics/SumPathEffect.java
+++ b/graphics/java/android/graphics/SumPathEffect.java
@@ -16,6 +16,7 @@
package android.graphics;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class SumPathEffect extends PathEffect {
/**
diff --git a/graphics/java/android/graphics/SurfaceTexture.java b/graphics/java/android/graphics/SurfaceTexture.java
index 5caedba364be..df384ead58fb 100644
--- a/graphics/java/android/graphics/SurfaceTexture.java
+++ b/graphics/java/android/graphics/SurfaceTexture.java
@@ -78,6 +78,7 @@ import java.lang.ref.WeakReference;
* frame-available callback is called on an arbitrary thread, so unless special care is taken {@link
* #updateTexImage} should not be called directly from the callback.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class SurfaceTexture {
private final Looper mCreatorLooper;
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
diff --git a/graphics/java/android/graphics/SweepGradient.java b/graphics/java/android/graphics/SweepGradient.java
index 3a29395b1717..94219259a69d 100644
--- a/graphics/java/android/graphics/SweepGradient.java
+++ b/graphics/java/android/graphics/SweepGradient.java
@@ -23,6 +23,7 @@ import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Build;
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class SweepGradient extends Shader {
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private float mCx;
diff --git a/graphics/java/android/graphics/TableMaskFilter.java b/graphics/java/android/graphics/TableMaskFilter.java
index 204f9705852a..ca7627c40031 100644
--- a/graphics/java/android/graphics/TableMaskFilter.java
+++ b/graphics/java/android/graphics/TableMaskFilter.java
@@ -21,6 +21,7 @@ import android.compat.annotation.UnsupportedAppUsage;
/**
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TableMaskFilter extends MaskFilter {
public TableMaskFilter(byte[] table) {
diff --git a/graphics/java/android/graphics/TemporaryBuffer.java b/graphics/java/android/graphics/TemporaryBuffer.java
index ef3f7f704e0d..681c48ea9f71 100644
--- a/graphics/java/android/graphics/TemporaryBuffer.java
+++ b/graphics/java/android/graphics/TemporaryBuffer.java
@@ -23,6 +23,7 @@ import com.android.internal.util.ArrayUtils;
/**
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TemporaryBuffer {
@UnsupportedAppUsage
public static char[] obtain(int len) {
diff --git a/graphics/java/android/graphics/TextureLayer.java b/graphics/java/android/graphics/TextureLayer.java
index ac1bd6902062..981b78a7b5b8 100644
--- a/graphics/java/android/graphics/TextureLayer.java
+++ b/graphics/java/android/graphics/TextureLayer.java
@@ -29,6 +29,7 @@ import com.android.internal.util.VirtualRefBasePtr;
*
* @hide TODO: Make this a SystemApi for b/155905258
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class TextureLayer implements AutoCloseable {
private HardwareRenderer mRenderer;
private VirtualRefBasePtr mFinalizer;
diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java
index 874b847c709c..d1aca34c7b8d 100644
--- a/graphics/java/android/graphics/Typeface.java
+++ b/graphics/java/android/graphics/Typeface.java
@@ -42,6 +42,7 @@ import android.os.SystemProperties;
import android.os.Trace;
import android.provider.FontRequest;
import android.provider.FontsContract;
+import android.ravenwood.annotation.RavenwoodReplace;
import android.system.ErrnoException;
import android.system.OsConstants;
import android.text.FontConfig;
@@ -86,6 +87,7 @@ import java.util.Objects;
* textSize, textSkewX, textScaleX to specify
* how text appears when drawn (and measured).
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Typeface {
private static String TAG = "Typeface";
@@ -93,9 +95,11 @@ public class Typeface {
/** @hide */
public static final boolean ENABLE_LAZY_TYPEFACE_INITIALIZATION = true;
- private static final NativeAllocationRegistry sRegistry =
- NativeAllocationRegistry.createMalloced(
- Typeface.class.getClassLoader(), nativeGetReleaseFunc());
+ private static class NoImagePreloadHolder {
+ static final NativeAllocationRegistry sRegistry =
+ NativeAllocationRegistry.createMalloced(
+ Typeface.class.getClassLoader(), nativeGetReleaseFunc());
+ }
/** The default NORMAL typeface object */
public static final Typeface DEFAULT = null;
@@ -1284,7 +1288,7 @@ public class Typeface {
}
native_instance = ni;
- mCleaner = sRegistry.registerNativeAllocation(this, native_instance);
+ mCleaner = NoImagePreloadHolder.sRegistry.registerNativeAllocation(this, native_instance);
mStyle = nativeGetStyle(ni);
mWeight = nativeGetWeight(ni);
mIsVariationInstance = nativeIsVariationInstance(ni);
@@ -1560,9 +1564,23 @@ public class Typeface {
}
static {
+ staticInitializer();
+ }
+
+ @RavenwoodReplace(reason = "Prevent circular reference on host side JVM", bug = 337329128)
+ private static void staticInitializer() {
+ init();
+ }
+
+ private static void staticInitializer$ravenwood() {
+ /* no-op */
+ }
+
+ /** @hide */
+ public static void init() {
// Preload Roboto-Regular.ttf in Zygote for improving app launch performance.
- preloadFontFile("/system/fonts/Roboto-Regular.ttf");
- preloadFontFile("/system/fonts/RobotoStatic-Regular.ttf");
+ preloadFontFile(SystemFonts.SYSTEM_FONT_DIR + "Roboto-Regular.ttf");
+ preloadFontFile(SystemFonts.SYSTEM_FONT_DIR + "RobotoStatic-Regular.ttf");
String locale = SystemProperties.get("persist.sys.locale", "en-US");
String script = ULocale.addLikelySubtags(ULocale.forLanguageTag(locale)).getScript();
@@ -1642,6 +1660,21 @@ public class Typeface {
setSystemFontMap(typefaceMap);
}
+ /**
+ * {@link #loadPreinstalledSystemFontMap()} does not actually initialize the native
+ * system font APIs. Add a new method to actually load the font files without going
+ * through SharedMemory.
+ *
+ * @hide
+ */
+ public static void loadNativeSystemFonts() {
+ synchronized (SYSTEM_FONT_MAP_LOCK) {
+ for (var type : sSystemFontMap.values()) {
+ nativeAddFontCollections(type.native_instance);
+ }
+ }
+ }
+
static {
if (!ENABLE_LAZY_TYPEFACE_INITIALIZATION) {
loadPreinstalledSystemFontMap();
diff --git a/graphics/java/android/graphics/Xfermode.java b/graphics/java/android/graphics/Xfermode.java
index fb689e4cb9c2..eda9e3c1055d 100644
--- a/graphics/java/android/graphics/Xfermode.java
+++ b/graphics/java/android/graphics/Xfermode.java
@@ -28,4 +28,5 @@ package android.graphics;
* specified in the Modes enum. When an Xfermode is assigned to a Paint, then
* objects drawn with that paint have the xfermode applied.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class Xfermode {}
diff --git a/graphics/java/android/graphics/YuvImage.java b/graphics/java/android/graphics/YuvImage.java
index b0c7f202f23a..2b7f40493e8d 100644
--- a/graphics/java/android/graphics/YuvImage.java
+++ b/graphics/java/android/graphics/YuvImage.java
@@ -32,6 +32,7 @@ import java.io.OutputStream;
* To compress a rectangle region in the YUV data, users have to specify the
* region by left, top, width and height.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class YuvImage {
/**
diff --git a/graphics/java/android/graphics/fonts/Font.java b/graphics/java/android/graphics/fonts/Font.java
index 2893177aafc5..8be340005543 100644
--- a/graphics/java/android/graphics/fonts/Font.java
+++ b/graphics/java/android/graphics/fonts/Font.java
@@ -44,6 +44,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
+import java.nio.channels.Channels;
import java.nio.channels.FileChannel;
import java.util.Arrays;
import java.util.Collections;
@@ -54,6 +55,7 @@ import java.util.Set;
/**
* A font class can be used for creating FontFamily.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class Font {
private static final String TAG = "Font";
@@ -293,7 +295,14 @@ public final class Font {
int capacity = assetStream.available();
ByteBuffer buffer = ByteBuffer.allocateDirect(capacity);
buffer.order(ByteOrder.nativeOrder());
- assetStream.read(buffer.array(), buffer.arrayOffset(), assetStream.available());
+ if (buffer.hasArray()) {
+ assetStream.read(buffer.array(), buffer.arrayOffset(), assetStream.available());
+ } else {
+ // Direct buffer does not have a backing array on Ravenwood,
+ // wrap it with a channel and read from it
+ var ch = Channels.newChannel(assetStream);
+ ch.read(buffer.duplicate());
+ }
if (assetStream.read() != -1) {
throw new IOException("Unable to access full contents of " + path);
diff --git a/graphics/java/android/graphics/fonts/FontCustomizationParser.java b/graphics/java/android/graphics/fonts/FontCustomizationParser.java
index b7bf0553bcc6..732a5f3bfce4 100644
--- a/graphics/java/android/graphics/fonts/FontCustomizationParser.java
+++ b/graphics/java/android/graphics/fonts/FontCustomizationParser.java
@@ -43,6 +43,7 @@ import java.util.Map;
*
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class FontCustomizationParser {
private static final String TAG = "FontCustomizationParser";
diff --git a/graphics/java/android/graphics/fonts/FontFamily.java b/graphics/java/android/graphics/fonts/FontFamily.java
index 5a7b0bbca399..0ab46398c924 100644
--- a/graphics/java/android/graphics/fonts/FontFamily.java
+++ b/graphics/java/android/graphics/fonts/FontFamily.java
@@ -66,6 +66,7 @@ import java.util.Set;
* </p>
*
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class FontFamily {
private static final String TAG = "FontFamily";
diff --git a/graphics/java/android/graphics/fonts/FontFileUtil.java b/graphics/java/android/graphics/fonts/FontFileUtil.java
index abcafb666576..305ab3b39995 100644
--- a/graphics/java/android/graphics/fonts/FontFileUtil.java
+++ b/graphics/java/android/graphics/fonts/FontFileUtil.java
@@ -32,6 +32,7 @@ import java.util.Set;
* Provides a utility for font file operations.
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class FontFileUtil {
private FontFileUtil() {} // Do not instantiate
diff --git a/graphics/java/android/graphics/fonts/FontStyle.java b/graphics/java/android/graphics/fonts/FontStyle.java
index 48969aa71059..b3ddbed645ff 100644
--- a/graphics/java/android/graphics/fonts/FontStyle.java
+++ b/graphics/java/android/graphics/fonts/FontStyle.java
@@ -44,6 +44,7 @@ import java.util.Objects;
* </p>
*
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class FontStyle {
private static final String TAG = "FontStyle";
diff --git a/graphics/java/android/graphics/fonts/FontVariationAxis.java b/graphics/java/android/graphics/fonts/FontVariationAxis.java
index 30a248bb3e0e..1d715940d628 100644
--- a/graphics/java/android/graphics/fonts/FontVariationAxis.java
+++ b/graphics/java/android/graphics/fonts/FontVariationAxis.java
@@ -31,6 +31,7 @@ import java.util.regex.Pattern;
/**
* Class that holds information about single font variation axis.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class FontVariationAxis {
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
private final int mTag;
diff --git a/graphics/java/android/graphics/fonts/SystemFonts.java b/graphics/java/android/graphics/fonts/SystemFonts.java
index 0e25c346064c..599c42659ece 100644
--- a/graphics/java/android/graphics/fonts/SystemFonts.java
+++ b/graphics/java/android/graphics/fonts/SystemFonts.java
@@ -25,6 +25,7 @@ import android.annotation.Nullable;
import android.graphics.FontListParser;
import android.graphics.Typeface;
import android.os.LocaleList;
+import android.ravenwood.annotation.RavenwoodReplace;
import android.text.FontConfig;
import android.util.ArrayMap;
import android.util.Log;
@@ -32,6 +33,7 @@ import android.util.SparseIntArray;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.ravenwood.RavenwoodEnvironment;
import org.xmlpull.v1.XmlPullParserException;
@@ -50,23 +52,46 @@ import java.util.Set;
/**
* Provides the system font configurations.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class SystemFonts {
private static final String TAG = "SystemFonts";
- private static final String FONTS_XML = "/system/etc/font_fallback.xml";
- private static final String LEGACY_FONTS_XML = "/system/etc/fonts.xml";
+ private static final String FONTS_XML = getFontsXmlDir() + "font_fallback.xml";
+ /** @hide */
+ public static final String LEGACY_FONTS_XML = getFontsXmlDir() + "fonts.xml";
/** @hide */
- public static final String SYSTEM_FONT_DIR = "/system/fonts/";
+ public static final String SYSTEM_FONT_DIR = getSystemFontDir();
private static final String OEM_XML = "/product/etc/fonts_customization.xml";
/** @hide */
public static final String OEM_FONT_DIR = "/product/fonts/";
+ private static final String DEVICE_FONTS_XML_DIR = "/system/etc/";
+ private static final String DEVICE_FONT_DIR = "/system/fonts/";
+
private SystemFonts() {} // Do not instansiate.
private static final Object LOCK = new Object();
private static @GuardedBy("sLock") Set<Font> sAvailableFonts;
+ @RavenwoodReplace
+ private static String getFontsXmlDir() {
+ return DEVICE_FONTS_XML_DIR;
+ }
+
+ private static String getFontsXmlDir$ravenwood() {
+ return RavenwoodEnvironment.getInstance().getRavenwoodRuntimePath() + "fonts/";
+ }
+
+ @RavenwoodReplace
+ private static String getSystemFontDir() {
+ return DEVICE_FONT_DIR;
+ }
+
+ private static String getSystemFontDir$ravenwood() {
+ return RavenwoodEnvironment.getInstance().getRavenwoodRuntimePath() + "fonts/";
+ }
+
/**
* Returns all available font files in the system.
*
diff --git a/graphics/java/android/graphics/text/GraphemeBreak.java b/graphics/java/android/graphics/text/GraphemeBreak.java
index f82b2fd659cc..0bc1e3b0cae3 100644
--- a/graphics/java/android/graphics/text/GraphemeBreak.java
+++ b/graphics/java/android/graphics/text/GraphemeBreak.java
@@ -17,6 +17,7 @@
package android.graphics.text;
/** @hide */
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class GraphemeBreak {
private GraphemeBreak() { }
diff --git a/graphics/java/android/graphics/text/LineBreakConfig.java b/graphics/java/android/graphics/text/LineBreakConfig.java
index 5a1086cef407..fa3cfbdd4e97 100644
--- a/graphics/java/android/graphics/text/LineBreakConfig.java
+++ b/graphics/java/android/graphics/text/LineBreakConfig.java
@@ -24,12 +24,13 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
-import android.app.ActivityThread;
import android.os.Build;
import android.os.LocaleList;
import android.os.Parcel;
import android.os.Parcelable;
+import dalvik.system.VMRuntime;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Objects;
@@ -41,6 +42,7 @@ import java.util.Objects;
* <a href="https://www.w3.org/TR/css-text-3/#line-break-property" class="external">
* line-break property</a> for more information.
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class LineBreakConfig implements Parcelable {
/**
* No hyphenation preference is specified.
@@ -484,8 +486,7 @@ public final class LineBreakConfig implements Parcelable {
* @hide
*/
public static @LineBreakStyle int getResolvedLineBreakStyle(@Nullable LineBreakConfig config) {
- final int targetSdkVersion = ActivityThread.currentApplication().getApplicationInfo()
- .targetSdkVersion;
+ final int targetSdkVersion = VMRuntime.getRuntime().getTargetSdkVersion();
final int defaultStyle;
final int vicVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM;
if (targetSdkVersion >= vicVersion) {
@@ -519,8 +520,7 @@ public final class LineBreakConfig implements Parcelable {
*/
public static @LineBreakWordStyle int getResolvedLineBreakWordStyle(
@Nullable LineBreakConfig config) {
- final int targetSdkVersion = ActivityThread.currentApplication().getApplicationInfo()
- .targetSdkVersion;
+ final int targetSdkVersion = VMRuntime.getRuntime().getTargetSdkVersion();
final int defaultWordStyle;
final int vicVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM;
if (targetSdkVersion >= vicVersion) {
diff --git a/graphics/java/android/graphics/text/LineBreaker.java b/graphics/java/android/graphics/text/LineBreaker.java
index 94de066c9182..29135b837352 100644
--- a/graphics/java/android/graphics/text/LineBreaker.java
+++ b/graphics/java/android/graphics/text/LineBreaker.java
@@ -91,6 +91,7 @@ import java.lang.annotation.RetentionPolicy;
* </pre>
* </p>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class LineBreaker {
/** @hide */
@IntDef(prefix = { "BREAK_STRATEGY_" }, value = {
diff --git a/graphics/java/android/graphics/text/MeasuredText.java b/graphics/java/android/graphics/text/MeasuredText.java
index 884268a4b85c..f58d5311fa30 100644
--- a/graphics/java/android/graphics/text/MeasuredText.java
+++ b/graphics/java/android/graphics/text/MeasuredText.java
@@ -56,6 +56,7 @@ import java.util.Objects;
* </pre>
* </p>
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class MeasuredText {
private static final String TAG = "MeasuredText";
diff --git a/graphics/java/android/graphics/text/PositionedGlyphs.java b/graphics/java/android/graphics/text/PositionedGlyphs.java
index 43216ba6e087..31125ffa7bd4 100644
--- a/graphics/java/android/graphics/text/PositionedGlyphs.java
+++ b/graphics/java/android/graphics/text/PositionedGlyphs.java
@@ -46,6 +46,7 @@ import java.util.Objects;
* @see TextRunShaper#shapeTextRun(char[], int, int, int, int, float, float, boolean, Paint)
* @see TextRunShaper#shapeTextRun(CharSequence, int, int, int, int, float, float, boolean, Paint)
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public final class PositionedGlyphs {
private static class NoImagePreloadHolder {
private static final NativeAllocationRegistry REGISTRY =
diff --git a/graphics/java/android/graphics/text/TextRunShaper.java b/graphics/java/android/graphics/text/TextRunShaper.java
index 19ea04a48046..f1e3d67e9925 100644
--- a/graphics/java/android/graphics/text/TextRunShaper.java
+++ b/graphics/java/android/graphics/text/TextRunShaper.java
@@ -40,6 +40,7 @@ import com.android.internal.util.Preconditions;
* @see android.text.TextShaper#shapeText(CharSequence, int, int, TextDirectionHeuristic, TextPaint,
* TextShaper.GlyphsConsumer)
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
public class TextRunShaper {
private TextRunShaper() {} // Do not instantiate
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java
index eb59d6efdeff..7ab9e2e65b76 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java
@@ -705,8 +705,7 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer {
}
private static boolean isOverlayTransitionSupported() {
- return Flags.moveAnimationOptionsToChange()
- && Flags.activityEmbeddingOverlayPresentationFlag();
+ return Flags.activityEmbeddingOverlayPresentationFlag();
}
@NonNull
diff --git a/libs/WindowManager/Shell/aconfig/multitasking.aconfig b/libs/WindowManager/Shell/aconfig/multitasking.aconfig
index a08f88a5b937..1e72d64397d7 100644
--- a/libs/WindowManager/Shell/aconfig/multitasking.aconfig
+++ b/libs/WindowManager/Shell/aconfig/multitasking.aconfig
@@ -184,3 +184,13 @@ flag {
description: "Try out bubble bar on phones"
bug: "394869612"
}
+
+flag {
+ name: "enable_bubble_task_view_listener"
+ namespace: "multitasking"
+ description: "Use the same taskview listener for bubble bar and floating"
+ bug: "272102927"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
diff --git a/libs/WindowManager/Shell/multivalentTests/AndroidManifest.xml b/libs/WindowManager/Shell/multivalentTests/AndroidManifest.xml
index 95cd1c72a2af..800ea7446b6e 100644
--- a/libs/WindowManager/Shell/multivalentTests/AndroidManifest.xml
+++ b/libs/WindowManager/Shell/multivalentTests/AndroidManifest.xml
@@ -2,6 +2,7 @@
package="com.android.wm.shell.multivalenttests">
<uses-permission android:name="android.permission.MANAGE_ACTIVITY_TASKS"/>
+ <uses-permission android:name="android.permission.GET_INTENT_SENDER_INTENT"/>
<application android:debuggable="true" android:supportsRtl="true" >
<uses-library android:name="android.test.runner" />
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
index 9ebc3d78b3a7..3aefcd5ec6c0 100644
--- 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
@@ -16,6 +16,7 @@
package com.android.wm.shell.bubbles
+import android.app.ActivityOptions
import android.app.Notification
import android.app.PendingIntent
import android.content.ComponentName
@@ -24,6 +25,8 @@ import android.content.Intent
import android.content.pm.ShortcutInfo
import android.graphics.drawable.Icon
import android.os.UserHandle
+import android.platform.test.annotations.EnableFlags
+import android.platform.test.flag.junit.SetFlagsRule
import android.service.notification.NotificationListenerService.Ranking
import android.service.notification.StatusBarNotification
import android.view.View
@@ -33,6 +36,7 @@ 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.Flags.FLAG_ENABLE_BUBBLE_ANYTHING
import com.android.wm.shell.R
import com.android.wm.shell.bubbles.Bubbles.BubbleMetadataFlagListener
import com.android.wm.shell.common.TestShellExecutor
@@ -41,6 +45,7 @@ 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.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito
@@ -48,6 +53,7 @@ import org.mockito.Mockito.never
import org.mockito.Mockito.reset
import org.mockito.kotlin.any
import org.mockito.kotlin.anyOrNull
+import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
@@ -61,6 +67,9 @@ import org.mockito.kotlin.whenever
@RunWith(AndroidJUnit4::class)
class BubbleTaskViewListenerTest {
+ @get:Rule
+ val setFlagsRule = SetFlagsRule()
+
private val context = ApplicationProvider.getApplicationContext<Context>()
private var taskViewController = mock<TaskViewController>()
@@ -155,9 +164,22 @@ class BubbleTaskViewListenerTest {
}
getInstrumentation().waitForIdleSync()
- // ..so it's pending intent-based, and launches that
+ // ..so it's pending intent-based, so the pending intent should be active
assertThat(b.isPendingIntentActive).isTrue()
- verify(taskViewController).startActivity(any(), eq(pendingIntent), any(), any(), any())
+
+ val intentCaptor = argumentCaptor<Intent>()
+ val optionsCaptor = argumentCaptor<ActivityOptions>()
+
+ verify(taskViewController).startActivity(any(),
+ eq(pendingIntent),
+ intentCaptor.capture(),
+ optionsCaptor.capture(),
+ any())
+ val intentFlags = intentCaptor.lastValue.flags
+ assertThat((intentFlags and Intent.FLAG_ACTIVITY_NEW_DOCUMENT) != 0).isTrue()
+ assertThat((intentFlags and Intent.FLAG_ACTIVITY_MULTIPLE_TASK) != 0).isTrue()
+ assertThat(optionsCaptor.lastValue.launchedFromBubble).isTrue()
+ assertThat(optionsCaptor.lastValue.taskAlwaysOnTop).isTrue()
}
@Test
@@ -178,12 +200,52 @@ class BubbleTaskViewListenerTest {
}
getInstrumentation().waitForIdleSync()
- assertThat(b.isPendingIntentActive).isFalse()
- verify(taskViewController).startShortcutActivity(any(), eq(shortcutInfo), any(), any())
+ val optionsCaptor = argumentCaptor<ActivityOptions>()
+
+ assertThat(b.isPendingIntentActive).isFalse() // not triggered for shortcut chats
+ verify(taskViewController).startShortcutActivity(any(),
+ eq(shortcutInfo),
+ optionsCaptor.capture(),
+ any())
+ assertThat(optionsCaptor.lastValue.launchedFromBubble).isTrue()
+ assertThat(optionsCaptor.lastValue.isApplyActivityFlagsForBubbles).isTrue()
+ assertThat(optionsCaptor.lastValue.taskAlwaysOnTop).isTrue()
}
+ @EnableFlags(FLAG_ENABLE_BUBBLE_ANYTHING)
@Test
- fun onInitialized_appBubble() {
+ fun onInitialized_shortcutBubble() {
+ val shortcutInfo = ShortcutInfo.Builder(context)
+ .setId("mockShortcutId")
+ .build()
+
+ val b = createShortcutBubble(shortcutInfo)
+ bubbleTaskViewListener.setBubble(b)
+
+ assertThat(b.isChat).isFalse()
+ assertThat(b.isShortcut).isTrue()
+ assertThat(b.shortcutInfo).isNotNull()
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onInitialized()
+ }
+ getInstrumentation().waitForIdleSync()
+
+ val optionsCaptor = argumentCaptor<ActivityOptions>()
+
+ assertThat(b.isPendingIntentActive).isFalse() // chat only triggers setting it active
+ verify(taskViewController).startShortcutActivity(any(),
+ eq(shortcutInfo),
+ optionsCaptor.capture(),
+ any())
+ assertThat(optionsCaptor.lastValue.launchedFromBubble).isFalse() // chat only
+ assertThat(optionsCaptor.lastValue.isApplyActivityFlagsForBubbles).isFalse() // chat only
+ assertThat(optionsCaptor.lastValue.isApplyMultipleTaskFlagForShortcut).isTrue()
+ assertThat(optionsCaptor.lastValue.taskAlwaysOnTop).isTrue()
+ }
+
+ @Test
+ fun onInitialized_appBubble_intent() {
val b = createAppBubble()
bubbleTaskViewListener.setBubble(b)
@@ -194,11 +256,83 @@ class BubbleTaskViewListenerTest {
}
getInstrumentation().waitForIdleSync()
- assertThat(b.isPendingIntentActive).isFalse()
- verify(taskViewController).startActivity(any(), any(), anyOrNull(), any(), any())
+ val intentCaptor = argumentCaptor<Intent>()
+ val optionsCaptor = argumentCaptor<ActivityOptions>()
+
+ assertThat(b.isPendingIntentActive).isFalse() // chat only triggers setting it active
+ verify(taskViewController).startActivity(any(),
+ any(),
+ intentCaptor.capture(),
+ optionsCaptor.capture(),
+ any())
+
+ assertThat((intentCaptor.lastValue.flags
+ and Intent.FLAG_ACTIVITY_MULTIPLE_TASK) != 0).isTrue()
+ assertThat(optionsCaptor.lastValue.launchedFromBubble).isFalse() // chat only
+ assertThat(optionsCaptor.lastValue.isApplyActivityFlagsForBubbles).isFalse() // chat only
+ assertThat(optionsCaptor.lastValue.taskAlwaysOnTop).isTrue()
}
@Test
+ fun onInitialized_appBubble_pendingIntent() {
+ val b = createAppBubble(usePendingIntent = true)
+ bubbleTaskViewListener.setBubble(b)
+
+ assertThat(b.isApp).isTrue()
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onInitialized()
+ }
+ getInstrumentation().waitForIdleSync()
+
+ val intentCaptor = argumentCaptor<Intent>()
+ val optionsCaptor = argumentCaptor<ActivityOptions>()
+
+ assertThat(b.isPendingIntentActive).isFalse() // chat only triggers setting it active
+ verify(taskViewController).startActivity(any(),
+ any(),
+ intentCaptor.capture(),
+ optionsCaptor.capture(),
+ any())
+
+ assertThat((intentCaptor.lastValue.flags
+ and Intent.FLAG_ACTIVITY_MULTIPLE_TASK) != 0).isTrue()
+ assertThat(optionsCaptor.lastValue.launchedFromBubble).isFalse() // chat only
+ assertThat(optionsCaptor.lastValue.isApplyActivityFlagsForBubbles).isFalse() // chat only
+ assertThat(optionsCaptor.lastValue.taskAlwaysOnTop).isTrue()
+ }
+
+ @Test
+ fun onInitialized_noteBubble() {
+ val b = createNoteBubble()
+ bubbleTaskViewListener.setBubble(b)
+
+ assertThat(b.isNote).isTrue()
+
+ getInstrumentation().runOnMainSync {
+ bubbleTaskViewListener.onInitialized()
+ }
+ getInstrumentation().waitForIdleSync()
+
+ val intentCaptor = argumentCaptor<Intent>()
+ val optionsCaptor = argumentCaptor<ActivityOptions>()
+
+ assertThat(b.isPendingIntentActive).isFalse() // chat only triggers setting it active
+ verify(taskViewController).startActivity(any(),
+ any(),
+ intentCaptor.capture(),
+ optionsCaptor.capture(),
+ any())
+
+ assertThat((intentCaptor.lastValue.flags
+ and Intent.FLAG_ACTIVITY_MULTIPLE_TASK) != 0).isTrue()
+ assertThat(optionsCaptor.lastValue.launchedFromBubble).isFalse() // chat only
+ assertThat(optionsCaptor.lastValue.isApplyActivityFlagsForBubbles).isFalse() // chat only
+ assertThat(optionsCaptor.lastValue.taskAlwaysOnTop).isTrue()
+ }
+
+
+ @Test
fun onInitialized_preparingTransition() {
val b = createAppBubble()
bubbleTaskViewListener.setBubble(b)
@@ -416,13 +550,24 @@ class BubbleTaskViewListenerTest {
assertThat(isNew).isTrue()
}
- private fun createAppBubble(): Bubble {
+ private fun createAppBubble(usePendingIntent: Boolean = false): Bubble {
val target = Intent(context, TestActivity::class.java)
target.setPackage(context.packageName)
+ if (usePendingIntent) {
+ // Robolectric doesn't seem to play nice with PendingIntents, have to mock it.
+ val pendingIntent = mock<PendingIntent>()
+ whenever(pendingIntent.intent).thenReturn(target)
+ return Bubble.createAppBubble(pendingIntent, mock<UserHandle>(),
+ mainExecutor, bgExecutor)
+ }
return Bubble.createAppBubble(target, mock<UserHandle>(), mock<Icon>(),
mainExecutor, bgExecutor)
}
+ private fun createShortcutBubble(shortcutInfo: ShortcutInfo): Bubble {
+ return Bubble.createShortcutBubble(shortcutInfo, mainExecutor, bgExecutor)
+ }
+
private fun createNoteBubble(): Bubble {
val target = Intent(context, TestActivity::class.java)
target.setPackage(context.packageName)
diff --git a/libs/WindowManager/Shell/res/values-af/strings.xml b/libs/WindowManager/Shell/res/values-af/strings.xml
index b4d594f0c06b..0f4264567193 100644
--- a/libs/WindowManager/Shell/res/values-af/strings.xml
+++ b/libs/WindowManager/Shell/res/values-af/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Apphandvatsel"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Appikoon"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Volskerm"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Rekenaaraansig"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Verdeelde skerm"</string>
<string name="more_button_text" msgid="3655388105592893530">"Meer"</string>
<string name="float_button_text" msgid="9221657008391364581">"Sweef"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Verander aspekverhouding"</string>
<string name="close_text" msgid="4986518933445178928">"Maak toe"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Maak kieslys toe"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (Rekenaaraansig)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maksimeer skerm"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Verander grootte"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"App kan nie hierheen geskuif word nie"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Maak kieslys oop"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Voer <xliff:g id="WINDOWING_MODE">%1$s</xliff:g> in"</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>
diff --git a/libs/WindowManager/Shell/res/values-am/strings.xml b/libs/WindowManager/Shell/res/values-am/strings.xml
index 9ec8001e1b9c..be02f4375e3b 100644
--- a/libs/WindowManager/Shell/res/values-am/strings.xml
+++ b/libs/WindowManager/Shell/res/values-am/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"የመተግበሪያ መያዣ"</string>
<string name="app_icon_text" msgid="2823268023931811747">"የመተግበሪያ አዶ"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"ሙሉ ማያ"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"የዴስክቶፕ ዕይታ"</string>
<string name="split_screen_text" msgid="1396336058129570886">"የተከፈለ ማያ ገፅ"</string>
<string name="more_button_text" msgid="3655388105592893530">"ተጨማሪ"</string>
<string name="float_button_text" msgid="9221657008391364581">"ተንሳፋፊ"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"ምጥጥነ ገፅታ ለውጥ"</string>
<string name="close_text" msgid="4986518933445178928">"ዝጋ"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"ምናሌ ዝጋ"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> የዴስክቶፕ ዕይታ"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"የማያ ገጹ መጠን አሳድግ"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"መጠን ቀይር"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"መተግበሪያ ወደዚህ መንቀሳቀስ አይችልም"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"ምናሌን ክፈት"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> አስገባ"</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>
diff --git a/libs/WindowManager/Shell/res/values-as/strings.xml b/libs/WindowManager/Shell/res/values-as/strings.xml
index 05860c25db89..0bc4a0a59239 100644
--- a/libs/WindowManager/Shell/res/values-as/strings.xml
+++ b/libs/WindowManager/Shell/res/values-as/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"এপৰ হেণ্ডেল"</string>
<string name="app_icon_text" msgid="2823268023931811747">"এপৰ চিহ্ন"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"সম্পূৰ্ণ স্ক্ৰীন"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"ডেস্কটপ ভিউ"</string>
<string name="split_screen_text" msgid="1396336058129570886">"বিভাজিত স্ক্ৰীন"</string>
<string name="more_button_text" msgid="3655388105592893530">"অধিক"</string>
<string name="float_button_text" msgid="9221657008391364581">"ওপঙা"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"আকাৰৰ অনুপাত সলনি কৰক"</string>
<string name="close_text" msgid="4986518933445178928">"বন্ধ কৰক"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"মেনু বন্ধ কৰক"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (ডেস্কটপ ভিউ)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"স্ক্ৰীন মেক্সিমাইজ কৰক"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"আকাৰ সলনি কৰক"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"ইয়ালৈ এপ্‌টো আনিব নোৱাৰি"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"মেনু খোলক"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g>ত সোমাওক"</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>
diff --git a/libs/WindowManager/Shell/res/values-az/strings.xml b/libs/WindowManager/Shell/res/values-az/strings.xml
index ea64749c023e..2ccae4b20237 100644
--- a/libs/WindowManager/Shell/res/values-az/strings.xml
+++ b/libs/WindowManager/Shell/res/values-az/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Tətbiq ləqəbi"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Tətbiq ikonası"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Tam Ekran"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Masaüstü Görünüş"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Bölünmüş Ekran"</string>
<string name="more_button_text" msgid="3655388105592893530">"Ardı"</string>
<string name="float_button_text" msgid="9221657008391364581">"Üzən pəncərə"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Tərəflər nisbətini dəyişin"</string>
<string name="close_text" msgid="4986518933445178928">"Bağlayın"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Menyunu bağlayın"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (Masaüstü Görünüş)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Ekranı maksimum böyüdün"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Ölçüsünü dəyişin"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Tətbiqi bura köçürmək mümkün deyil"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Menyunu açın"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> 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>
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 deec04f63270..b79b8605140d 100644
--- a/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-b+sr+Latn/strings.xml
@@ -134,9 +134,9 @@
<string name="collapse_menu_text" msgid="7515008122450342029">"Zatvorite meni"</string>
<string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (prikaz za računare)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Povećaj ekran"</string>
- <string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Promeni veličinu"</string>
+ <string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Prilagodi"</string>
<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_button_text" msgid="559492223133829481">"Imerzivno"</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ćaj"</string>
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Vratite"</string>
diff --git a/libs/WindowManager/Shell/res/values-bg/strings.xml b/libs/WindowManager/Shell/res/values-bg/strings.xml
index 0bb59605b247..9cc9db805728 100644
--- a/libs/WindowManager/Shell/res/values-bg/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bg/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Манипулатор за приложението"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Икона на приложението"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Цял екран"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Изглед за настолни компютри"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Разделяне на екрана"</string>
<string name="more_button_text" msgid="3655388105592893530">"Още"</string>
<string name="float_button_text" msgid="9221657008391364581">"Плаващо"</string>
@@ -133,10 +132,9 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Промяна на съотношението"</string>
<string name="close_text" msgid="4986518933445178928">"Затваряне"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Затваряне на менюто"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (изглед за настолни компютри)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Увеличаване на екрана"</string>
- <string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Преоразмеряване"</string>
+ <string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Нов размер"</string>
<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>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Отваряне на менюто"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Въвеждане на <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-bn/strings.xml b/libs/WindowManager/Shell/res/values-bn/strings.xml
index ae63e0402592..c1264d41105b 100644
--- a/libs/WindowManager/Shell/res/values-bn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bn/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"অ্যাপের হ্যান্ডেল"</string>
<string name="app_icon_text" msgid="2823268023931811747">"অ্যাপ আইকন"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"ফুলস্ক্রিন"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"ডেস্কটপ ভিউ"</string>
<string name="split_screen_text" msgid="1396336058129570886">"স্প্লিট স্ক্রিন"</string>
<string name="more_button_text" msgid="3655388105592893530">"আরও"</string>
<string name="float_button_text" msgid="9221657008391364581">"ফ্লোট"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"অ্যাস্পেক্ট রেশিও পরিবর্তন করুন"</string>
<string name="close_text" msgid="4986518933445178928">"বন্ধ করুন"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"\'মেনু\' বন্ধ করুন"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (ডেস্কটপ ভিউ)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"স্ক্রিন বড় করুন"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"ছোট বড় করুন"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"অ্যাপটি এখানে সরানো যাবে না"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"মেনু খুলুন"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g>-এ খুলুন"</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>
diff --git a/libs/WindowManager/Shell/res/values-bs/strings.xml b/libs/WindowManager/Shell/res/values-bs/strings.xml
index b7c76b5f9762..7c912b6759db 100644
--- a/libs/WindowManager/Shell/res/values-bs/strings.xml
+++ b/libs/WindowManager/Shell/res/values-bs/strings.xml
@@ -119,7 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Ručica aplikacije"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikona aplikacije"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Cijeli ekran"</string>
- <string name="desktop_text" msgid="1582173066857454541">"Prikaz na računalu"</string>
+ <string name="desktop_text" msgid="1582173066857454541">"Prikaz na računaru"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Podijeljeni ekran"</string>
<string name="more_button_text" msgid="3655388105592893530">"Više"</string>
<string name="float_button_text" msgid="9221657008391364581">"Lebdeći"</string>
@@ -132,7 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Promjena formata slike"</string>
<string name="close_text" msgid="4986518933445178928">"Zatvaranje"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Zatvaranje menija"</string>
- <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (prikaz na računalu)"</string>
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (prikaz na računaru)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maksimiziraj ekran"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Promijeni veličinu"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Ne možete premjestiti aplikaciju ovdje"</string>
@@ -145,8 +145,8 @@
<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_chip_accessibility_announce" msgid="499881698947450536">"Otvorite izbornik"</string>
- <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Unesite <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</string>
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Otvaranje menija"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Aktiviranje načina rada <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-ca/strings.xml b/libs/WindowManager/Shell/res/values-ca/strings.xml
index 80dd3801c264..2c2a1776018c 100644
--- a/libs/WindowManager/Shell/res/values-ca/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ca/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Identificador de l\'aplicació"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Icona de l\'aplicació"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Pantalla completa"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Visualització per a ordinadors"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Pantalla dividida"</string>
<string name="more_button_text" msgid="3655388105592893530">"Més"</string>
<string name="float_button_text" msgid="9221657008391364581">"Flotant"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Canvia la relació d\'aspecte"</string>
<string name="close_text" msgid="4986518933445178928">"Tanca"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Tanca el menú"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (visualització per a ordinadors)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maximitza la pantalla"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Canvia la mida"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"L\'aplicació no es pot moure aquí"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Obre el menú"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Introdueix <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-da/strings.xml b/libs/WindowManager/Shell/res/values-da/strings.xml
index c465ce3d89fd..f5656d58094f 100644
--- a/libs/WindowManager/Shell/res/values-da/strings.xml
+++ b/libs/WindowManager/Shell/res/values-da/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Apphåndtag"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Appikon"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Fuld skærm"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Computervenlig visning"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Opdelt skærm"</string>
<string name="more_button_text" msgid="3655388105592893530">"Mere"</string>
<string name="float_button_text" msgid="9221657008391364581">"Svævende"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Skift billedformat"</string>
<string name="close_text" msgid="4986518933445178928">"Luk"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Luk menu"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (computervenlig visning)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maksimér skærm"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Tilpas størrelse"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Apps kan ikke flyttes hertil"</string>
@@ -147,10 +145,8 @@
<string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Juster størrelsen på appvinduet til venstre"</string>
<string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Juster størrelsen på appvinduet til højre"</string>
<string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maksimer eller gendan vinduesstørrelse"</string>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Åbn menu"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Åbn <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</string>
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Juster størrelsen på vinduet til venstre"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Juster størrelsen på vinduet til højre"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maksimer eller gendan vinduesstørrelse"</string>
diff --git a/libs/WindowManager/Shell/res/values-de/strings.xml b/libs/WindowManager/Shell/res/values-de/strings.xml
index 567dd7a0c2a5..3762b4b28631 100644
--- a/libs/WindowManager/Shell/res/values-de/strings.xml
+++ b/libs/WindowManager/Shell/res/values-de/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"App-Ziehpunkt"</string>
<string name="app_icon_text" msgid="2823268023931811747">"App-Symbol"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Vollbild"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Desktop-Ansicht"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Splitscreen"</string>
<string name="more_button_text" msgid="3655388105592893530">"Mehr"</string>
<string name="float_button_text" msgid="9221657008391364581">"Frei schwebend"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Seitenverhältnis ändern"</string>
<string name="close_text" msgid="4986518933445178928">"Schließen"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Menü schließen"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (Desktop-Ansicht)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Bildschirm maximieren"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Größe ändern"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Die App kann nicht hierher verschoben werden"</string>
@@ -147,10 +145,8 @@
<string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Größe des App-Fensters links anpassen"</string>
<string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Größe des App-Fensters rechts anpassen"</string>
<string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Fenstergröße maximieren oder wiederherstellen"</string>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Menü öffnen"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> aktivieren"</string>
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Fenstergröße nach links anpassen"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Fenstergröße nach rechts anpassen"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Fenstergröße maximieren oder wiederherstellen"</string>
diff --git a/libs/WindowManager/Shell/res/values-el/strings.xml b/libs/WindowManager/Shell/res/values-el/strings.xml
index 489a4ce6b550..8e715d5c232e 100644
--- a/libs/WindowManager/Shell/res/values-el/strings.xml
+++ b/libs/WindowManager/Shell/res/values-el/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Λαβή εφαρμογής"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Εικονίδιο εφαρμογής"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Πλήρης οθόνη"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Προβολή για υπολογιστές"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Διαχωρισμός οθόνης"</string>
<string name="more_button_text" msgid="3655388105592893530">"Περισσότερα"</string>
<string name="float_button_text" msgid="9221657008391364581">"Κινούμενο"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Αλλαγή λόγου διαστάσεων"</string>
<string name="close_text" msgid="4986518933445178928">"Κλείσιμο"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Κλείσιμο μενού"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (Προβολή για υπολογιστές)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Μεγιστοποίηση οθόνης"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Αλλαγή μεγέθους"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Δεν είναι δυνατή η μετακίνηση της εφαρμογής εδώ"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Άνοιγμα μενού"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Εισαγωγή <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
index 1a3d422eb736..75d2bf1ae5e3 100644
--- a/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rAU/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"App handle"</string>
<string name="app_icon_text" msgid="2823268023931811747">"App icon"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Full screen"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Desktop view"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Split screen"</string>
<string name="more_button_text" msgid="3655388105592893530">"More"</string>
<string name="float_button_text" msgid="9221657008391364581">"Float"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Change aspect ratio"</string>
<string name="close_text" msgid="4986518933445178928">"Close"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Close menu"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (desktop view)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maximise screen"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Resize"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"App can\'t be moved here"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Open menu"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Enter <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
index 1a3d422eb736..75d2bf1ae5e3 100644
--- a/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rGB/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"App handle"</string>
<string name="app_icon_text" msgid="2823268023931811747">"App icon"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Full screen"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Desktop view"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Split screen"</string>
<string name="more_button_text" msgid="3655388105592893530">"More"</string>
<string name="float_button_text" msgid="9221657008391364581">"Float"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Change aspect ratio"</string>
<string name="close_text" msgid="4986518933445178928">"Close"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Close menu"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (desktop view)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maximise screen"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Resize"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"App can\'t be moved here"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Open menu"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Enter <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
index 1a3d422eb736..75d2bf1ae5e3 100644
--- a/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
+++ b/libs/WindowManager/Shell/res/values-en-rIN/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"App handle"</string>
<string name="app_icon_text" msgid="2823268023931811747">"App icon"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Full screen"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Desktop view"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Split screen"</string>
<string name="more_button_text" msgid="3655388105592893530">"More"</string>
<string name="float_button_text" msgid="9221657008391364581">"Float"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Change aspect ratio"</string>
<string name="close_text" msgid="4986518933445178928">"Close"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Close menu"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (desktop view)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maximise screen"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Resize"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"App can\'t be moved here"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Open menu"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Enter <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
index 93aa1b63fa26..c358ae447361 100644
--- a/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
+++ b/libs/WindowManager/Shell/res/values-es-rUS/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Controlador de la app"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ícono de la app"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Pantalla completa"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Vista para computadoras de escritorio"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Pantalla dividida"</string>
<string name="more_button_text" msgid="3655388105592893530">"Más"</string>
<string name="float_button_text" msgid="9221657008391364581">"Flotante"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Cambiar relación de aspecto"</string>
<string name="close_text" msgid="4986518933445178928">"Cerrar"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Cerrar menú"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (vista para computadoras de escritorio)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maximizar pantalla"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Cambiar el tamaño"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"No se puede mover la app aquí"</string>
@@ -147,10 +145,8 @@
<string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Ajustar el tamaño de la ventana de la app hacia la izquierda"</string>
<string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Ajustar el tamaño de la ventana de la app hacia la derecha"</string>
<string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maximizar o restablecer el tamaño de la ventana"</string>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Abrir el menú"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Ingresar a <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</string>
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ajustar el tamaño de la ventana hacia la izquierda"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ajustar el tamaño de la ventana hacia la derecha"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximizar o restablecer el tamaño de la ventana"</string>
diff --git a/libs/WindowManager/Shell/res/values-es/strings.xml b/libs/WindowManager/Shell/res/values-es/strings.xml
index 27c5b801dbba..275d88d1ea8a 100644
--- a/libs/WindowManager/Shell/res/values-es/strings.xml
+++ b/libs/WindowManager/Shell/res/values-es/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Controlador de la aplicación"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Icono de la aplicación"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Pantalla completa"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Vista para ordenadores"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Pantalla dividida"</string>
<string name="more_button_text" msgid="3655388105592893530">"Más"</string>
<string name="float_button_text" msgid="9221657008391364581">"Flotante"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Cambiar relación de aspecto"</string>
<string name="close_text" msgid="4986518933445178928">"Cerrar"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Cerrar menú"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (vista para ordenadores)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maximizar pantalla"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Cambiar tamaño"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"La aplicación no se puede mover aquí"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Abrir menú"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Introducir <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-et/strings.xml b/libs/WindowManager/Shell/res/values-et/strings.xml
index c8ab83ef8eae..3a330b3121ec 100644
--- a/libs/WindowManager/Shell/res/values-et/strings.xml
+++ b/libs/WindowManager/Shell/res/values-et/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Rakenduse element"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Rakenduse ikoon"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Täisekraan"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Arvutivaade"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Jagatud ekraanikuva"</string>
<string name="more_button_text" msgid="3655388105592893530">"Rohkem"</string>
<string name="float_button_text" msgid="9221657008391364581">"Hõljuv"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Kuvasuhte muutmine"</string>
<string name="close_text" msgid="4986518933445178928">"Sule"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Sule menüü"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (arvutivaade)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Kuva täisekraanil"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Suuruse muutmine"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Rakendust ei saa siia teisaldada"</string>
@@ -147,10 +145,8 @@
<string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Rakenduse akna suuruse muutmine vasakul"</string>
<string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Rakenduse akna suuruse muutmine paremal"</string>
<string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Akna suuruse maksimeerimine või taastamine"</string>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Menüü avamine"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Režiimi <xliff:g id="WINDOWING_MODE">%1$s</xliff:g> sisenemine"</string>
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Akna suuruse muutmine, vasakule"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Akna suuruse muutmine, paremale"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Akna suuruse maksimeerimine või taastamine"</string>
diff --git a/libs/WindowManager/Shell/res/values-eu/strings.xml b/libs/WindowManager/Shell/res/values-eu/strings.xml
index abd92ab758d0..c0766a294510 100644
--- a/libs/WindowManager/Shell/res/values-eu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-eu/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Aplikazioaren kontrol-puntua"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Aplikazioaren ikonoa"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Pantaila osoa"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Ordenagailuetarako ikuspegia"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Pantaila zatitzea"</string>
<string name="more_button_text" msgid="3655388105592893530">"Gehiago"</string>
<string name="float_button_text" msgid="9221657008391364581">"Leiho gainerakorra"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Aldatu aspektu-erlazioa"</string>
<string name="close_text" msgid="4986518933445178928">"Itxi"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Itxi menua"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (ordenagailuetarako ikuspegia)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Handitu pantaila"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Aldatu tamaina"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Aplikazioa ezin da hona ekarri"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Ireki menua"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Idatzi <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-fa/strings.xml b/libs/WindowManager/Shell/res/values-fa/strings.xml
index 651635a8cc1c..ace8b333f47c 100644
--- a/libs/WindowManager/Shell/res/values-fa/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fa/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"دستگیره برنامه"</string>
<string name="app_icon_text" msgid="2823268023931811747">"نماد برنامه"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"تمام‌صفحه"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"نمای ویژه رایانه رومیزی"</string>
<string name="split_screen_text" msgid="1396336058129570886">"صفحهٔ دونیمه"</string>
<string name="more_button_text" msgid="3655388105592893530">"بیشتر"</string>
<string name="float_button_text" msgid="9221657008391364581">"شناور"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"تغییر نسبت ابعادی"</string>
<string name="close_text" msgid="4986518933445178928">"بستن"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"بستن منو"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"‫<xliff:g id="APP_NAME">%1$s</xliff:g> (نمای ویژه رایانه رومیزی)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"بزرگ کردن صفحه"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"تغییر اندازه"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"برنامه را نمی‌توان به اینجا منتقل کرد"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"باز کردن منو"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"وارد شدن به <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-fi/strings.xml b/libs/WindowManager/Shell/res/values-fi/strings.xml
index 47e9ea335db8..aed3fdc55bb4 100644
--- a/libs/WindowManager/Shell/res/values-fi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fi/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Sovelluksen tunnus"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Sovelluskuvake"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Koko näyttö"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Tietokonenäkymä"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Jaettu näyttö"</string>
<string name="more_button_text" msgid="3655388105592893530">"Lisää"</string>
<string name="float_button_text" msgid="9221657008391364581">"Kelluva ikkuna"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Vaihda kuvasuhdetta"</string>
<string name="close_text" msgid="4986518933445178928">"Sulje"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Sulje valikko"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (tietokonenäkymä)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Suurenna näyttö"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Muuta kokoa"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Sovellusta ei voi siirtää tänne"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Avaa valikko"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Avaa <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-fr/strings.xml b/libs/WindowManager/Shell/res/values-fr/strings.xml
index 038a90dcb736..377413e27e87 100644
--- a/libs/WindowManager/Shell/res/values-fr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-fr/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Poignée de l\'appli"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Icône d\'application"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Plein écran"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Affichage sur ordinateur"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Écran partagé"</string>
<string name="more_button_text" msgid="3655388105592893530">"Plus"</string>
<string name="float_button_text" msgid="9221657008391364581">"Flottante"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Modifier le format"</string>
<string name="close_text" msgid="4986518933445178928">"Fermer"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Fermer le menu"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (affichage sur ordinateur)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Mettre en plein écran"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Redimensionner"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Impossible de déplacer l\'appli ici"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Ouvrir le menu"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Saisir l’<xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-gl/strings.xml b/libs/WindowManager/Shell/res/values-gl/strings.xml
index a2a6b3ebb2c4..3022f6238567 100644
--- a/libs/WindowManager/Shell/res/values-gl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-gl/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Controlador da aplicación"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Icona de aplicación"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Pantalla completa"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Vista para ordenadores"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Pantalla dividida"</string>
<string name="more_button_text" msgid="3655388105592893530">"Máis"</string>
<string name="float_button_text" msgid="9221657008391364581">"Flotante"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Cambiar a proporción"</string>
<string name="close_text" msgid="4986518933445178928">"Pechar"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Pechar o menú"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (vista para ordenadores)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maximizar pantalla"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Cambiar tamaño"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Non se pode mover aquí a aplicación"</string>
@@ -147,10 +145,8 @@
<string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Axustar o tamaño da ventá da aplicación á esquerda"</string>
<string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Axustar o tamaño da ventá da aplicación á dereita"</string>
<string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Maximizar ou restaurar o tamaño da ventá"</string>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Abrir o menú"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Entrar en <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</string>
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Axustar o tamaño da ventá á esquerda"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Axustar o tamaño da ventá á dereita"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Maximizar ou restaurar o tamaño da ventá"</string>
diff --git a/libs/WindowManager/Shell/res/values-hi/strings.xml b/libs/WindowManager/Shell/res/values-hi/strings.xml
index f1f2a0ae8a9d..945bc93a667e 100644
--- a/libs/WindowManager/Shell/res/values-hi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hi/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"ऐप्लिकेशन का हैंडल"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ऐप्लिकेशन आइकॉन"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"फ़ुलस्क्रीन"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"डेस्कटॉप व्यू"</string>
<string name="split_screen_text" msgid="1396336058129570886">"स्प्लिट स्क्रीन मोड"</string>
<string name="more_button_text" msgid="3655388105592893530">"ज़्यादा देखें"</string>
<string name="float_button_text" msgid="9221657008391364581">"फ़्लोट"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) बदलें"</string>
<string name="close_text" msgid="4986518933445178928">"बंद करें"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"मेन्यू बंद करें"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (डेस्कटॉप व्यू)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"स्क्रीन को बड़ा करें"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"साइज़ बदलें"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"ऐप्लिकेशन को यहां मूव नहीं किया जा सकता"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"मेन्यू खोलें"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> में जाएं"</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>
diff --git a/libs/WindowManager/Shell/res/values-hu/strings.xml b/libs/WindowManager/Shell/res/values-hu/strings.xml
index 5d52c4836e00..a7aedc465a92 100644
--- a/libs/WindowManager/Shell/res/values-hu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hu/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"App fogópontja"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Alkalmazásikon"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Teljes képernyő"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Asztali nézet"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Osztott képernyő"</string>
<string name="more_button_text" msgid="3655388105592893530">"Továbbiak"</string>
<string name="float_button_text" msgid="9221657008391364581">"Lebegő"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Méretarány módosítása"</string>
<string name="close_text" msgid="4986518933445178928">"Bezárás"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Menü bezárása"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (Asztali nézet)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Képernyő méretének maximalizálása"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Átméretezés"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Az alkalmazás nem helyezhető át ide"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Menü megnyitása"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Belépés <xliff:g id="WINDOWING_MODE">%1$s</xliff:g> módba"</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>
diff --git a/libs/WindowManager/Shell/res/values-hy/strings.xml b/libs/WindowManager/Shell/res/values-hy/strings.xml
index b7b4422a673e..00b2f91c9eb9 100644
--- a/libs/WindowManager/Shell/res/values-hy/strings.xml
+++ b/libs/WindowManager/Shell/res/values-hy/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Հավելվածի կեղծանուն"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Հավելվածի պատկերակ"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Լիաէկրան"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Համակարգչային տարբերակ"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Տրոհված էկրան"</string>
<string name="more_button_text" msgid="3655388105592893530">"Ավելին"</string>
<string name="float_button_text" msgid="9221657008391364581">"Լողացող պատուհան"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Փոխել կողմերի հարաբերակցությունը"</string>
<string name="close_text" msgid="4986518933445178928">"Փակել"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Փակել ընտրացանկը"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (համակարգչային տարբերակ)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Ծավալել էկրանը"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Փոխել չափը"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Հավելվածը հնարավոր չէ տեղափոխել այստեղ"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Բացեք ընտրացանկը"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Մուտքագրեք <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-in/strings.xml b/libs/WindowManager/Shell/res/values-in/strings.xml
index a3ed7c374355..54ccf84d398b 100644
--- a/libs/WindowManager/Shell/res/values-in/strings.xml
+++ b/libs/WindowManager/Shell/res/values-in/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Penanganan aplikasi"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikon Aplikasi"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Layar Penuh"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Tampilan Desktop"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Layar Terpisah"</string>
<string name="more_button_text" msgid="3655388105592893530">"Lainnya"</string>
<string name="float_button_text" msgid="9221657008391364581">"Mengambang"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Ubah rasio aspek"</string>
<string name="close_text" msgid="4986518933445178928">"Tutup"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Tutup Menu"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (Tampilan Desktop)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Perbesar Layar"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Ubah ukuran"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Aplikasi tidak dapat dipindahkan ke sini"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Buka Menu"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Masuk ke <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-is/strings.xml b/libs/WindowManager/Shell/res/values-is/strings.xml
index e8ecad1fc5e9..56b179033ddb 100644
--- a/libs/WindowManager/Shell/res/values-is/strings.xml
+++ b/libs/WindowManager/Shell/res/values-is/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Handfang forrits"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Tákn forrits"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Allur skjárinn"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Tölvuútgáfa"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Skjáskipting"</string>
<string name="more_button_text" msgid="3655388105592893530">"Meira"</string>
<string name="float_button_text" msgid="9221657008391364581">"Reikult"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Breyta myndhlutfalli"</string>
<string name="close_text" msgid="4986518933445178928">"Loka"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Loka valmynd"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (tölvuútgáfa)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Stækka skjá"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Breyta stærð"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Ekki er hægt að færa forritið hingað"</string>
@@ -147,10 +145,8 @@
<string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Breyta stærð forritsglugga til vinstri"</string>
<string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Breyta stærð forritsglugga til hægri"</string>
<string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Hámarka eða endurheimta stærð glugga"</string>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Opna valmynd"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Opna <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</string>
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Breyta stærð glugga til vinstri"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Breyta stærð glugga til hægri"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Hámarka eða endurheimta stærð glugga"</string>
diff --git a/libs/WindowManager/Shell/res/values-it/strings.xml b/libs/WindowManager/Shell/res/values-it/strings.xml
index 630e9ee0f4f5..30159c7663f0 100644
--- a/libs/WindowManager/Shell/res/values-it/strings.xml
+++ b/libs/WindowManager/Shell/res/values-it/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Punto di manipolazione app"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Icona dell\'app"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Schermo intero"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Visualizzazione desktop"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Schermo diviso"</string>
<string name="more_button_text" msgid="3655388105592893530">"Altro"</string>
<string name="float_button_text" msgid="9221657008391364581">"Mobile"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Cambia proporzioni"</string>
<string name="close_text" msgid="4986518933445178928">"Chiudi"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Chiudi il menu"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (visualizzazione desktop)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Massimizza schermo"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Ridimensiona"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Impossibile spostare l\'app qui"</string>
@@ -147,10 +145,8 @@
<string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Ridimensiona la finestra dell\'app a sinistra"</string>
<string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Ridimensiona la finestra dell\'app a destra"</string>
<string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Ingrandisci o ripristina le dimensioni della finestra"</string>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Apri menu"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Attiva <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</string>
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Ridimensiona la finestra a sinistra"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Ridimensiona la finestra a destra"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Ingrandisci o ripristina le dimensioni della finestra"</string>
diff --git a/libs/WindowManager/Shell/res/values-iw/strings.xml b/libs/WindowManager/Shell/res/values-iw/strings.xml
index 102d646eb2b3..5a19f146566e 100644
--- a/libs/WindowManager/Shell/res/values-iw/strings.xml
+++ b/libs/WindowManager/Shell/res/values-iw/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"נקודת אחיזה לאפליקציה"</string>
<string name="app_icon_text" msgid="2823268023931811747">"סמל האפליקציה"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"מסך מלא"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"תצוגה למחשב"</string>
<string name="split_screen_text" msgid="1396336058129570886">"מסך מפוצל"</string>
<string name="more_button_text" msgid="3655388105592893530">"עוד"</string>
<string name="float_button_text" msgid="9221657008391364581">"בלונים"</string>
@@ -133,12 +132,11 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"שינוי יחס הגובה-רוחב"</string>
<string name="close_text" msgid="4986518933445178928">"סגירה"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"סגירת התפריט"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"‫<xliff:g id="APP_NAME">%1$s</xliff:g> (תצוגה למחשב)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"הגדלת המסך"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"שינוי הגודל"</string>
<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_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_restore_button_text" msgid="4234449220944704387">"שחזור"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"פתיחת התפריט"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"כניסה אל <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-kk/strings.xml b/libs/WindowManager/Shell/res/values-kk/strings.xml
index 31a015333096..be9e9c12a417 100644
--- a/libs/WindowManager/Shell/res/values-kk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-kk/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Қолданба идентификаторы"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Қолданба белгішесі"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Толық экран"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Компьютерлік нұсқа"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Экранды бөлу"</string>
<string name="more_button_text" msgid="3655388105592893530">"Қосымша"</string>
<string name="float_button_text" msgid="9221657008391364581">"Қалқыма"</string>
@@ -133,12 +132,11 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Арақатынасты өзгерту"</string>
<string name="close_text" msgid="4986518933445178928">"Жабу"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Мәзірді жабу"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (компьютерлік нұсқа)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Экранды ұлғайту"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Өлшемін өзгерту"</string>
<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_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_restore_button_text" msgid="4234449220944704387">"Қалпына келтіру"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Мәзірді ашу"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> режиміне өту"</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>
diff --git a/libs/WindowManager/Shell/res/values-km/strings.xml b/libs/WindowManager/Shell/res/values-km/strings.xml
index 9a7db6778162..c835650f705f 100644
--- a/libs/WindowManager/Shell/res/values-km/strings.xml
+++ b/libs/WindowManager/Shell/res/values-km/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"ឈ្មោះអ្នកប្រើប្រាស់កម្មវិធី"</string>
<string name="app_icon_text" msgid="2823268023931811747">"រូប​កម្មវិធី"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"អេក្រង់​ពេញ"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"ទិដ្ឋភាព​លើកុំព្យូទ័រ"</string>
<string name="split_screen_text" msgid="1396336058129570886">"មុខងារ​បំបែក​អេក្រង់"</string>
<string name="more_button_text" msgid="3655388105592893530">"ច្រើនទៀត"</string>
<string name="float_button_text" msgid="9221657008391364581">"អណ្ដែត"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"ប្ដូរ​​សមាមាត្រ"</string>
<string name="close_text" msgid="4986518933445178928">"បិទ"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"បិទ​ម៉ឺនុយ"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (ទិដ្ឋភាព​លើកុំព្យូទ័រ)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"ពង្រីកអេក្រង់"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"ប្ដូរ​ទំហំ"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"មិនអាចផ្លាស់ទីកម្មវិធីមកទីនេះបានទេ"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"បើកម៉ឺនុយ"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"ចូលទៅ<xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-kn/strings.xml b/libs/WindowManager/Shell/res/values-kn/strings.xml
index e9fa2cf6aaa5..143208a2e16d 100644
--- a/libs/WindowManager/Shell/res/values-kn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-kn/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"ಆ್ಯಪ್ ಹ್ಯಾಂಡಲ್"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ಆ್ಯಪ್ ಐಕಾನ್"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"ಫುಲ್‌ಸ್ಕ್ರೀನ್"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"ಡೆಸ್ಕ್‌ಟಾಪ್ ವೀಕ್ಷಣೆ"</string>
<string name="split_screen_text" msgid="1396336058129570886">"ಸ್ಪ್ಲಿಟ್ ಸ್ಕ್ರೀನ್"</string>
<string name="more_button_text" msgid="3655388105592893530">"ಇನ್ನಷ್ಟು"</string>
<string name="float_button_text" msgid="9221657008391364581">"ಫ್ಲೋಟ್"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"ದೃಶ್ಯಾನುಪಾತವನ್ನು ಬದಲಾಯಿಸಿ"</string>
<string name="close_text" msgid="4986518933445178928">"ಮುಚ್ಚಿ"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"ಮೆನು ಮುಚ್ಚಿ"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (ಡೆಸ್ಕ್‌ಟಾಪ್ ವೀಕ್ಷಣೆ)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"ಸ್ಕ್ರೀನ್ ಅನ್ನು ಮ್ಯಾಕ್ಸಿಮೈಸ್ ಮಾಡಿ"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"ಮರುಗಾತ್ರಗೊಳಿಸಿ"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"ಆ್ಯಪ್ ಅನ್ನು ಇಲ್ಲಿಗೆ ಸರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"ಮೆನು ತೆರೆಯಿರಿ"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> ಅನ್ನು ನಮೂದಿಸಿ"</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>
diff --git a/libs/WindowManager/Shell/res/values-ky/strings.xml b/libs/WindowManager/Shell/res/values-ky/strings.xml
index 3716741ed61a..fe1bcd481f0b 100644
--- a/libs/WindowManager/Shell/res/values-ky/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ky/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Колдонмонун маркери"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Колдонмонун сүрөтчөсү"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Толук экран"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Компьютердик версия"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Экранды бөлүү"</string>
<string name="more_button_text" msgid="3655388105592893530">"Дагы"</string>
<string name="float_button_text" msgid="9221657008391364581">"Калкыма"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Тараптардын катнашын өзгөртүү"</string>
<string name="close_text" msgid="4986518933445178928">"Жабуу"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Менюну жабуу"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (компьютердик версия)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Экранды чоңойтуу"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Өлчөмүн өзгөртүү"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Колдонмону бул жерге жылдырууга болбойт"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Менюну ачуу"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> режимине өтүү"</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>
diff --git a/libs/WindowManager/Shell/res/values-lo/strings.xml b/libs/WindowManager/Shell/res/values-lo/strings.xml
index a1d9d297ffae..dd9df35cad00 100644
--- a/libs/WindowManager/Shell/res/values-lo/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lo/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"ຊື່ຜູ້ໃຊ້ແອັບ"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ໄອຄອນແອັບ"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"ເຕັມຈໍ"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"ມຸມມອງຢູ່ເດັສທັອບ"</string>
<string name="split_screen_text" msgid="1396336058129570886">"ແບ່ງໜ້າຈໍ"</string>
<string name="more_button_text" msgid="3655388105592893530">"ເພີ່ມເຕີມ"</string>
<string name="float_button_text" msgid="9221657008391364581">"ລອຍ"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"ປ່ຽນອັດຕາສ່ວນຮູບ"</string>
<string name="close_text" msgid="4986518933445178928">"ປິດ"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"ປິດເມນູ"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (ມຸມມອງຢູ່ເດັສທັອບ)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"ປັບຈໍໃຫຍ່ສຸດ"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"ປັບຂະໜາດ"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"ບໍ່ສາມາດຍ້າຍແອັບມາບ່ອນນີ້ໄດ້"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"ເປີດເມນູ"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"ເຂົ້າສູ່ <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-lv/strings.xml b/libs/WindowManager/Shell/res/values-lv/strings.xml
index 3fcbbe20cff3..8c4360b80548 100644
--- a/libs/WindowManager/Shell/res/values-lv/strings.xml
+++ b/libs/WindowManager/Shell/res/values-lv/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Lietotnes turis"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Lietotnes ikona"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Pilnekrāna režīms"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Skats datorā"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Sadalīt ekrānu"</string>
<string name="more_button_text" msgid="3655388105592893530">"Vairāk"</string>
<string name="float_button_text" msgid="9221657008391364581">"Peldošs"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Mainīt malu attiecību"</string>
<string name="close_text" msgid="4986518933445178928">"Aizvērt"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Aizvērt izvēlni"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (skats datorā)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maksimizēt ekrānu"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Mainīt lielumu"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Lietotni nevar pārvietot šeit."</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Atvērt izvēlni"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Atvērt: <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-mk/strings.xml b/libs/WindowManager/Shell/res/values-mk/strings.xml
index 76b62ec1b6cf..653e66a2c586 100644
--- a/libs/WindowManager/Shell/res/values-mk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mk/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Прекар на апликацијата"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Икона на апликацијата"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Цел екран"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Приказ на компјутер"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Поделен екран"</string>
<string name="more_button_text" msgid="3655388105592893530">"Повеќе"</string>
<string name="float_button_text" msgid="9221657008391364581">"Лебдечко"</string>
@@ -133,10 +132,9 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Промени го соодносот"</string>
<string name="close_text" msgid="4986518933445178928">"Затворете"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Затворете го менито"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (приказ на компјутер)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Максимизирај го екранот"</string>
- <string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Промени ја гол."</string>
+ <string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Смени големина"</string>
<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>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Отворете го менито"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Отворете <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-ml/strings.xml b/libs/WindowManager/Shell/res/values-ml/strings.xml
index d9d0cf9b96a9..88876657642d 100644
--- a/libs/WindowManager/Shell/res/values-ml/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ml/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"ആപ്പ് ഹാൻഡിൽ"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ആപ്പ് ഐക്കൺ"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"പൂർണ്ണസ്ക്രീൻ"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"ഡെസ്‌ക്ടോപ്പ് വ്യൂ"</string>
<string name="split_screen_text" msgid="1396336058129570886">"സ്‌ക്രീൻ വിഭജനം"</string>
<string name="more_button_text" msgid="3655388105592893530">"കൂടുതൽ"</string>
<string name="float_button_text" msgid="9221657008391364581">"ഫ്ലോട്ട്"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"വീക്ഷണ അനുപാതം മാറ്റുക"</string>
<string name="close_text" msgid="4986518933445178928">"അടയ്ക്കുക"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"മെനു അടയ്ക്കുക"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (ഡെസ്‌ക്ടോപ്പ് വ്യൂ)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"സ്‌ക്രീൻ വലുതാക്കുക"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"വലുപ്പം മാറ്റുക"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"ആപ്പ് ഇവിടേക്ക് നീക്കാനാകില്ല"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"മെനു തുറക്കുക"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> നൽകുക"</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>
diff --git a/libs/WindowManager/Shell/res/values-mn/strings.xml b/libs/WindowManager/Shell/res/values-mn/strings.xml
index 875eceab05d8..df922e09fb46 100644
--- a/libs/WindowManager/Shell/res/values-mn/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mn/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Аппын бариул"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Aппын дүрс тэмдэг"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Бүтэн дэлгэц"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Дэлгэц дээр харагдах байдал"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Дэлгэцийг хуваах"</string>
<string name="more_button_text" msgid="3655388105592893530">"Бусад"</string>
<string name="float_button_text" msgid="9221657008391364581">"Хөвөгч"</string>
@@ -129,12 +128,11 @@
<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">"Windows-г удирдах"</string>
+ <string name="manage_windows_text" msgid="5567366688493093920">"Цонхнуудыг удирдах"</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>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (дэлгэц дээр харагдах байдал)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Дэлгэцийг томруулах"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Хэмжээг өөрчлөх"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Аппыг ийш зөөх боломжгүй"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Цэсийг нээх"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g>-д орох"</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>
diff --git a/libs/WindowManager/Shell/res/values-mr/strings.xml b/libs/WindowManager/Shell/res/values-mr/strings.xml
index 73c16e67302b..f31631175039 100644
--- a/libs/WindowManager/Shell/res/values-mr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-mr/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"अ‍ॅपचे हँडल"</string>
<string name="app_icon_text" msgid="2823268023931811747">"अ‍ॅप आयकन"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"फुलस्‍क्रीन"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"डेस्कटॉप दृश्य"</string>
<string name="split_screen_text" msgid="1396336058129570886">"स्प्लिट स्क्रीन"</string>
<string name="more_button_text" msgid="3655388105592893530">"आणखी"</string>
<string name="float_button_text" msgid="9221657008391364581">"फ्लोट"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"आस्पेक्ट रेशो बदला"</string>
<string name="close_text" msgid="4986518933445178928">"बंद करा"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"मेनू बंद करा"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (डेस्कटॉप दृश्य)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"स्क्रीन मोठी करा"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"आकार बदला"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"अ‍ॅप इथे हलवू शकत नाही"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"मेनू उघडा"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> एंटर करा"</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>
diff --git a/libs/WindowManager/Shell/res/values-my/strings.xml b/libs/WindowManager/Shell/res/values-my/strings.xml
index be7cca53717e..8697af849ad5 100644
--- a/libs/WindowManager/Shell/res/values-my/strings.xml
+++ b/libs/WindowManager/Shell/res/values-my/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"အက်ပ်သုံးသူအမည်"</string>
<string name="app_icon_text" msgid="2823268023931811747">"အက်ပ်သင်္ကေတ"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"ဖန်သားပြင်အပြည့်"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"ဒက်စ်တော့ မြင်ကွင်း"</string>
<string name="split_screen_text" msgid="1396336058129570886">"မျက်နှာပြင် ခွဲ၍ပြသရန်"</string>
<string name="more_button_text" msgid="3655388105592893530">"ပိုပြပါ"</string>
<string name="float_button_text" msgid="9221657008391364581">"မျှောရန်"</string>
@@ -133,12 +132,11 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"အချိုးအစား ပြောင်းရန်"</string>
<string name="close_text" msgid="4986518933445178928">"ပိတ်ရန်"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"မီနူး ပိတ်ရန်"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (ဒက်စ်တော့ မြင်ကွင်း)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"စခရင်ကို ချဲ့မည်"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"အရွယ်ပြင်ရန်"</string>
<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_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_restore_button_text" msgid="4234449220944704387">"ပြန်ပြောင်းရန်"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"မီနူးဖွင့်ရန်"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> ကို ဝင်ရန်"</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>
diff --git a/libs/WindowManager/Shell/res/values-nb/strings.xml b/libs/WindowManager/Shell/res/values-nb/strings.xml
index c213b7b7227a..43de6363e6bd 100644
--- a/libs/WindowManager/Shell/res/values-nb/strings.xml
+++ b/libs/WindowManager/Shell/res/values-nb/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Apphåndtak"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Appikon"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Fullskjerm"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Datamaskinvisning"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Delt skjerm"</string>
<string name="more_button_text" msgid="3655388105592893530">"Mer"</string>
<string name="float_button_text" msgid="9221657008391364581">"Svevende"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Endre høyde/bredde-forholdet"</string>
<string name="close_text" msgid="4986518933445178928">"Lukk"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Lukk menyen"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (datamaskinvisning)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maksimer skjermen"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Endre størrelse"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Appen kan ikke flyttes hit"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Åpne menyen"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Skriv inn <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>."</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>
diff --git a/libs/WindowManager/Shell/res/values-ne/strings.xml b/libs/WindowManager/Shell/res/values-ne/strings.xml
index e5f4cbebce8c..23b49b7dfe42 100644
--- a/libs/WindowManager/Shell/res/values-ne/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ne/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"एपको ह्यान्डल"</string>
<string name="app_icon_text" msgid="2823268023931811747">"एपको आइकन"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"फुल स्क्रिन"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"डेस्कटप भ्यू"</string>
<string name="split_screen_text" msgid="1396336058129570886">"स्प्लिट स्क्रिन"</string>
<string name="more_button_text" msgid="3655388105592893530">"थप"</string>
<string name="float_button_text" msgid="9221657008391364581">"फ्लोट"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"एस्पेक्ट रेसियो परिवर्तन गर्नुहोस्"</string>
<string name="close_text" msgid="4986518933445178928">"बन्द गर्नुहोस्"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"मेनु बन्द गर्नुहोस्"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (डेस्कटप भ्यू)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"स्क्रिन ठुलो बनाउनुहोस्"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"आकार बदल्नुहोस्"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"एप सारेर यहाँ ल्याउन सकिएन"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"मेनु खोल्नुहोस्"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> प्रयोग गर्नुहोस्"</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>
diff --git a/libs/WindowManager/Shell/res/values-or/strings.xml b/libs/WindowManager/Shell/res/values-or/strings.xml
index 182ea46d83c2..9e1ee43a01b6 100644
--- a/libs/WindowManager/Shell/res/values-or/strings.xml
+++ b/libs/WindowManager/Shell/res/values-or/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"ଆପର ହେଣ୍ଡେଲ"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ଆପ ଆଇକନ"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"ପୂର୍ଣ୍ଣସ୍କ୍ରିନ"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"ଡେସ୍କଟପ ଭ୍ୟୁ"</string>
<string name="split_screen_text" msgid="1396336058129570886">"ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନ"</string>
<string name="more_button_text" msgid="3655388105592893530">"ଅଧିକ"</string>
<string name="float_button_text" msgid="9221657008391364581">"ଫ୍ଲୋଟ"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"ଚଉଡ଼ା ଓ ଉଚ୍ଚତାର ଅନୁପାତ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string>
<string name="close_text" msgid="4986518933445178928">"ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"ମେନୁ ବନ୍ଦ କରନ୍ତୁ"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (ଡେସ୍କଟପ ଭ୍ୟୁ)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"ସ୍କ୍ରିନକୁ ବଡ଼ କରନ୍ତୁ"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"ରିସାଇଜ କରନ୍ତୁ"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"ଆପକୁ ଏଠାକୁ ମୁଭ କରାଯାଇପାରିବ ନାହିଁ"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"ମେନୁ ଖୋଲନ୍ତୁ"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g>ରେ ଲେଖନ୍ତୁ"</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>
diff --git a/libs/WindowManager/Shell/res/values-pl/strings.xml b/libs/WindowManager/Shell/res/values-pl/strings.xml
index 9a1bf3321274..3a55cf3f9f4e 100644
--- a/libs/WindowManager/Shell/res/values-pl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pl/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Uchwyt aplikacji"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikona aplikacji"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Pełny ekran"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Wersja na komputery"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Podzielony ekran"</string>
<string name="more_button_text" msgid="3655388105592893530">"Więcej"</string>
<string name="float_button_text" msgid="9221657008391364581">"Pływające"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Zmień format obrazu"</string>
<string name="close_text" msgid="4986518933445178928">"Zamknij"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Zamknij menu"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (wersja na komputery)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maksymalizuj ekran"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Zmień rozmiar"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Nie można przenieść aplikacji tutaj"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Otwórz menu"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Wybierz <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
index 0ca0e8e40543..3eaf0f515b97 100644
--- a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
@@ -128,7 +128,7 @@
<string name="open_in_browser_text" msgid="9181692926376072904">"Abrir no navegador"</string>
<string name="open_in_app_text" msgid="2874590745116268525">"Abrir na app"</string>
<string name="new_window_text" msgid="6318648868380652280">"Nova janela"</string>
- <string name="manage_windows_text" msgid="5567366688493093920">"Faça a gestão das janelas"</string>
+ <string name="manage_windows_text" msgid="5567366688493093920">"Gerir janelas"</string>
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Alterar formato"</string>
<string name="close_text" msgid="4986518933445178928">"Fechar"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Fechar menu"</string>
diff --git a/libs/WindowManager/Shell/res/values-ro/strings.xml b/libs/WindowManager/Shell/res/values-ro/strings.xml
index f71d93b59120..0195acac1919 100644
--- a/libs/WindowManager/Shell/res/values-ro/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ro/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Handle de aplicație"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Pictograma aplicației"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Ecran complet"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Afișare pe desktop"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Ecran împărțit"</string>
<string name="more_button_text" msgid="3655388105592893530">"Mai multe"</string>
<string name="float_button_text" msgid="9221657008391364581">"Flotantă"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Schimbă raportul de dimensiuni"</string>
<string name="close_text" msgid="4986518933445178928">"Închide"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Închide meniul"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (afișare pe desktop)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maximizează fereastra"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Redimensionează"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Aplicația nu poate fi mutată aici"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Deschide meniul"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Introdu <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-si/strings.xml b/libs/WindowManager/Shell/res/values-si/strings.xml
index b7b286338f16..26bd9372763c 100644
--- a/libs/WindowManager/Shell/res/values-si/strings.xml
+++ b/libs/WindowManager/Shell/res/values-si/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"යෙදුම් හසුරුව"</string>
<string name="app_icon_text" msgid="2823268023931811747">"යෙදුම් නිරූපකය"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"පූර්ණ තිරය"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"ඩෙස්ක්ටොප් දසුන"</string>
<string name="split_screen_text" msgid="1396336058129570886">"බෙදුම් තිරය"</string>
<string name="more_button_text" msgid="3655388105592893530">"තව"</string>
<string name="float_button_text" msgid="9221657008391364581">"පාවෙන"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"දර්ශන අනුපාතය වෙනස් කරන්න"</string>
<string name="close_text" msgid="4986518933445178928">"වසන්න"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"මෙනුව වසන්න"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (ඩෙස්ක්ටොප් දසුන)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"තිරය උපරිම කරන්න"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"ප්‍රතිප්‍රමාණය කරන්න"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"යෙදුම මෙතැනට ගෙන යා නොහැක"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"මෙනුව විවෘත කරන්න"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> ඇතුළු කරන්න"</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>
diff --git a/libs/WindowManager/Shell/res/values-sk/strings.xml b/libs/WindowManager/Shell/res/values-sk/strings.xml
index ede0cdda7ab5..8b6999e9c0d0 100644
--- a/libs/WindowManager/Shell/res/values-sk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sk/strings.xml
@@ -128,7 +128,7 @@
<string name="open_in_browser_text" msgid="9181692926376072904">"Otvoriť v prehliadači"</string>
<string name="open_in_app_text" msgid="2874590745116268525">"Otvoriť v aplikácii"</string>
<string name="new_window_text" msgid="6318648868380652280">"Nové okno"</string>
- <string name="manage_windows_text" msgid="5567366688493093920">"Správa okien"</string>
+ <string name="manage_windows_text" msgid="5567366688493093920">"Spravovať okná"</string>
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Zmeniť pomer strán"</string>
<string name="close_text" msgid="4986518933445178928">"Zavrieť"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Zavrieť ponuku"</string>
diff --git a/libs/WindowManager/Shell/res/values-sq/strings.xml b/libs/WindowManager/Shell/res/values-sq/strings.xml
index ea26bc6a5a4c..45a1c001755f 100644
--- a/libs/WindowManager/Shell/res/values-sq/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sq/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Emërtimi i aplikacionit"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ikona e aplikacionit"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Ekrani i plotë"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Pamja për desktop"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Ekrani i ndarë"</string>
<string name="more_button_text" msgid="3655388105592893530">"Më shumë"</string>
<string name="float_button_text" msgid="9221657008391364581">"Pluskuese"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Ndrysho raportin e pamjes"</string>
<string name="close_text" msgid="4986518933445178928">"Mbyll"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Mbyll menynë"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (Pamja për desktop)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maksimizo ekranin"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Ndrysho përmasat"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Aplikacioni nuk mund të zhvendoset këtu"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Hap menynë"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Kalo te \"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g>\""</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>
diff --git a/libs/WindowManager/Shell/res/values-sr/strings.xml b/libs/WindowManager/Shell/res/values-sr/strings.xml
index ea7a1bb292f2..40ca9a41d290 100644
--- a/libs/WindowManager/Shell/res/values-sr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sr/strings.xml
@@ -134,9 +134,9 @@
<string name="collapse_menu_text" msgid="7515008122450342029">"Затворите мени"</string>
<string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (приказ за рачунаре)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Повећај екран"</string>
- <string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Промени величину"</string>
+ <string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Прилагоди"</string>
<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_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_restore_button_text" msgid="4234449220944704387">"Вратите"</string>
diff --git a/libs/WindowManager/Shell/res/values-sv/strings.xml b/libs/WindowManager/Shell/res/values-sv/strings.xml
index f3e53d0ed0c8..4e126e88d242 100644
--- a/libs/WindowManager/Shell/res/values-sv/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sv/strings.xml
@@ -136,7 +136,7 @@
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Maximera skärmen"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Ändra storlek"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Det går inte att flytta appen hit"</string>
- <string name="desktop_mode_maximize_menu_immersive_button_text" msgid="559492223133829481">"Uppslukande"</string>
+ <string name="desktop_mode_maximize_menu_immersive_button_text" msgid="559492223133829481">"Immersiv"</string>
<string name="desktop_mode_maximize_menu_immersive_restore_button_text" msgid="4900114367354709257">"Återställ"</string>
<string name="desktop_mode_maximize_menu_maximize_button_text" msgid="3090199175564175845">"Utöka"</string>
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Återställ"</string>
diff --git a/libs/WindowManager/Shell/res/values-sw/strings.xml b/libs/WindowManager/Shell/res/values-sw/strings.xml
index 51aacac5902c..8bfdfc62a5b7 100644
--- a/libs/WindowManager/Shell/res/values-sw/strings.xml
+++ b/libs/WindowManager/Shell/res/values-sw/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Utambulisho wa programu"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Aikoni ya Programu"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Skrini nzima"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Mwonekano wa Kompyuta"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Gawa Skrini"</string>
<string name="more_button_text" msgid="3655388105592893530">"Zaidi"</string>
<string name="float_button_text" msgid="9221657008391364581">"Inayoelea"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Badilisha uwiano"</string>
<string name="close_text" msgid="4986518933445178928">"Funga"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Funga Menyu"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (Mwonekano wa Kompyuta)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Panua Dirisha kwenye Skrini"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Badilisha ukubwa"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Imeshindwa kuhamishia programu hapa"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Fungua Menyu"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Weka <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-ta/strings.xml b/libs/WindowManager/Shell/res/values-ta/strings.xml
index 0c7206c0b9d8..4d9093c5bf31 100644
--- a/libs/WindowManager/Shell/res/values-ta/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ta/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"ஆப்ஸ் ஹேண்டில்"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ஆப்ஸ் ஐகான்"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"முழுத்திரை"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"டெஸ்க்டாப் காட்சி"</string>
<string name="split_screen_text" msgid="1396336058129570886">"திரையைப் பிரிக்கும்"</string>
<string name="more_button_text" msgid="3655388105592893530">"கூடுதல் விருப்பத்தேர்வுகள்"</string>
<string name="float_button_text" msgid="9221657008391364581">"மிதக்கும் சாளரம்"</string>
@@ -133,12 +132,11 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"தோற்ற விகிதத்தை மாற்று"</string>
<string name="close_text" msgid="4986518933445178928">"மூடும்"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"மெனுவை மூடும்"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (டெஸ்க்டாப் காட்சி)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"திரையைப் பெரிதாக்கு"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"அளவை மாற்று"</string>
<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_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_restore_button_text" msgid="4234449220944704387">"மீட்டெடுக்கும்"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"மெனுவைத் திறக்கும்"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> ஐ உள்ளிடும்"</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>
diff --git a/libs/WindowManager/Shell/res/values-tl/strings.xml b/libs/WindowManager/Shell/res/values-tl/strings.xml
index 5787e10d1ad3..056bc225669c 100644
--- a/libs/WindowManager/Shell/res/values-tl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-tl/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Handle ng app"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Icon ng App"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Fullscreen"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Desktop View"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Split Screen"</string>
<string name="more_button_text" msgid="3655388105592893530">"Higit pa"</string>
<string name="float_button_text" msgid="9221657008391364581">"Float"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Baguhin ang aspect ratio"</string>
<string name="close_text" msgid="4986518933445178928">"Isara"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Isara ang Menu"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (Desktop View)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"I-maximize ang Screen"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"I-resize"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Hindi mailipat dito ang app"</string>
@@ -147,10 +145,8 @@
<string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"I-resize pakaliwa ang window ng app"</string>
<string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"I-resize pakanan ang window ng app"</string>
<string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"I-maximize o i-restore ang laki ng window"</string>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Buksan ang Menu"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Pumasok sa <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</string>
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"I-resize pakaliwa ang window"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"I-resize pakanan ang window"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"I-maximize o i-restore ang laki ng window"</string>
diff --git a/libs/WindowManager/Shell/res/values-tr/strings.xml b/libs/WindowManager/Shell/res/values-tr/strings.xml
index 28b2a7d314d1..017f6bb1d539 100644
--- a/libs/WindowManager/Shell/res/values-tr/strings.xml
+++ b/libs/WindowManager/Shell/res/values-tr/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Uygulama tanıtıcısı"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Uygulama Simgesi"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Tam Ekran"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Masaüstü görünümü"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Bölünmüş Ekran"</string>
<string name="more_button_text" msgid="3655388105592893530">"Daha Fazla"</string>
<string name="float_button_text" msgid="9221657008391364581">"Havada Süzülen"</string>
@@ -133,12 +132,11 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"En boy oranını değiştir"</string>
<string name="close_text" msgid="4986518933445178928">"Kapat"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Menüyü kapat"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (masaüstü görünümü)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Ekranı Büyüt"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Yeniden boyutlandır"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Uygulama buraya taşınamıyor"</string>
- <string name="desktop_mode_maximize_menu_immersive_button_text" msgid="559492223133829481">"Etkileyici"</string>
+ <string name="desktop_mode_maximize_menu_immersive_button_text" msgid="559492223133829481">"Tam ekran"</string>
<string name="desktop_mode_maximize_menu_immersive_restore_button_text" msgid="4900114367354709257">"Geri yükle"</string>
<string name="desktop_mode_maximize_menu_maximize_button_text" msgid="3090199175564175845">"Ekranı kapla"</string>
<string name="desktop_mode_maximize_menu_restore_button_text" msgid="4234449220944704387">"Geri yükle"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Menüyü aç"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> moduna geç"</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>
diff --git a/libs/WindowManager/Shell/res/values-uk/strings.xml b/libs/WindowManager/Shell/res/values-uk/strings.xml
index f5693ca04f1e..32ce4a0c6ece 100644
--- a/libs/WindowManager/Shell/res/values-uk/strings.xml
+++ b/libs/WindowManager/Shell/res/values-uk/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Дескриптор додатка"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Значок додатка"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"На весь екран"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Версія для ПК"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Розділити екран"</string>
<string name="more_button_text" msgid="3655388105592893530">"Більше"</string>
<string name="float_button_text" msgid="9221657008391364581">"Плаваюче вікно"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Змінити формат"</string>
<string name="close_text" msgid="4986518933445178928">"Закрити"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Закрити меню"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (версія для ПК)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Розгорнути екран"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Змінити розмір"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Сюди не можна перемістити додаток"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Відкрити меню"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Відкрити в режимі \"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g>\""</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>
diff --git a/libs/WindowManager/Shell/res/values-ur/strings.xml b/libs/WindowManager/Shell/res/values-ur/strings.xml
index a801b5eb47b0..4de0c47d2750 100644
--- a/libs/WindowManager/Shell/res/values-ur/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ur/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"ایپ ہینڈل"</string>
<string name="app_icon_text" msgid="2823268023931811747">"ایپ کا آئیکن"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"مکمل اسکرین"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"ڈیسک ٹاپ منظر"</string>
<string name="split_screen_text" msgid="1396336058129570886">"اسپلٹ اسکرین"</string>
<string name="more_button_text" msgid="3655388105592893530">"مزید"</string>
<string name="float_button_text" msgid="9221657008391364581">"فلوٹ"</string>
@@ -129,12 +128,11 @@
<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">"‏‫Windows کا نظم کریں"</string>
+ <string name="manage_windows_text" msgid="5567366688493093920">"ونڈوز کا نظم کریں"</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>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"‫<xliff:g id="APP_NAME">%1$s</xliff:g> (ڈیسک ٹاپ منظر)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"اسکرین کو بڑا کریں"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"سائز تبدیل کریں"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"ایپ کو یہاں منتقل نہیں کیا جا سکتا"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"مینیو کھولیں"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"‫<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> درج کریں"</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>
diff --git a/libs/WindowManager/Shell/res/values-uz/strings.xml b/libs/WindowManager/Shell/res/values-uz/strings.xml
index 9fbbdc81fc8e..8c0d9bb216d4 100644
--- a/libs/WindowManager/Shell/res/values-uz/strings.xml
+++ b/libs/WindowManager/Shell/res/values-uz/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Ilova identifikatori"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Ilova belgisi"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Butun ekran"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Desktop versiya"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Ekranni ikkiga ajratish"</string>
<string name="more_button_text" msgid="3655388105592893530">"Yana"</string>
<string name="float_button_text" msgid="9221657008391364581">"Pufakli"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Tomonlar nisbatini oʻzgartirish"</string>
<string name="close_text" msgid="4986518933445178928">"Yopish"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Menyuni yopish"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (desktop versiya)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Ekranni yoyish"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Oʻlchamini oʻzgartirish"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Ilova bu yerga surilmaydi"</string>
@@ -147,10 +145,8 @@
<string name="desktop_mode_a11y_action_snap_left" msgid="2932955411661734668">"Ilova chap oynasi oʻlchamini oʻzgartirish"</string>
<string name="desktop_mode_a11y_action_snap_right" msgid="4577032451624261787">"Ilova oʻng oynasi oʻlchamini oʻzgartirish"</string>
<string name="desktop_mode_a11y_action_maximize_restore" msgid="8026037983417986686">"Oyna oʻlchamini kengaytirish yoki asliga qaytarish"</string>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Menyuni ochish"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"<xliff:g id="WINDOWING_MODE">%1$s</xliff:g> rejimiga kirish"</string>
<string name="maximize_menu_talkback_action_snap_left_text" msgid="500309467459084564">"Oyna oʻlchamini chapga oʻzgartirish"</string>
<string name="maximize_menu_talkback_action_snap_right_text" msgid="7010831426654467163">"Oyna oʻlchamini oʻngga oʻzgartirish"</string>
<string name="maximize_menu_talkback_action_maximize_restore_text" msgid="4942610897847934859">"Oyna oʻlchamini kengaytirish yoki asliga qaytarish"</string>
diff --git a/libs/WindowManager/Shell/res/values-vi/strings.xml b/libs/WindowManager/Shell/res/values-vi/strings.xml
index b40a4e63be2b..3455eedeca5f 100644
--- a/libs/WindowManager/Shell/res/values-vi/strings.xml
+++ b/libs/WindowManager/Shell/res/values-vi/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Ô điều khiển ứng dụng"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Biểu tượng ứng dụng"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Toàn màn hình"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Chế độ xem trên máy tính để bàn"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Chia đôi màn hình"</string>
<string name="more_button_text" msgid="3655388105592893530">"Tuỳ chọn khác"</string>
<string name="float_button_text" msgid="9221657008391364581">"Nổi"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Thay đổi tỷ lệ khung hình"</string>
<string name="close_text" msgid="4986518933445178928">"Đóng"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Đóng trình đơn"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (Chế độ xem trên máy tính để bàn)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Mở rộng màn hình"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Đổi kích thước"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"Không di chuyển được ứng dụng đến đây"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Mở Trình đơn"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Nhập <xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
index 45cd25bcc757..369fa4ba6244 100644
--- a/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rCN/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"应用手柄"</string>
<string name="app_icon_text" msgid="2823268023931811747">"应用图标"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"全屏"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"桌面版视图"</string>
<string name="split_screen_text" msgid="1396336058129570886">"分屏"</string>
<string name="more_button_text" msgid="3655388105592893530">"更多"</string>
<string name="float_button_text" msgid="9221657008391364581">"悬浮"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"更改宽高比"</string>
<string name="close_text" msgid="4986518933445178928">"关闭"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"关闭菜单"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g>(桌面版视图)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"最大化屏幕"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"调整大小"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"无法将应用移至此处"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"打开菜单"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"进入<xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
index d2c22da78ac0..8624f94d50b6 100644
--- a/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rHK/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"應用程式控點"</string>
<string name="app_icon_text" msgid="2823268023931811747">"應用程式圖示"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"全螢幕"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"桌面電腦檢視模式"</string>
<string name="split_screen_text" msgid="1396336058129570886">"分割螢幕"</string>
<string name="more_button_text" msgid="3655388105592893530">"更多"</string>
<string name="float_button_text" msgid="9221657008391364581">"浮動"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"變更長寬比"</string>
<string name="close_text" msgid="4986518933445178928">"關閉"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"關閉選單"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (桌面電腦檢視模式)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"畫面最大化"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"調整大小"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"應用程式無法移至這裡"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"打開選單"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"進入<xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
index 0984fadc9b54..199c10257d5b 100644
--- a/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zh-rTW/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"應用程式控制代碼"</string>
<string name="app_icon_text" msgid="2823268023931811747">"應用程式圖示"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"全螢幕"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"電腦檢視畫面"</string>
<string name="split_screen_text" msgid="1396336058129570886">"分割畫面"</string>
<string name="more_button_text" msgid="3655388105592893530">"更多"</string>
<string name="float_button_text" msgid="9221657008391364581">"浮動"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"變更顯示比例"</string>
<string name="close_text" msgid="4986518933445178928">"關閉"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"關閉選單"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (電腦檢視畫面)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"畫面最大化"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"調整大小"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"應用程式無法移至此處"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"開啟選單"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"進入<xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/res/values-zu/strings.xml b/libs/WindowManager/Shell/res/values-zu/strings.xml
index 13f8ed16faaa..8f40142736bc 100644
--- a/libs/WindowManager/Shell/res/values-zu/strings.xml
+++ b/libs/WindowManager/Shell/res/values-zu/strings.xml
@@ -119,8 +119,7 @@
<string name="handle_text" msgid="4419667835599523257">"Inkomba ye-App"</string>
<string name="app_icon_text" msgid="2823268023931811747">"Isithonjana Se-app"</string>
<string name="fullscreen_text" msgid="1162316685217676079">"Isikrini esigcwele"</string>
- <!-- no translation found for desktop_text (1582173066857454541) -->
- <skip />
+ <string name="desktop_text" msgid="1582173066857454541">"Ukubuka Kwedeskithophu"</string>
<string name="split_screen_text" msgid="1396336058129570886">"Hlukanisa isikrini"</string>
<string name="more_button_text" msgid="3655388105592893530">"Okwengeziwe"</string>
<string name="float_button_text" msgid="9221657008391364581">"Iflowuthi"</string>
@@ -133,8 +132,7 @@
<string name="change_aspect_ratio_text" msgid="9104456064548212806">"Shintsha ukubukeka kwesilinganiselo"</string>
<string name="close_text" msgid="4986518933445178928">"Vala"</string>
<string name="collapse_menu_text" msgid="7515008122450342029">"Vala Imenyu"</string>
- <!-- no translation found for desktop_mode_app_header_chip_text (8300164817452574565) -->
- <skip />
+ <string name="desktop_mode_app_header_chip_text" msgid="8300164817452574565">"<xliff:g id="APP_NAME">%1$s</xliff:g> (Ukubuka Kwedeskithophu)"</string>
<string name="desktop_mode_maximize_menu_maximize_text" msgid="3275717276171114411">"Khulisa Isikrini Sifike Ekugcineni"</string>
<string name="desktop_mode_maximize_menu_snap_text" msgid="5673738963174074006">"Shintsha usayizi"</string>
<string name="desktop_mode_non_resizable_snap_text" msgid="3771776422751387878">"I-app ayikwazi ukuhanjiswa lapha"</string>
@@ -147,10 +145,8 @@
<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>
- <!-- no translation found for app_handle_chip_accessibility_announce (499881698947450536) -->
- <skip />
- <!-- no translation found for app_handle_menu_accessibility_announce (7928858564852785398) -->
- <skip />
+ <string name="app_handle_chip_accessibility_announce" msgid="499881698947450536">"Vula Imenyu"</string>
+ <string name="app_handle_menu_accessibility_announce" msgid="7928858564852785398">"Faka i-<xliff:g id="WINDOWING_MODE">%1$s</xliff:g>"</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>
diff --git a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/GroupedTaskInfo.java b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/GroupedTaskInfo.java
index 0a1e3b9495a0..25b9f8ccc6ae 100644
--- a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/GroupedTaskInfo.java
+++ b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/GroupedTaskInfo.java
@@ -47,20 +47,26 @@ public class GroupedTaskInfo implements Parcelable {
public static final int TYPE_FULLSCREEN = 1;
public static final int TYPE_SPLIT = 2;
- public static final int TYPE_FREEFORM = 3;
+ public static final int TYPE_DESK = 3;
public static final int TYPE_MIXED = 4;
@IntDef(prefix = {"TYPE_"}, value = {
TYPE_FULLSCREEN,
TYPE_SPLIT,
- TYPE_FREEFORM,
+ TYPE_DESK,
TYPE_MIXED
})
public @interface GroupType {}
/**
+ * The ID of the desk that this `GroupedTaskInfo` represents (when the type is `TYPE_DESK`). The
+ * value is -1 if this is not a desk.
+ */
+ private final int mDeskId;
+
+ /**
* The type of this particular task info, can be one of TYPE_FULLSCREEN, TYPE_SPLIT or
- * TYPE_FREEFORM.
+ * TYPE_DESK.
*/
@GroupType
protected final int mType;
@@ -69,7 +75,7 @@ public class GroupedTaskInfo implements Parcelable {
* The list of tasks associated with this single recent task info.
* TYPE_FULLSCREEN: Contains the stack of tasks associated with a single "task" in overview
* TYPE_SPLIT: Contains the two split roots of each side
- * TYPE_FREEFORM: Contains the set of tasks currently in freeform mode
+ * TYPE_DESK: Contains the set of tasks currently in freeform mode contained in desk.
*/
@Nullable
protected final List<TaskInfo> mTasks;
@@ -83,7 +89,7 @@ public class GroupedTaskInfo implements Parcelable {
protected final SplitBounds mSplitBounds;
/**
- * Only set for TYPE_FREEFORM.
+ * Only set for TYPE_DESK.
*
* TODO(b/348332802): move isMinimized inside each Task object instead once we have a
* replacement for RecentTaskInfo
@@ -103,8 +109,8 @@ public class GroupedTaskInfo implements Parcelable {
* Create new for a stack of fullscreen tasks
*/
public static GroupedTaskInfo forFullscreenTasks(@NonNull TaskInfo task) {
- return new GroupedTaskInfo(List.of(task), null, TYPE_FULLSCREEN,
- null /* minimizedFreeformTasks */);
+ return new GroupedTaskInfo(/* deskId = */ -1, List.of(task), null, TYPE_FULLSCREEN,
+ /* minimizedFreeformTaskIds = */ null);
}
/**
@@ -112,18 +118,19 @@ public class GroupedTaskInfo implements Parcelable {
*/
public static GroupedTaskInfo forSplitTasks(@NonNull TaskInfo task1,
@NonNull TaskInfo task2, @NonNull SplitBounds splitBounds) {
- return new GroupedTaskInfo(List.of(task1, task2), splitBounds, TYPE_SPLIT,
- null /* minimizedFreeformTasks */);
+ return new GroupedTaskInfo(/* deskId = */ -1, List.of(task1, task2), splitBounds,
+ TYPE_SPLIT, /* minimizedFreeformTaskIds = */ null);
}
/**
- * Create new for a group of freeform tasks
+ * Create new for a group of freeform tasks that belong to a single desk.
*/
- public static GroupedTaskInfo forFreeformTasks(
- @NonNull List<TaskInfo> tasks,
- @NonNull Set<Integer> minimizedFreeformTasks) {
- return new GroupedTaskInfo(tasks, null /* splitBounds */, TYPE_FREEFORM,
- minimizedFreeformTasks.stream().mapToInt(i -> i).toArray());
+ public static GroupedTaskInfo forDeskTasks(
+ int deskId,
+ @NonNull List<TaskInfo> tasks,
+ @NonNull Set<Integer> minimizedFreeformTaskIds) {
+ return new GroupedTaskInfo(deskId, tasks, /* splitBounds = */ null, TYPE_DESK,
+ minimizedFreeformTaskIds.stream().mapToInt(i -> i).toArray());
}
/**
@@ -141,10 +148,12 @@ public class GroupedTaskInfo implements Parcelable {
}
private GroupedTaskInfo(
+ int deskId,
@NonNull List<TaskInfo> tasks,
@Nullable SplitBounds splitBounds,
@GroupType int type,
@Nullable int[] minimizedFreeformTaskIds) {
+ mDeskId = deskId;
mTasks = tasks;
mGroupedTasks = null;
mSplitBounds = splitBounds;
@@ -154,6 +163,7 @@ public class GroupedTaskInfo implements Parcelable {
}
private GroupedTaskInfo(@NonNull List<GroupedTaskInfo> groupedTasks) {
+ mDeskId = -1;
mTasks = null;
mGroupedTasks = groupedTasks;
mSplitBounds = null;
@@ -174,6 +184,7 @@ public class GroupedTaskInfo implements Parcelable {
}
protected GroupedTaskInfo(@NonNull Parcel parcel) {
+ mDeskId = parcel.readInt();
mTasks = new ArrayList();
final int numTasks = parcel.readInt();
for (int i = 0; i < numTasks; i++) {
@@ -274,6 +285,16 @@ public class GroupedTaskInfo implements Parcelable {
}
/**
+ * Returns the ID of the desk represented by `this` if the type is `TYPE_DESK`, or -1 otherwise.
+ */
+ public int getDeskId() {
+ if (mType == TYPE_MIXED) {
+ throw new IllegalStateException("No desk ID for a mixed task");
+ }
+ return mDeskId;
+ }
+
+ /**
* Get type of this recents entry. One of {@link GroupType}.
* Note: This is deprecated, callers should use `isBaseType()` and not make assumptions about
* specific group types
@@ -285,7 +306,7 @@ public class GroupedTaskInfo implements Parcelable {
}
/**
- * Returns the set of minimized task ids, only valid for TYPE_FREEFORM.
+ * Returns the set of minimized task ids, only valid for TYPE_DESK.
*/
@Nullable
public int[] getMinimizedTaskIds() {
@@ -301,7 +322,8 @@ public class GroupedTaskInfo implements Parcelable {
return false;
}
GroupedTaskInfo other = (GroupedTaskInfo) obj;
- return mType == other.mType
+ return mDeskId == other.mDeskId
+ && mType == other.mType
&& Objects.equals(mTasks, other.mTasks)
&& Objects.equals(mGroupedTasks, other.mGroupedTasks)
&& Objects.equals(mSplitBounds, other.mSplitBounds)
@@ -310,7 +332,7 @@ public class GroupedTaskInfo implements Parcelable {
@Override
public int hashCode() {
- return Objects.hash(mType, mTasks, mGroupedTasks, mSplitBounds,
+ return Objects.hash(mDeskId, mType, mTasks, mGroupedTasks, mSplitBounds,
Arrays.hashCode(mMinimizedTaskIds));
}
@@ -322,6 +344,7 @@ public class GroupedTaskInfo implements Parcelable {
.map(GroupedTaskInfo::toString)
.collect(Collectors.joining(",\n\t", "[\n\t", "\n]")));
} else {
+ taskString.append("Desk ID= ").append(mDeskId).append(", ");
taskString.append("Tasks=" + mTasks.stream()
.map(taskInfo -> getTaskInfoDumpString(taskInfo))
.collect(Collectors.joining(", ", "[", "]")));
@@ -353,6 +376,7 @@ public class GroupedTaskInfo implements Parcelable {
@Override
public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeInt(mDeskId);
// We don't use the parcel list methods because we want to only write the TaskInfo state
// and not the subclasses (Recents/RunningTaskInfo) whose fields are all deprecated
final int tasksSize = mTasks != null ? mTasks.size() : 0;
@@ -375,7 +399,7 @@ public class GroupedTaskInfo implements Parcelable {
return switch (type) {
case TYPE_FULLSCREEN -> "FULLSCREEN";
case TYPE_SPLIT -> "SPLIT";
- case TYPE_FREEFORM -> "FREEFORM";
+ case TYPE_DESK -> "DESK";
case TYPE_MIXED -> "MIXED";
default -> "UNKNOWN";
};
diff --git a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/animation/Interpolators.java b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/animation/Interpolators.java
index e92c1eb81e89..43dd9b73b352 100644
--- a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/animation/Interpolators.java
+++ b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/animation/Interpolators.java
@@ -74,6 +74,12 @@ public class Interpolators {
0.05f, 0.7f, 0.1f, 1f);
/**
+ * The standard accelerating interpolator that should be used on every regular movement of
+ * content that is disappearing e.g. when moving off screen.
+ */
+ public static final Interpolator STANDARD_ACCELERATE = new PathInterpolator(0.3f, 0f, 1f, 1f);
+
+ /**
* The standard decelerating interpolator that should be used on every regular movement of
* content that is appearing e.g. when coming from off screen.
*/
diff --git a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/animation/MinimizeAnimator.kt b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/animation/MinimizeAnimator.kt
index 0586e265eced..4ecace0292cf 100644
--- a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/animation/MinimizeAnimator.kt
+++ b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/animation/MinimizeAnimator.kt
@@ -19,52 +19,76 @@ package com.android.wm.shell.shared.animation
import android.animation.Animator
import android.animation.AnimatorSet
import android.animation.ValueAnimator
-import android.util.DisplayMetrics
+import android.content.Context
+import android.os.Handler
+import android.view.Choreographer
import android.view.SurfaceControl.Transaction
-import android.view.animation.LinearInterpolator
-import android.view.animation.PathInterpolator
import android.window.TransitionInfo.Change
+import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_MINIMIZE_WINDOW
+import com.android.internal.jank.InteractionJankMonitor
/** Creates minimization animation */
object MinimizeAnimator {
private const val MINIMIZE_ANIM_ALPHA_DURATION_MS = 100L
- private val STANDARD_ACCELERATE = PathInterpolator(0.3f, 0f, 1f, 1f)
-
private val minimizeBoundsAnimationDef =
WindowAnimator.BoundsAnimationParams(
durationMs = 200,
endOffsetYDp = 12f,
endScale = 0.97f,
- interpolator = STANDARD_ACCELERATE,
+ interpolator = Interpolators.STANDARD_ACCELERATE,
)
+ /**
+ * Creates a minimize animator for given task [Change].
+ *
+ * @param onAnimFinish finish-callback for the animation, note that this is called on the same
+ * thread as the animation itself.
+ * @param animationHandler the Handler that the animation is running on.
+ */
@JvmStatic
fun create(
- displayMetrics: DisplayMetrics,
+ context: Context,
change: Change,
transaction: Transaction,
onAnimFinish: (Animator) -> Unit,
+ interactionJankMonitor: InteractionJankMonitor,
+ animationHandler: Handler,
): Animator {
val boundsAnimator = WindowAnimator.createBoundsAnimator(
- displayMetrics,
+ context.resources.displayMetrics,
minimizeBoundsAnimationDef,
change,
transaction,
)
val alphaAnimator = ValueAnimator.ofFloat(1f, 0f).apply {
duration = MINIMIZE_ANIM_ALPHA_DURATION_MS
- interpolator = LinearInterpolator()
+ interpolator = Interpolators.LINEAR
addUpdateListener { animation ->
- transaction.setAlpha(change.leash, animation.animatedValue as Float).apply()
+ transaction
+ .setAlpha(change.leash, animation.animatedValue as Float)
+ .setFrameTimeline(Choreographer.getInstance().vsyncId)
+ .apply()
}
}
val listener = object : Animator.AnimatorListener {
- override fun onAnimationEnd(animator: Animator) = onAnimFinish(animator)
- override fun onAnimationCancel(animator: Animator) = Unit
+ override fun onAnimationStart(animator: Animator) {
+ interactionJankMonitor.begin(
+ change.leash,
+ context,
+ animationHandler,
+ CUJ_DESKTOP_MODE_MINIMIZE_WINDOW,
+ )
+ }
+ override fun onAnimationCancel(animator: Animator) {
+ interactionJankMonitor.cancel(CUJ_DESKTOP_MODE_MINIMIZE_WINDOW)
+ }
override fun onAnimationRepeat(animator: Animator) = Unit
- override fun onAnimationStart(animator: Animator) = Unit
+ override fun onAnimationEnd(animator: Animator) {
+ interactionJankMonitor.end(CUJ_DESKTOP_MODE_MINIMIZE_WINDOW)
+ onAnimFinish(animator)
+ }
}
return AnimatorSet().apply {
playTogether(boundsAnimator, alphaAnimator)
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java
index f269b3831aab..78f5154c0ecb 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java
@@ -364,7 +364,7 @@ class ActivityEmbeddingAnimationRunner {
@NonNull SurfaceControl.Transaction finishTransaction,
@NonNull List<ActivityEmbeddingAnimationAdapter> adapters) {
for (ActivityEmbeddingAnimationAdapter adapter : adapters) {
- final int backgroundColor = getTransitionBackgroundColorIfSet(info, adapter.mChange,
+ final int backgroundColor = getTransitionBackgroundColorIfSet(adapter.mChange,
adapter.mAnimation, 0 /* defaultColor */);
if (backgroundColor != 0) {
// We only need to show one color.
@@ -436,8 +436,8 @@ class ActivityEmbeddingAnimationRunner {
final TransitionInfo.AnimationOptions options = boundsAnimationChange
.getAnimationOptions();
if (options != null) {
- final Animation overrideAnimation = mAnimationSpec.loadCustomAnimationFromOptions(
- options, TRANSIT_CHANGE);
+ final Animation overrideAnimation =
+ mAnimationSpec.loadCustomAnimation(options, TRANSIT_CHANGE);
if (overrideAnimation != null) {
overrideShowBackdrop = overrideAnimation.getShowBackdrop();
}
@@ -447,7 +447,7 @@ class ActivityEmbeddingAnimationRunner {
// There are two animations in the array. The first one is for the start leash
// (snapshot), and the second one is for the end leash (TaskFragment).
final Animation[] animations =
- mAnimationSpec.createChangeBoundsChangeAnimations(info, change, parentBounds);
+ mAnimationSpec.createChangeBoundsChangeAnimations(change, parentBounds);
// Jump cut if either animation has zero for duration.
for (Animation animation : animations) {
if (shouldUseJumpCutForAnimation(animation)) {
@@ -500,12 +500,10 @@ class ActivityEmbeddingAnimationRunner {
// window without bounds change.
animation = ActivityEmbeddingAnimationSpec.createNoopAnimation(change);
} else if (TransitionUtil.isClosingType(change.getMode())) {
- animation =
- mAnimationSpec.createChangeBoundsCloseAnimation(info, change, parentBounds);
+ animation = mAnimationSpec.createChangeBoundsCloseAnimation(change, parentBounds);
shouldShowBackgroundColor = false;
} else {
- animation =
- mAnimationSpec.createChangeBoundsOpenAnimation(info, change, parentBounds);
+ animation = mAnimationSpec.createChangeBoundsOpenAnimation(change, parentBounds);
shouldShowBackgroundColor = false;
}
if (shouldUseJumpCutForAnimation(animation)) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationSpec.java b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationSpec.java
index 77799e99607b..2b9eda40cdbb 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationSpec.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationSpec.java
@@ -42,7 +42,6 @@ import android.view.animation.TranslateAnimation;
import android.window.TransitionInfo;
import com.android.internal.policy.TransitionAnimation;
-import com.android.window.flags.Flags;
import com.android.wm.shell.shared.TransitionUtil;
/** Animation spec for ActivityEmbedding transition. */
@@ -94,9 +93,10 @@ class ActivityEmbeddingAnimationSpec {
/** Animation for window that is opening in a change transition. */
@NonNull
- Animation createChangeBoundsOpenAnimation(@NonNull TransitionInfo info,
- @NonNull TransitionInfo.Change change, @NonNull Rect parentBounds) {
- final Animation customAnimation = loadCustomAnimation(info, change, TRANSIT_CHANGE);
+ Animation createChangeBoundsOpenAnimation(@NonNull TransitionInfo.Change change,
+ @NonNull Rect parentBounds) {
+ final Animation customAnimation =
+ loadCustomAnimation(change.getAnimationOptions(), TRANSIT_CHANGE);
if (customAnimation != null) {
return customAnimation;
}
@@ -126,9 +126,10 @@ class ActivityEmbeddingAnimationSpec {
/** Animation for window that is closing in a change transition. */
@NonNull
- Animation createChangeBoundsCloseAnimation(@NonNull TransitionInfo info,
- @NonNull TransitionInfo.Change change, @NonNull Rect parentBounds) {
- final Animation customAnimation = loadCustomAnimation(info, change, TRANSIT_CHANGE);
+ Animation createChangeBoundsCloseAnimation(@NonNull TransitionInfo.Change change,
+ @NonNull Rect parentBounds) {
+ final Animation customAnimation =
+ loadCustomAnimation(change.getAnimationOptions(), TRANSIT_CHANGE);
if (customAnimation != null) {
return customAnimation;
}
@@ -162,12 +163,13 @@ class ActivityEmbeddingAnimationSpec {
* the second one is for the end leash.
*/
@NonNull
- Animation[] createChangeBoundsChangeAnimations(@NonNull TransitionInfo info,
- @NonNull TransitionInfo.Change change, @NonNull Rect parentBounds) {
+ Animation[] createChangeBoundsChangeAnimations(@NonNull TransitionInfo.Change change,
+ @NonNull Rect parentBounds) {
// TODO(b/293658614): Support more complicated animations that may need more than a noop
// animation as the start leash.
final Animation noopAnimation = createNoopAnimation(change);
- final Animation customAnimation = loadCustomAnimation(info, change, TRANSIT_CHANGE);
+ final Animation customAnimation =
+ loadCustomAnimation(change.getAnimationOptions(), TRANSIT_CHANGE);
if (customAnimation != null) {
return new Animation[]{noopAnimation, customAnimation};
}
@@ -221,7 +223,8 @@ class ActivityEmbeddingAnimationSpec {
Animation loadOpenAnimation(@NonNull TransitionInfo info,
@NonNull TransitionInfo.Change change, @NonNull Rect wholeAnimationBounds) {
final boolean isEnter = TransitionUtil.isOpeningType(change.getMode());
- final Animation customAnimation = loadCustomAnimation(info, change, change.getMode());
+ final Animation customAnimation =
+ loadCustomAnimation(change.getAnimationOptions(), change.getMode());
final Animation animation;
if (customAnimation != null) {
animation = customAnimation;
@@ -248,7 +251,8 @@ class ActivityEmbeddingAnimationSpec {
Animation loadCloseAnimation(@NonNull TransitionInfo info,
@NonNull TransitionInfo.Change change, @NonNull Rect wholeAnimationBounds) {
final boolean isEnter = TransitionUtil.isOpeningType(change.getMode());
- final Animation customAnimation = loadCustomAnimation(info, change, change.getMode());
+ final Animation customAnimation =
+ loadCustomAnimation(change.getAnimationOptions(), change.getMode());
final Animation animation;
if (customAnimation != null) {
animation = customAnimation;
@@ -280,20 +284,8 @@ class ActivityEmbeddingAnimationSpec {
}
@Nullable
- private Animation loadCustomAnimation(@NonNull TransitionInfo info,
- @NonNull TransitionInfo.Change change, @WindowManager.TransitionType int mode) {
- final TransitionInfo.AnimationOptions options;
- if (Flags.moveAnimationOptionsToChange()) {
- options = change.getAnimationOptions();
- } else {
- options = info.getAnimationOptions();
- }
- return loadCustomAnimationFromOptions(options, mode);
- }
-
- @Nullable
- Animation loadCustomAnimationFromOptions(@Nullable TransitionInfo.AnimationOptions options,
- @WindowManager.TransitionType int mode) {
+ Animation loadCustomAnimation(@Nullable TransitionInfo.AnimationOptions options,
+ @WindowManager.TransitionType int mode) {
if (options == null || options.getType() != ANIM_CUSTOM) {
return null;
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingController.java
index 55ed5fa4b56f..3a95333309ac 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingController.java
@@ -40,7 +40,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.window.flags.Flags;
import com.android.wm.shell.shared.TransitionUtil;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.transition.Transitions;
@@ -123,9 +122,6 @@ public class ActivityEmbeddingController implements Transitions.TransitionHandle
}
private boolean shouldAnimateAnimationOptions(@NonNull TransitionInfo info) {
- if (!Flags.moveAnimationOptionsToChange()) {
- return shouldAnimateAnimationOptions(info.getAnimationOptions());
- }
for (TransitionInfo.Change change : info.getChanges()) {
if (!shouldAnimateAnimationOptions(change.getAnimationOptions())) {
// If any of override animation is not supported, don't animate the transition.
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java
index d9489287ff42..313d151aeab7 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/Bubble.java
@@ -364,7 +364,7 @@ public class Bubble implements BubbleViewProvider {
@ShellMainThread Executor mainExecutor, @ShellBackgroundThread Executor bgExecutor) {
return new Bubble(intent,
user,
- /* key= */ getAppBubbleKeyForApp(ComponentUtils.getPackageName(intent), user),
+ /* key= */ getAppBubbleKeyForApp(intent.getIntent().getPackage(), user),
mainExecutor, bgExecutor);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
index 3f607a9c52ef..2c2451cab999 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
@@ -197,6 +197,8 @@ public class BubbleExpandedView extends LinearLayout {
*/
private final FrameLayout mExpandedViewContainer = new FrameLayout(getContext());
+ private TaskView.Listener mCurrentTaskViewListener;
+
private final TaskView.Listener mTaskViewListener = new TaskView.Listener() {
private boolean mInitialized = false;
private boolean mDestroyed = false;
@@ -235,18 +237,24 @@ public class BubbleExpandedView extends LinearLayout {
Context context =
mContext.createContextAsUser(
mBubble.getUser(), Context.CONTEXT_RESTRICTED);
+ Intent fillInIntent = new Intent();
+ fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
PendingIntent pi = PendingIntent.getActivity(
context,
/* requestCode= */ 0,
- mBubble.getIntent().addFlags(FLAG_ACTIVITY_MULTIPLE_TASK),
- PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT,
+ mBubble.getIntent(),
+ // Needs to be mutable for the fillInIntent
+ PendingIntent.FLAG_MUTABLE | PendingIntent.FLAG_UPDATE_CURRENT,
/* options= */ null);
- mTaskView.startActivity(pi, /* fillInIntent= */ null, options,
- launchBounds);
+ mTaskView.startActivity(pi, fillInIntent, options, launchBounds);
} else if (!mIsOverflow && isShortcutBubble) {
ProtoLog.v(WM_SHELL_BUBBLES, "startingShortcutBubble=%s", getBubbleKey());
- options.setLaunchedFromBubble(true);
- options.setApplyActivityFlagsForBubbles(true);
+ if (mBubble.isChat()) {
+ options.setLaunchedFromBubble(true);
+ options.setApplyActivityFlagsForBubbles(true);
+ } else {
+ options.setApplyMultipleTaskFlagForShortcut(true);
+ }
mTaskView.startShortcutActivity(mBubble.getShortcutInfo(),
options, launchBounds);
} else {
@@ -453,7 +461,34 @@ public class BubbleExpandedView extends LinearLayout {
mTaskView = bubbleTaskView.getTaskView();
// reset the insets that might left after TaskView is shown in BubbleBarExpandedView
mTaskView.setCaptionInsets(null);
- bubbleTaskView.setDelegateListener(mTaskViewListener);
+ if (Flags.enableBubbleTaskViewListener()) {
+ mCurrentTaskViewListener = new BubbleTaskViewListener(mContext, bubbleTaskView,
+ /* viewParent= */ this, expandedViewManager,
+ new BubbleTaskViewListener.Callback() {
+ @Override
+ public void onTaskCreated() {
+ setContentVisibility(true);
+ }
+
+ @Override
+ public void onContentVisibilityChanged(boolean visible) {
+ setContentVisibility(visible);
+ }
+
+ @Override
+ public void onBackPressed() {
+ mStackView.onBackPressed();
+ }
+
+ @Override
+ public void onTaskRemovalStarted() {
+ // nothing to do / handled in listener.
+ }
+ });
+ } else {
+ mCurrentTaskViewListener = mTaskViewListener;
+ bubbleTaskView.setDelegateListener(mCurrentTaskViewListener);
+ }
// set a fixed width so it is not recalculated as part of a rotation. the width will be
// updated manually after the rotation.
@@ -464,9 +499,12 @@ public class BubbleExpandedView extends LinearLayout {
}
mExpandedViewContainer.addView(mTaskView, lp);
bringChildToFront(mTaskView);
- if (bubbleTaskView.isCreated()) {
- mTaskViewListener.onTaskCreated(
- bubbleTaskView.getTaskId(), bubbleTaskView.getComponentName());
+
+ if (!Flags.enableBubbleTaskViewListener()) {
+ if (bubbleTaskView.isCreated()) {
+ mCurrentTaskViewListener.onTaskCreated(
+ bubbleTaskView.getTaskId(), bubbleTaskView.getComponentName());
+ }
}
}
}
@@ -897,7 +935,12 @@ public class BubbleExpandedView extends LinearLayout {
Log.w(TAG, "Stack is null for bubble: " + bubble);
return;
}
- boolean isNew = mBubble == null || didBackingContentChange(bubble);
+ boolean isNew;
+ if (mCurrentTaskViewListener instanceof BubbleTaskViewListener) {
+ isNew = ((BubbleTaskViewListener) mCurrentTaskViewListener).setBubble(bubble);
+ } else {
+ isNew = mBubble == null || didBackingContentChange(bubble);
+ }
boolean isUpdate = bubble != null && mBubble != null
&& bubble.getKey().equals(mBubble.getKey());
ProtoLog.d(WM_SHELL_BUBBLES, "BubbleExpandedView - update bubble=%s; isNew=%b; isUpdate=%b",
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
index a38debb702dc..63d713495177 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTaskViewListener.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleTaskViewListener.java
@@ -129,27 +129,28 @@ public class BubbleTaskViewListener implements TaskView.Listener {
Context context =
mContext.createContextAsUser(
mBubble.getUser(), Context.CONTEXT_RESTRICTED);
- Intent fillInIntent = null;
+ Intent fillInIntent = new Intent();
+ fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
// First try get pending intent from the bubble
PendingIntent pi = mBubble.getPendingIntent();
if (pi == null) {
- // If null - create new one
+ // If null - create new one based on the bubble intent
pi = PendingIntent.getActivity(
context,
/* requestCode= */ 0,
- mBubble.getIntent()
- .addFlags(FLAG_ACTIVITY_MULTIPLE_TASK),
- PendingIntent.FLAG_IMMUTABLE
- | PendingIntent.FLAG_UPDATE_CURRENT,
+ mBubble.getIntent(),
+ // Needs to be mutable for the fillInIntent
+ PendingIntent.FLAG_MUTABLE | 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);
+ if (mBubble.isChat()) {
+ options.setLaunchedFromBubble(true);
+ options.setApplyActivityFlagsForBubbles(true);
+ } else {
+ options.setApplyMultipleTaskFlagForShortcut(true);
+ }
mTaskView.startShortcutActivity(mBubble.getShortcutInfo(),
options, launchBounds);
} else {
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 a676f41baafe..338ffe76e6ea 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
@@ -21,6 +21,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.view.View.INVISIBLE;
import static android.view.WindowManager.TRANSIT_CHANGE;
+import static android.view.WindowManager.TRANSIT_TO_FRONT;
import static com.android.wm.shell.transition.Transitions.TRANSIT_CONVERT_TO_BUBBLE;
@@ -325,7 +326,7 @@ public class BubbleTransitions {
for (int i = 0; i < info.getChanges().size(); ++i) {
final TransitionInfo.Change chg = info.getChanges().get(i);
if (chg.getTaskInfo() == null) continue;
- if (chg.getMode() != TRANSIT_CHANGE) continue;
+ if (chg.getMode() != TRANSIT_CHANGE && chg.getMode() != TRANSIT_TO_FRONT) continue;
if (!mTaskInfo.token.equals(chg.getTaskInfo().token)) continue;
mStartBounds.set(chg.getStartAbsBounds());
// Converting a task into taskview, so treat as "new"
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java
index 87a4115ccd3a..df82091ef002 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java
@@ -227,7 +227,13 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged
/** Hides the IME for Bubbles when the device is locked. */
public void hideImeForBubblesWhenLocked(int displayId) {
PerDisplay pd = mImePerDisplay.get(displayId);
- pd.setImeInputTargetRequestedVisibility(false, pd.getImeSourceControl().getImeStatsToken());
+ InsetsSourceControl imeSourceControl = pd.getImeSourceControl();
+ if (imeSourceControl != null) {
+ ImeTracker.Token imeStatsToken = imeSourceControl.getImeStatsToken();
+ if (imeStatsToken != null) {
+ pd.setImeInputTargetRequestedVisibility(false, imeStatsToken);
+ }
+ }
}
/** An implementation of {@link IDisplayWindowInsetsController} for a given display id. */
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipBoundsAlgorithm.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipBoundsAlgorithm.java
index 8e026f04ac31..04e8d8dee520 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipBoundsAlgorithm.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipBoundsAlgorithm.java
@@ -24,6 +24,7 @@ import android.content.pm.ActivityInfo;
import android.content.res.Resources;
import android.graphics.Rect;
import android.util.DisplayMetrics;
+import android.util.Rational;
import android.util.Size;
import android.view.Gravity;
@@ -41,9 +42,6 @@ public class PipBoundsAlgorithm {
private static final String TAG = PipBoundsAlgorithm.class.getSimpleName();
private static final float INVALID_SNAP_FRACTION = -1f;
- // The same value (with the same name) is used in Launcher.
- private static final float PIP_ASPECT_RATIO_MISMATCH_THRESHOLD = 0.01f;
-
@NonNull private final PipBoundsState mPipBoundsState;
@NonNull protected final PipDisplayLayoutState mPipDisplayLayoutState;
@NonNull protected final SizeSpecSource mSizeSpecSource;
@@ -223,9 +221,8 @@ public class PipBoundsAlgorithm {
+ " than destination(%s)", sourceRectHint, destinationBounds);
return false;
}
- final float reportedRatio = destinationBounds.width() / (float) destinationBounds.height();
- final float inferredRatio = sourceRectHint.width() / (float) sourceRectHint.height();
- if (Math.abs(reportedRatio - inferredRatio) > PIP_ASPECT_RATIO_MISMATCH_THRESHOLD) {
+ if (!PictureInPictureParams.isSameAspectRatio(sourceRectHint,
+ new Rational(destinationBounds.width(), destinationBounds.height()))) {
ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"isSourceRectHintValidForEnterPip=false, hint(%s) does not match"
+ " destination(%s) aspect ratio", sourceRectHint, destinationBounds);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellConcurrencyModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellConcurrencyModule.java
index ee3e39e71558..e9dc6132f5f4 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellConcurrencyModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellConcurrencyModule.java
@@ -162,22 +162,31 @@ public abstract class WMShellConcurrencyModule {
}
}
- /**
- * Provide a Shell animation-thread Executor.
- */
+ /** Provide a Shell animation-thread Handler. */
@WMSingleton
@Provides
@ShellAnimationThread
- public static ShellExecutor provideShellAnimationExecutor() {
- HandlerThread shellAnimationThread = new HandlerThread("wmshell.anim",
- THREAD_PRIORITY_DISPLAY);
- shellAnimationThread.start();
+ public static Handler provideShellAnimationHandler() {
+ HandlerThread animThread = new HandlerThread("wmshell.anim", THREAD_PRIORITY_DISPLAY);
+ animThread.start();
if (Build.IS_DEBUGGABLE) {
- shellAnimationThread.getLooper().setTraceTag(Trace.TRACE_TAG_WINDOW_MANAGER);
- shellAnimationThread.getLooper().setSlowLogThresholdMs(MSGQ_SLOW_DISPATCH_THRESHOLD_MS,
+ animThread.getLooper().setTraceTag(Trace.TRACE_TAG_WINDOW_MANAGER);
+ animThread.getLooper().setSlowLogThresholdMs(MSGQ_SLOW_DISPATCH_THRESHOLD_MS,
MSGQ_SLOW_DELIVERY_THRESHOLD_MS);
}
- return new HandlerExecutor(Handler.createAsync(shellAnimationThread.getLooper()));
+ return Handler.createAsync(animThread.getLooper());
+ }
+
+ /**
+ * Provide a Shell animation-thread Executor.
+ */
+ @WMSingleton
+ @Provides
+ @ShellAnimationThread
+ public static ShellExecutor provideShellAnimationExecutor(
+ @ShellAnimationThread Handler animHandler
+ ) {
+ return new HandlerExecutor(animHandler);
}
/**
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 5a246e7c99b9..5d5e4d3ec758 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
@@ -431,9 +431,10 @@ public abstract class WMShellModule {
Transitions transitions,
DisplayController displayController,
@ShellMainThread ShellExecutor mainExecutor,
- @ShellAnimationThread ShellExecutor animExecutor) {
+ @ShellAnimationThread ShellExecutor animExecutor,
+ @ShellAnimationThread Handler animHandler) {
return new FreeformTaskTransitionHandler(
- transitions, displayController, mainExecutor, animExecutor);
+ transitions, displayController, mainExecutor, animExecutor, animHandler);
}
@WMSingleton
@@ -1101,8 +1102,9 @@ public abstract class WMShellModule {
Context context,
@ShellMainThread ShellExecutor mainExecutor,
@ShellAnimationThread ShellExecutor animExecutor,
- @ShellMainThread Handler handler) {
- return new CloseDesktopTaskTransitionHandler(context, mainExecutor, animExecutor, handler);
+ @ShellAnimationThread Handler animHandler) {
+ return new CloseDesktopTaskTransitionHandler(context, mainExecutor, animExecutor,
+ animHandler);
}
@WMSingleton
@@ -1110,9 +1112,10 @@ public abstract class WMShellModule {
static DesktopMinimizationTransitionHandler provideDesktopMinimizationTransitionHandler(
@ShellMainThread ShellExecutor mainExecutor,
@ShellAnimationThread ShellExecutor animExecutor,
- DisplayController displayController) {
+ DisplayController displayController,
+ @ShellAnimationThread Handler mainHandler) {
return new DesktopMinimizationTransitionHandler(mainExecutor, animExecutor,
- displayController);
+ displayController, mainHandler);
}
@WMSingleton
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/CloseDesktopTaskTransitionHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/CloseDesktopTaskTransitionHandler.kt
index 1ce093e02a4a..b22a46edbf3a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/CloseDesktopTaskTransitionHandler.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/CloseDesktopTaskTransitionHandler.kt
@@ -37,7 +37,6 @@ import com.android.app.animation.Interpolators
import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_CLOSE_TASK
import com.android.internal.jank.InteractionJankMonitor
import com.android.wm.shell.common.ShellExecutor
-import com.android.wm.shell.shared.annotations.ShellMainThread
import com.android.wm.shell.transition.Transitions
import java.util.function.Supplier
@@ -49,7 +48,7 @@ constructor(
private val mainExecutor: ShellExecutor,
private val animExecutor: ShellExecutor,
private val transactionSupplier: Supplier<Transaction> = Supplier { Transaction() },
- @ShellMainThread private val handler: Handler,
+ private val animHandler: Handler,
) : Transitions.TransitionHandler {
private val runningAnimations = mutableMapOf<IBinder, List<Animator>>()
@@ -95,7 +94,7 @@ constructor(
interactionJankMonitor.begin(
lastChangeLeash,
context,
- handler,
+ animHandler,
CUJ_DESKTOP_MODE_CLOSE_TASK,
)
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandler.kt
index 728638d9bbd3..7074e8bc9cce 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandler.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandler.kt
@@ -18,14 +18,17 @@ package com.android.wm.shell.desktopmode
import android.animation.Animator
import android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM
+import android.os.Handler
import android.os.IBinder
-import android.util.DisplayMetrics
import android.view.SurfaceControl.Transaction
import android.window.TransitionInfo
import android.window.TransitionRequestInfo
import android.window.WindowContainerTransaction
+import com.android.internal.jank.InteractionJankMonitor
+import com.android.internal.protolog.ProtoLog
import com.android.wm.shell.common.DisplayController
import com.android.wm.shell.common.ShellExecutor
+import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE
import com.android.wm.shell.shared.TransitionUtil
import com.android.wm.shell.shared.animation.MinimizeAnimator.create
import com.android.wm.shell.transition.Transitions
@@ -41,6 +44,7 @@ class DesktopMinimizationTransitionHandler(
private val mainExecutor: ShellExecutor,
private val animExecutor: ShellExecutor,
private val displayController: DisplayController,
+ private val animHandler: Handler,
) : Transitions.TransitionHandler {
/** Shouldn't handle anything */
@@ -90,10 +94,30 @@ class DesktopMinimizationTransitionHandler(
val t = Transaction()
val sc = change.leash
finishTransaction.hide(sc)
- val displayMetrics: DisplayMetrics? =
- change.taskInfo?.let {
- displayController.getDisplayContext(it.displayId)?.getResources()?.displayMetrics
- }
- return displayMetrics?.let { create(it, change, t, onAnimFinish) }
+ val displayContext =
+ change.taskInfo?.let { displayController.getDisplayContext(it.displayId) }
+ if (displayContext == null) {
+ logW(
+ "displayContext is null for taskId=${change.taskInfo?.taskId}, " +
+ "displayId=${change.taskInfo?.displayId}"
+ )
+ return null
+ }
+ return create(
+ displayContext,
+ change,
+ t,
+ onAnimFinish,
+ InteractionJankMonitor.getInstance(),
+ animHandler,
+ )
+ }
+
+ private companion object {
+ private fun logW(msg: String, vararg arguments: Any?) {
+ ProtoLog.w(WM_SHELL_DESKTOP_MODE, "%s: $msg", TAG, *arguments)
+ }
+
+ const val TAG = "DesktopMinimizationTransitionHandler"
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt
index 7c6cf4a8b37f..926e0f287869 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopRepository.kt
@@ -217,6 +217,9 @@ class DesktopRepository(
fun getDeskIds(displayId: Int): Set<Int> =
desktopData.desksSequence(displayId).map { desk -> desk.deskId }.toSet()
+ /** Returns all the ids of all desks in all displays. */
+ fun getAllDeskIds(): Set<Int> = desktopData.desksSequence().map { desk -> desk.deskId }.toSet()
+
/** Returns the id of the default desk in the given display. */
fun getDefaultDeskId(displayId: Int): Int? = getDefaultDesk(displayId)?.deskId
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 45adfe4112a6..87d967427d88 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
@@ -1079,7 +1079,8 @@ class DesktopTasksController(
)
}
- private fun startLaunchTransition(
+ @VisibleForTesting
+ fun startLaunchTransition(
transitionType: Int,
wct: WindowContainerTransaction,
launchingTaskId: Int?,
@@ -1087,34 +1088,52 @@ class DesktopTasksController(
displayId: Int = DEFAULT_DISPLAY,
unminimizeReason: UnminimizeReason = UnminimizeReason.UNKNOWN,
): IBinder {
+ // TODO: b/397619806 - Consolidate sharable logic with [handleFreeformTaskLaunch].
+ var launchTransaction = wct
val taskIdToMinimize =
addAndGetMinimizeChanges(
displayId,
- wct,
+ launchTransaction,
newTaskId = launchingTaskId,
launchingNewIntent = launchingTaskId == null,
)
val exitImmersiveResult =
desktopImmersiveController.exitImmersiveIfApplicable(
- wct = wct,
+ wct = launchTransaction,
displayId = displayId,
excludeTaskId = launchingTaskId,
reason = DesktopImmersiveController.ExitReason.TASK_LAUNCH,
)
+ var deskIdToActivate: Int? = null
+ if (
+ DesktopExperienceFlags.ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING.isTrue &&
+ !isDesktopModeShowing(displayId)
+ ) {
+ deskIdToActivate =
+ checkNotNull(
+ launchingTaskId?.let { taskRepository.getDeskIdForTask(it) }
+ ?: getDefaultDeskId(displayId)
+ )
+ val activateDeskWct = WindowContainerTransaction()
+ addDeskActivationChanges(deskIdToActivate, activateDeskWct)
+ // Desk activation must be handled before app launch-related transactions.
+ activateDeskWct.merge(launchTransaction, /* transfer= */ true)
+ launchTransaction = activateDeskWct
+ }
val t =
if (remoteTransition == null) {
desktopMixedTransitionHandler.startLaunchTransition(
transitionType = transitionType,
- wct = wct,
+ wct = launchTransaction,
taskId = launchingTaskId,
minimizingTaskId = taskIdToMinimize,
exitingImmersiveTask = exitImmersiveResult.asExit()?.exitingTask,
)
} else if (taskIdToMinimize == null) {
val remoteTransitionHandler = OneShotRemoteHandler(mainExecutor, remoteTransition)
- transitions.startTransition(transitionType, wct, remoteTransitionHandler).also {
- remoteTransitionHandler.setTransition(it)
- }
+ transitions
+ .startTransition(transitionType, launchTransaction, remoteTransitionHandler)
+ .also { remoteTransitionHandler.setTransition(it) }
} else {
val remoteTransitionHandler =
DesktopWindowLimitRemoteHandler(
@@ -1123,9 +1142,9 @@ class DesktopTasksController(
remoteTransition,
taskIdToMinimize,
)
- transitions.startTransition(transitionType, wct, remoteTransitionHandler).also {
- remoteTransitionHandler.setTransition(it)
- }
+ transitions
+ .startTransition(transitionType, launchTransaction, remoteTransitionHandler)
+ .also { remoteTransitionHandler.setTransition(it) }
}
if (taskIdToMinimize != null) {
addPendingMinimizeTransition(t, taskIdToMinimize, MinimizeReason.TASK_LIMIT)
@@ -1133,6 +1152,24 @@ class DesktopTasksController(
if (launchingTaskId != null && taskRepository.isMinimizedTask(launchingTaskId)) {
addPendingUnminimizeTransition(t, displayId, launchingTaskId, unminimizeReason)
}
+ if (
+ DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue &&
+ deskIdToActivate != null
+ ) {
+ if (DesktopExperienceFlags.ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING.isTrue) {
+ desksTransitionObserver.addPendingTransition(
+ DeskTransition.ActivateDesk(
+ token = t,
+ displayId = displayId,
+ deskId = deskIdToActivate,
+ )
+ )
+ }
+
+ desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted(
+ FREEFORM_ANIMATION_DURATION
+ )
+ }
exitImmersiveResult.asExit()?.runOnTransitionStart?.invoke(t)
return t
}
@@ -1708,6 +1745,9 @@ class DesktopTasksController(
launchWindowingMode = WINDOWING_MODE_FULLSCREEN
pendingIntentBackgroundActivityStartMode =
ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOW_ALWAYS
+ if (Flags.enablePerDisplayDesktopWallpaperActivity()) {
+ launchDisplayId = displayId
+ }
}
val pendingIntent =
PendingIntent.getActivityAsUser(
@@ -2704,10 +2744,9 @@ class DesktopTasksController(
activateDesk(deskId, remoteTransition)
}
- /** Activates the given desk. */
- fun activateDesk(deskId: Int, remoteTransition: RemoteTransition? = null) {
+ /** Activates the given desk but without starting a transition. */
+ fun addDeskActivationChanges(deskId: Int, wct: WindowContainerTransaction) {
val displayId = taskRepository.getDisplayForDesk(deskId)
- val wct = WindowContainerTransaction()
if (DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) {
prepareForDeskActivation(displayId, wct)
desksOrganizer.activateDesk(wct, deskId)
@@ -2720,6 +2759,13 @@ class DesktopTasksController(
} else {
bringDesktopAppsToFront(displayId, wct)
}
+ }
+
+ /** Activates the given desk. */
+ fun activateDesk(deskId: Int, remoteTransition: RemoteTransition? = null) {
+ val displayId = taskRepository.getDisplayForDesk(deskId)
+ val wct = WindowContainerTransaction()
+ addDeskActivationChanges(deskId, wct)
val transitionType = transitionType(remoteTransition)
val handler =
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt
index 81b136dd1569..f9ab359e952d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt
@@ -26,7 +26,6 @@ import android.window.DesktopModeFlags
import android.window.TransitionInfo
import android.window.WindowContainerTransaction
import androidx.annotation.VisibleForTesting
-import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_MINIMIZE_WINDOW
import com.android.internal.jank.InteractionJankMonitor
import com.android.internal.protolog.ProtoLog
import com.android.wm.shell.ShellTaskOrganizer
@@ -176,28 +175,13 @@ class DesktopTasksLimiter(
return taskChange.mode == TRANSIT_TO_BACK
}
- override fun onTransitionStarting(transition: IBinder) {
- val mActiveTaskDetails = activeTransitionTokensAndTasks[transition]
- val info = mActiveTaskDetails?.transitionInfo ?: return
- val minimizeChange = getMinimizeChange(info, mActiveTaskDetails.taskId) ?: return
- // Begin minimize window CUJ instrumentation.
- interactionJankMonitor.begin(
- minimizeChange.leash,
- context,
- handler,
- CUJ_DESKTOP_MODE_MINIMIZE_WINDOW,
- )
- }
-
private fun getMinimizeChange(info: TransitionInfo, taskId: Int): TransitionInfo.Change? =
info.changes.find { change ->
change.taskInfo?.taskId == taskId && change.mode == TRANSIT_TO_BACK
}
override fun onTransitionMerged(merged: IBinder, playing: IBinder) {
- if (activeTransitionTokensAndTasks.remove(merged) != null) {
- interactionJankMonitor.end(CUJ_DESKTOP_MODE_MINIMIZE_WINDOW)
- }
+ activeTransitionTokensAndTasks.remove(merged)
pendingTransitionTokensAndTasks.remove(merged)?.let { taskToTransfer ->
pendingTransitionTokensAndTasks[playing] = taskToTransfer
}
@@ -209,13 +193,6 @@ class DesktopTasksLimiter(
}
override fun onTransitionFinished(transition: IBinder, aborted: Boolean) {
- if (activeTransitionTokensAndTasks.remove(transition) != null) {
- if (aborted) {
- interactionJankMonitor.cancel(CUJ_DESKTOP_MODE_MINIMIZE_WINDOW)
- } else {
- interactionJankMonitor.end(CUJ_DESKTOP_MODE_MINIMIZE_WINDOW)
- }
- }
pendingTransitionTokensAndTasks.remove(transition)
activeUnminimizeTransitionTokensAndTasks.remove(transition)
pendingUnminimizeTransitionTokensAndTasks.remove(transition)
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/README.md b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/README.md
index 3fad28ad232f..a98ae5566394 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/README.md
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/README.md
@@ -9,6 +9,7 @@ particular order):
4) [Threading model in the Shell](threading.md)
5) [Making changes in the Shell](changes.md)
6) [Extending the Shell for Products/OEMs](extending.md)
+6) [Shell transitions](transitions.md)
7) [Debugging in the Shell](debugging.md)
8) [Testing in the Shell](testing.md)
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/docs/transitions.md b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/transitions.md
new file mode 100644
index 000000000000..dc23bb0c77d7
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/docs/transitions.md
@@ -0,0 +1,118 @@
+# Shell transitions
+[Back to home](README.md)
+
+---
+
+## General
+
+General guides for using Shell Transitions can be found here:
+- [Shell transitions animation guide](http://go/shell-transit-anim)
+- [Hitchhiker's guide to transitions](http://go/transitions-book)
+
+## Transient-launch transitions
+<span style="color:orange">Use with care!</span>
+
+Transient-launch transitions are a way to handle non-atomic (ie. gestural) transitions by allowing
+WM Core to put participating activities into a transiently visible or hidden state for the duration
+of the animation and adding the ability to cancel the transition.
+
+For example, if you are launching an activity normally, WM Core will be updated
+at the start of the animation which includes pausing the previous activity and resuming the next
+activity (and subsequently the transition will reconcile that state via an animation).
+
+If you are transiently launching an activity though, WM Core will ensure that both the leaving
+activity and the incoming activity will be RESUMED for the duration of the transition duration. In
+addition, WM Core will track the position of the transient-launch activity in the window hierarchy
+prior to the launch, and allow Shell to restore it to that position if the transitions needs to be
+canceled.
+
+Starting a transient-launch transition can be done via the activity options (since the activity may
+not have been started yet):
+```kotlin
+val opts = ActivityOptions.makeBasic().setTransientLaunch()
+val wct = WindowContainerTransaction()
+wct.sendPendingIntent(pendingIntent, new Intent(), opts.toBundle())
+transitions.startTransition(TRANSIT_OPEN, wct, ...)
+```
+
+And restoring the transient order via a WCT:
+```kotlin
+val wct = WindowContainerTransaction()
+wct.restoreTransientOrder(transientLaunchContainerToken)
+transitions.startTransition(TRANSIT_RESTORE, wct, ...)
+```
+
+### <span style="color:orange">Considerations</span>
+
+Usage of transient-launch transitions should be done with consideration, there are a few gotchas
+that might result in subtle and hard-to-reproduce issues.
+
+#### Understanding the flow
+When starting a transient-launch transition, there are several possible outcomes:
+1) The transition finishes as normal: The user is committing the transition to the state requested
+ at the start of the transition. In such cases, you can simply finish the transition and the
+ states of the transiently shown/hidden activities will be updated to match the original state
+ that a non-transient transition would have (ie. closing activities will be stopped).
+
+2) The transition is interrupted: A change in the system results in the window hierarchy changing
+ in a way which may or may not affect the transient-launch activity. eg. We transiently-launch
+ home from app A, but then app B launches. In this case, WM attempts to create a new transition
+ reflecting the window hierarchy changes (ie. if B occludes Home in the above example, then the
+ transition will have Home TO_BACK, and B TO_FRONT).
+
+ At this point, the transition handler can choose to merge the incoming transition or not (to
+ queue it after this current transition). Take note of the next section for concerns re. bookend
+ transitions.
+
+3) The transition is canceled: The user is canceling the transition to the previous state. In such
+ cases, you need to store the `WindowContainerToken` for the task associated with the
+ transient-launch activity, and restore the transient order via the `WindowContainerTransaction`
+ API above. In some cases, if anything has been reordered since (ie. due to other merged
+ transitions), then you may also want to use `WindowContainerTransaction#reorder()` to place all
+ the relevant containers to their original order (provided via the change-order in the initial
+ launch transition).
+
+#### Finishing the transient-launch transition
+
+When restoring the transient order in the 3rd flow above, it is recommended to do it in a new
+transition and <span style="color:orange">**not**</span> via the WindowContainerTransaction in
+`TransitionFinishCallback#onTransitionFinished()` provided when starting the transition.
+
+Changes to the window hierarchy via the finish transaction are not applied in sync with other
+transitions that are collecting and aplying, and are also not observable in Shell in any way.
+Starting a new transition instead ensures both. (The finish transaction can still be used if there
+are non-transition affecting properties (ie. container properties) that need to be updated as a part
+of finishing the transient-launch transition).
+
+So the general idea is when restoring is:
+
+1) Start transient-launch transition START_T
+2) ...
+3) All done, start bookend transition END_T
+4) Handler receives END_T, merges it and then finishes START_T
+
+In practice it's not quite that simple, due to the ordering of transitions and extra care must be
+taken when using a new transition to prevent deadlocking when merging transitions.
+
+When a new transition arrives while a transient-launch transition is playing, the handler can
+choose to handle/merge the transition into the ongoing one, or skip merging to queue it up to be
+played after. In the above flow, we can see how this might result in a deadlock:
+
+Queueing END during merge:
+1) Start transient-launch transition START_T
+2) ...
+3) Incoming transition OTHER_T, choose to cancel START_T -> start bookend transition END_T, but don't merge OTHER_T
+3) Waiting for END_T... <span style="color:red">Deadlock!</span>
+
+Interrupt while pending END:
+1) Start transient-launch transition START_T
+2) ...
+3) All done, start bookend transition END_T
+3) Incoming transition OTHER_T occurs before END_T, but don't merge OTHER_T
+3) Waiting for END_T... <span style="color:red">Deadlock!</span>
+
+This means that when using transient-launch transitions with a bookend transition
+<span style="color:orange">requires</span> you to handle any incoming transitions if the bookend is
+ever queued (or already posted) after it. You can do so by preempting the bookend transition
+(finishing the transient-launch transition), or handling the merge of the new transition (so it
+doesn't queue). \ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java
index b60fb5e7bfdd..16e411e1fc07 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionHandler.java
@@ -25,10 +25,12 @@ import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.app.ActivityManager;
import android.app.WindowConfiguration;
+import android.content.Context;
import android.graphics.Rect;
+import android.os.Handler;
import android.os.IBinder;
import android.util.ArrayMap;
-import android.util.DisplayMetrics;
+import android.util.Log;
import android.view.SurfaceControl;
import android.view.WindowManager;
import android.window.TransitionInfo;
@@ -38,6 +40,7 @@ import android.window.WindowContainerTransaction;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import com.android.internal.jank.InteractionJankMonitor;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.shared.animation.MinimizeAnimator;
@@ -52,11 +55,13 @@ import java.util.List;
*/
public class FreeformTaskTransitionHandler
implements Transitions.TransitionHandler, FreeformTaskTransitionStarter {
+ private static final String TAG = "FreeformTaskTransitionHandler";
private static final int CLOSE_ANIM_DURATION = 400;
private final Transitions mTransitions;
private final DisplayController mDisplayController;
private final ShellExecutor mMainExecutor;
private final ShellExecutor mAnimExecutor;
+ private final Handler mAnimHandler;
private final List<IBinder> mPendingTransitionTokens = new ArrayList<>();
@@ -66,11 +71,13 @@ public class FreeformTaskTransitionHandler
Transitions transitions,
DisplayController displayController,
ShellExecutor mainExecutor,
- ShellExecutor animExecutor) {
+ ShellExecutor animExecutor,
+ Handler animHandler) {
mTransitions = transitions;
mDisplayController = displayController;
mMainExecutor = mainExecutor;
mAnimExecutor = animExecutor;
+ mAnimHandler = animHandler;
}
@Override
@@ -123,13 +130,11 @@ public class FreeformTaskTransitionHandler
@NonNull Transitions.TransitionFinishCallback finishCallback) {
boolean transitionHandled = false;
final ArrayList<Animator> animations = new ArrayList<>();
- final Runnable onAnimFinish = () -> {
+ final Runnable onAnimFinish = () -> mMainExecutor.execute(() -> {
if (!animations.isEmpty()) return;
- mMainExecutor.execute(() -> {
- mAnimations.remove(transition);
- finishCallback.onTransitionFinished(null /* wct */);
- });
- };
+ mAnimations.remove(transition);
+ finishCallback.onTransitionFinished(null /* wct */);
+ });
for (TransitionInfo.Change change : info.getChanges()) {
if ((change.getFlags() & TransitionInfo.FLAG_IS_WALLPAPER) != 0) {
continue;
@@ -234,18 +239,25 @@ public class FreeformTaskTransitionHandler
SurfaceControl.Transaction t = new SurfaceControl.Transaction();
SurfaceControl sc = change.getLeash();
finishT.hide(sc);
- final DisplayMetrics displayMetrics =
- mDisplayController
- .getDisplayContext(taskInfo.displayId).getResources().getDisplayMetrics();
+ final Context displayContext =
+ mDisplayController.getDisplayContext(taskInfo.displayId);
+ if (displayContext == null) {
+ Log.w(TAG, "No displayContext for displayId=" + taskInfo.displayId);
+ return false;
+ }
final Animator animator = MinimizeAnimator.create(
- displayMetrics,
+ displayContext,
change,
t,
(anim) -> {
- animations.remove(anim);
- onAnimFinish.run();
+ mMainExecutor.execute(() -> {
+ animations.remove(anim);
+ onAnimFinish.run();
+ });
return null;
- });
+ },
+ InteractionJankMonitor.getInstance(),
+ mAnimHandler);
animations.add(animator);
return true;
}
@@ -277,8 +289,10 @@ public class FreeformTaskTransitionHandler
new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
- animations.remove(animator);
- onAnimFinish.run();
+ mMainExecutor.execute(() -> {
+ animations.remove(animator);
+ onAnimFinish.run();
+ });
}
});
animations.add(animator);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/PipSurfaceTransactionHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/PipSurfaceTransactionHelper.java
index c4d065f158a4..e0cae81920ad 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/PipSurfaceTransactionHelper.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/PipSurfaceTransactionHelper.java
@@ -134,6 +134,18 @@ public class PipSurfaceTransactionHelper {
}
/**
+ * Operates the round corner radius on a given transaction and leash, scaled by bounds
+ * @return same {@link PipSurfaceTransactionHelper} instance for method chaining
+ */
+ public PipSurfaceTransactionHelper round(SurfaceControl.Transaction tx, SurfaceControl leash,
+ Rect fromBounds, Rect toBounds) {
+ final float scale = (float) (Math.hypot(fromBounds.width(), fromBounds.height())
+ / Math.hypot(toBounds.width(), toBounds.height()));
+ tx.setCornerRadius(leash, mCornerRadius * scale);
+ return this;
+ }
+
+ /**
* Operates the shadow radius on a given transaction and leash
* @return same {@link PipSurfaceTransactionHelper} instance for method chaining
*/
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/animation/PipResizeAnimator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/animation/PipResizeAnimator.java
index 06e8349259b4..eb5fe88648b3 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/animation/PipResizeAnimator.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/animation/PipResizeAnimator.java
@@ -173,7 +173,7 @@ public class PipResizeAnimator extends ValueAnimator {
transformTensor.postRotate(degrees, targetBounds.centerX(), targetBounds.centerY());
tx.setMatrix(leash, transformTensor, mMatrixTmp)
- .setCornerRadius(leash, cornerRadius)
+ .setCornerRadius(leash, cornerRadius / scaleX)
.setShadowRadius(leash, shadowRadius);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipController.java
index 99c9302edb75..1ce24f76ada5 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipController.java
@@ -404,6 +404,10 @@ public class PipController implements ConfigurationChangeListener,
mPipBoundsState.setBoundsStateForEntry(componentName, activityInfo, pictureInPictureParams,
mPipBoundsAlgorithm);
+
+ // Update the size spec in case aspect ratio is invariant, but display has changed
+ // since the last PiP session, or this is the first PiP session altogether.
+ mPipBoundsState.updateMinMaxSize(mPipBoundsState.getAspectRatio());
return mPipBoundsAlgorithm.getEntryDestinationBounds();
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java
index df7a25af8376..7805ec34e105 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java
@@ -55,6 +55,7 @@ public class PipScheduler {
private PipTransitionController mPipTransitionController;
private PipSurfaceTransactionHelper.SurfaceControlTransactionFactory
mSurfaceControlTransactionFactory;
+ private final PipSurfaceTransactionHelper mPipSurfaceTransactionHelper;
@Nullable private Runnable mUpdateMovementBoundsRunnable;
@@ -75,6 +76,7 @@ public class PipScheduler {
mSurfaceControlTransactionFactory =
new PipSurfaceTransactionHelper.VsyncSurfaceControlTransactionFactory();
+ mPipSurfaceTransactionHelper = new PipSurfaceTransactionHelper(mContext);
mPipAlphaAnimatorSupplier = PipAlphaAnimator::new;
}
@@ -214,6 +216,8 @@ public class PipScheduler {
transformTensor.postTranslate(toBounds.left, toBounds.top);
transformTensor.postRotate(degrees, toBounds.centerX(), toBounds.centerY());
+ mPipSurfaceTransactionHelper.round(tx, leash, mPipBoundsState.getBounds(), toBounds);
+
tx.setMatrix(leash, transformTensor, mMatrixTmp);
tx.apply();
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java
index 035c93db7ee4..0cfab11dbc64 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java
@@ -50,6 +50,7 @@ import android.graphics.PointF;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.IBinder;
+import android.os.SystemProperties;
import android.view.SurfaceControl;
import android.view.WindowManager;
import android.window.TransitionInfo;
@@ -105,7 +106,10 @@ public class PipTransition extends PipTransitionController implements
* The fixed start delay in ms when fading out the content overlay from bounds animation.
* The fadeout animation is guaranteed to start after the client has drawn under the new config.
*/
- private static final int CONTENT_OVERLAY_FADE_OUT_DELAY_MS = 500;
+ private static final int EXTRA_CONTENT_OVERLAY_FADE_OUT_DELAY_MS =
+ SystemProperties.getInt(
+ "persist.wm.debug.extra_content_overlay_fade_out_delay_ms", 400);
+ private static final int CONTENT_OVERLAY_FADE_OUT_DURATION_MS = 500;
//
// Dependencies
@@ -551,7 +555,8 @@ public class PipTransition extends PipTransitionController implements
@NonNull Runnable onAnimationEnd) {
PipAlphaAnimator animator = new PipAlphaAnimator(mContext, overlayLeash,
null /* startTx */, null /* finishTx */, PipAlphaAnimator.FADE_OUT);
- animator.setDuration(CONTENT_OVERLAY_FADE_OUT_DELAY_MS);
+ animator.setDuration(CONTENT_OVERLAY_FADE_OUT_DURATION_MS);
+ animator.setStartDelay(EXTRA_CONTENT_OVERLAY_FADE_OUT_DELAY_MS);
animator.setAnimationEndCallback(onAnimationEnd);
animator.start();
}
@@ -738,6 +743,13 @@ public class PipTransition extends PipTransitionController implements
}
}
+ if (!mPipTransitionState.isInSwipePipToHomeTransition()) {
+ // Update the size spec in case aspect ratio is invariant, but display has changed
+ // since the last PiP session, or this is the first PiP session altogether.
+ // Skip the update if in swipe PiP to home, as this has already been done.
+ mPipBoundsState.updateMinMaxSize(mPipBoundsState.getAspectRatio());
+ }
+
// calculate the entry bounds and notify core to move task to pinned with final bounds
final Rect entryBounds = mPipBoundsAlgorithm.getEntryDestinationBounds();
mPipBoundsState.setBounds(entryBounds);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java
index 2fa09664b73f..bb5b5cec1b4a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java
@@ -44,6 +44,7 @@ import android.os.Bundle;
import android.os.RemoteException;
import android.util.Slog;
import android.util.SparseIntArray;
+import android.window.DesktopExperienceFlags;
import android.window.DesktopModeFlags;
import android.window.WindowContainerToken;
@@ -92,6 +93,11 @@ public class RecentTasksController implements TaskStackListenerCallback,
TaskStackTransitionObserver.TaskStackTransitionObserverListener, UserChangeListener {
private static final String TAG = RecentTasksController.class.getSimpleName();
+ // When the multiple desktops feature is disabled, all freeform tasks are lumped together into
+ // a single `GroupedTaskInfo` whose type is `TYPE_DESK`, and its `mDeskId` doesn't matter, so
+ // we pick the below arbitrary value.
+ private static final int INVALID_DESK_ID = -1;
+
private final Context mContext;
private final ShellController mShellController;
private final ShellCommandHandler mShellCommandHandler;
@@ -128,6 +134,7 @@ public class RecentTasksController implements TaskStackListenerCallback,
// Temporary vars used in `generateList()`
private final Map<Integer, TaskInfo> mTmpRemaining = new HashMap<>();
+ private final Map<Integer, Desk> mTmpDesks = new HashMap<>();
/**
* Creates {@link RecentTasksController}, returns {@code null} if the feature is not
@@ -529,6 +536,78 @@ public class RecentTasksController implements TaskStackListenerCallback,
}
/**
+ * Represents a desk whose ID is `mDeskId` and contains the tasks in `mDeskTasks`. Some of these
+ * tasks are minimized and their IDs are contained in the `mMinimizedDeskTasks` set.
+ */
+ private static class Desk {
+ final int mDeskId;
+ boolean mHasVisibleTasks = false;
+ final ArrayList<TaskInfo> mDeskTasks = new ArrayList<>();
+ final Set<Integer> mMinimizedDeskTasks = new HashSet<>();
+
+ Desk(int deskId) {
+ mDeskId = deskId;
+ }
+
+ void addTask(TaskInfo taskInfo, boolean isMinimized, boolean isVisible) {
+ mDeskTasks.add(taskInfo);
+ if (isMinimized) {
+ mMinimizedDeskTasks.add(taskInfo.taskId);
+ }
+ mHasVisibleTasks |= isVisible;
+ }
+
+ boolean hasTasks() {
+ return !mDeskTasks.isEmpty();
+ }
+
+ GroupedTaskInfo createDeskTaskInfo() {
+ return GroupedTaskInfo.forDeskTasks(mDeskId, mDeskTasks, mMinimizedDeskTasks);
+ }
+ }
+
+ /**
+ * Clears the `mTmpDesks` map, and re-initializes it with the current state of desks from all
+ * displays, without adding any desk tasks. This is a preparation step so that tasks can be
+ * added to these desks in `generateList()`.
+ *
+ * This is needed since with the `ENABLE_MULTIPLE_DESKTOPS_BACKEND` flag, we want to include
+ * desk even if they're empty (i.e. have no tasks).
+ *
+ * @param multipleDesktopsEnabled whether the multiple desktops backend feature is enabled.
+ */
+ private void initializeDesksMap(boolean multipleDesktopsEnabled) {
+ mTmpDesks.clear();
+
+ if (DesktopModeStatus.canEnterDesktopMode(mContext)
+ && mDesktopUserRepositories.isPresent()) {
+ if (multipleDesktopsEnabled) {
+ for (var deskId : mDesktopUserRepositories.get().getCurrent().getAllDeskIds()) {
+ getOrCreateDesk(deskId);
+ }
+ } else {
+ // When the multiple desks feature is disabled, we lump all freeform windows in a
+ // single `GroupedTaskInfo` regardless of their display. The `deskId` in this case
+ // doesn't matter and can be any arbitrary value.
+ getOrCreateDesk(/* deskId = */ INVALID_DESK_ID);
+ }
+ }
+ }
+
+ /**
+ * Returns the `Desk` whose ID is `deskId` from the `mTmpDesks` map if it exists, or it creates
+ * one and adds it to the map and then returns it.
+ */
+ private Desk getOrCreateDesk(int deskId) {
+ var desk = mTmpDesks.get(deskId);
+ if (desk == null) {
+ desk = new Desk(deskId);
+ mTmpDesks.put(deskId, desk);
+ }
+ return desk;
+ }
+
+ /**
* Generates a list of GroupedTaskInfos for the given raw list of tasks (either recents or
* running tasks).
*
@@ -555,6 +634,14 @@ public class RecentTasksController implements TaskStackListenerCallback,
ProtoLog.v(WM_SHELL_TASK_OBSERVER, "RecentTasksController.generateList(%s)", reason);
}
+ final boolean multipleDesktopsEnabled =
+ DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue();
+ initializeDesksMap(multipleDesktopsEnabled);
+
+ // When the multiple desktops feature is enabled, we include all desks even if they're
+ // empty.
+ final boolean shouldIncludeEmptyDesktops = multipleDesktopsEnabled;
+
// Make a mapping of task id -> task info for the remaining tasks to be processed, this
// mapping is used to keep track of split tasks that may exist later in the task list that
// should be ignored because they've already been grouped
@@ -566,11 +653,7 @@ public class RecentTasksController implements TaskStackListenerCallback,
ArrayList<GroupedTaskInfo> groupedTasks = new ArrayList<>(tasks.size());
ArrayList<GroupedTaskInfo> visibleGroupedTasks = new ArrayList<>();
- // Phase 1: Extract the desktop and visible fullscreen/split tasks. We make new collections
- // here as the GroupedTaskInfo can store them without copying
- ArrayList<TaskInfo> desktopTasks = new ArrayList<>();
- Set<Integer> minimizedDesktopTasks = new HashSet<>();
- boolean desktopTasksVisible = false;
+ // Phase 1: Extract the desktops and visible fullscreen/split tasks.
for (int i = 0; i < tasks.size(); i++) {
final TaskInfo taskInfo = tasks.get(i);
final int taskId = taskInfo.taskId;
@@ -600,11 +683,15 @@ public class RecentTasksController implements TaskStackListenerCallback,
taskInfo.positionInParent = new Point(taskInfo.lastNonFullscreenBounds.left,
taskInfo.lastNonFullscreenBounds.top);
}
- desktopTasks.add(taskInfo);
- if (mDesktopUserRepositories.get().getCurrent().isMinimizedTask(taskId)) {
- minimizedDesktopTasks.add(taskId);
- }
- desktopTasksVisible |= mVisibleTasksMap.containsKey(taskId);
+ // Lump all freeform tasks together as if they were all in a single desk whose ID is
+ // `INVALID_DESK_ID` when the multiple desktops feature is disabled.
+ final int deskId = multipleDesktopsEnabled
+ ? mDesktopUserRepositories.get().getCurrent().getDeskIdForTask(taskId)
+ : INVALID_DESK_ID;
+ final Desk desk = getOrCreateDesk(deskId);
+ desk.addTask(taskInfo,
+ mDesktopUserRepositories.get().getCurrent().isMinimizedTask(taskId),
+ mVisibleTasksMap.containsKey(taskId));
mTmpRemaining.remove(taskId);
continue;
}
@@ -636,9 +723,10 @@ public class RecentTasksController implements TaskStackListenerCallback,
if (enableShellTopTaskTracking()) {
// Phase 2: If there were desktop tasks and they are visible, add them to the visible
// list as well (the actual order doesn't matter for Overview)
- if (!desktopTasks.isEmpty() && desktopTasksVisible) {
- visibleGroupedTasks.add(
- GroupedTaskInfo.forFreeformTasks(desktopTasks, minimizedDesktopTasks));
+ for (var desk : mTmpDesks.values()) {
+ if (desk.mHasVisibleTasks) {
+ visibleGroupedTasks.add(desk.createDeskTaskInfo());
+ }
}
if (!visibleGroupedTasks.isEmpty()) {
@@ -674,16 +762,18 @@ public class RecentTasksController implements TaskStackListenerCallback,
// Phase 5: If there were desktop tasks and they are not visible (ie. weren't added
// above), add them to the end of the final list (the actual order doesn't
// matter for Overview)
- if (!desktopTasks.isEmpty() && !desktopTasksVisible) {
- groupedTasks.add(
- GroupedTaskInfo.forFreeformTasks(desktopTasks, minimizedDesktopTasks));
+ for (var desk : mTmpDesks.values()) {
+ if (!desk.mHasVisibleTasks && (desk.hasTasks() || shouldIncludeEmptyDesktops)) {
+ groupedTasks.add(desk.createDeskTaskInfo());
+ }
}
dumpGroupedTasks(groupedTasks, "Phase 5");
} else {
// Add the desktop tasks at the end of the list
- if (!desktopTasks.isEmpty()) {
- groupedTasks.add(
- GroupedTaskInfo.forFreeformTasks(desktopTasks, minimizedDesktopTasks));
+ for (var desk : mTmpDesks.values()) {
+ if (desk.hasTasks() || shouldIncludeEmptyDesktops) {
+ groupedTasks.add(desk.createDeskTaskInfo());
+ }
}
}
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 d6182e9a78dd..3e03e001c49b 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
@@ -47,6 +47,7 @@ import android.app.ActivityManager;
import android.app.ActivityTaskManager;
import android.app.IApplicationThread;
import android.app.PendingIntent;
+import android.app.WindowConfiguration;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
@@ -320,7 +321,7 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
"RecentsTransitionHandler.mergeAnimation: no controller found");
return;
}
- controller.merge(info, startT, finishT, mergeTarget, finishCallback);
+ controller.merge(info, startT, finishT, finishCallback);
}
@Override
@@ -408,7 +409,8 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
// next called.
private Pair<int[], TaskSnapshot[]> mPendingPauseSnapshotsForCancel;
- // Used to track a pending finish transition
+ // Used to track a pending finish transition, this is only non-null if
+ // enableRecentsBookendTransition() is enabled
private IBinder mPendingFinishTransition;
private IResultReceiver mPendingRunnerFinishCb;
@@ -917,7 +919,7 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
*/
@SuppressLint("NewApi")
void merge(TransitionInfo info, SurfaceControl.Transaction startT,
- SurfaceControl.Transaction finishT, IBinder mergeTarget,
+ SurfaceControl.Transaction finishT,
Transitions.TransitionFinishCallback finishCallback) {
if (mFinishCB == null) {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
@@ -927,16 +929,25 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
return;
}
- if (Flags.enableRecentsBookendTransition()
- && info.getType() == TRANSIT_END_RECENTS_TRANSITION
- && mergeTarget == mTransition) {
- // This is a pending finish, so merge the end transition to trigger completing the
- // cleanup of the recents transition
- ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
- "[%d] RecentsController.merge: TRANSIT_END_RECENTS_TRANSITION",
- mInstanceId);
- finishCallback.onTransitionFinished(null /* wct */);
- return;
+ if (Flags.enableRecentsBookendTransition()) {
+ if (info.getType() == TRANSIT_END_RECENTS_TRANSITION) {
+ // This is a pending finish, so merge the end transition to trigger completing
+ // the cleanup of the recents transition
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.merge: TRANSIT_END_RECENTS_TRANSITION",
+ mInstanceId);
+ consumeMerge(info, startT, finishT, finishCallback);
+ return;
+ } else if (mPendingFinishTransition != null) {
+ // This transition is interrupting a pending finish that was already sent, so
+ // pre-empt the pending finish transition since the state has already changed
+ // in the core
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.merge: Awaiting TRANSIT_END_RECENTS_TRANSITION",
+ mInstanceId);
+ onFinishInner(null /* wct */);
+ return;
+ }
}
if (info.getType() == TRANSIT_SLEEP) {
@@ -1210,16 +1221,12 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
}
return;
}
+
// At this point, we are accepting the merge.
- startT.apply();
- // 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;
+ consumeMerge(info, startT, finishT, finishCallback);
+
+ // Notify Launcher of the new opening tasks if necessary
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,
@@ -1229,6 +1236,27 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
Slog.e(TAG, "Error sending appeared tasks to recents animation", e);
}
}
+ }
+
+ /**
+ * Consumes the merge of the other given transition.
+ */
+ private void consumeMerge(TransitionInfo info, SurfaceControl.Transaction startT,
+ SurfaceControl.Transaction finishT,
+ Transitions.TransitionFinishCallback finishCallback) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.merge: consuming merge",
+ mInstanceId);
+
+ startT.apply();
+ // 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;
+ boolean passTransitionInfo = ENABLE_DESKTOP_RECENTS_TRANSITIONS_CORNERS_BUGFIX.isTrue();
+ if (!passTransitionInfo) {
+ // not using the incoming anim-only surfaces
+ info.releaseAnimSurfaces();
+ }
finishCallback.onTransitionFinished(null /* wct */);
}
@@ -1346,9 +1374,16 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
final SurfaceControl.Transaction t = mFinishTransaction;
final WindowContainerTransaction wct = new WindowContainerTransaction();
+ // The following code must set this if it is changing anything in core that might affect
+ // transitions as a part of finishing the recents transition
+ boolean requiresBookendTransition = false;
+
if (mKeyguardLocked && mRecentsTask != null) {
if (toHome) wct.reorder(mRecentsTask, true /* toTop */);
else wct.restoreTransientOrder(mRecentsTask);
+ // We are manipulating the window hierarchy, which should only be done with the
+ // bookend transition
+ requiresBookendTransition = true;
}
if (returningToApp) {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION, " returning to app");
@@ -1365,6 +1400,9 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
if (!mKeyguardLocked && mRecentsTask != null) {
wct.restoreTransientOrder(mRecentsTask);
}
+ // We are manipulating the window hierarchy, which should only be done with the
+ // bookend transition
+ requiresBookendTransition = true;
} else if (toHome && mOpeningSeparateHome && mPausingTasks != null) {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION, " 3p launching home");
// Special situation where 3p launcher was changed during recents (this happens
@@ -1384,6 +1422,9 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
if (!mKeyguardLocked && mRecentsTask != null) {
wct.restoreTransientOrder(mRecentsTask);
}
+ // We are manipulating the window hierarchy, which should only be done with the
+ // bookend transition
+ requiresBookendTransition = true;
} else {
if (mPausingSeparateHome) {
if (mOpeningTasks.isEmpty()) {
@@ -1484,13 +1525,21 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
if (Flags.enableRecentsBookendTransition()) {
if (!wct.isEmpty()) {
- ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
- "[%d] RecentsController.finishInner: "
- + "Queuing TRANSIT_END_RECENTS_TRANSITION", mInstanceId);
- mPendingRunnerFinishCb = runnerFinishCb;
- mPendingFinishTransition = mTransitions.startTransition(
- TRANSIT_END_RECENTS_TRANSITION, wct,
- new PendingFinishTransitionHandler());
+ if (requiresBookendTransition) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.finishInner: "
+ + "Queuing TRANSIT_END_RECENTS_TRANSITION", mInstanceId);
+ mPendingRunnerFinishCb = runnerFinishCb;
+ mPendingFinishTransition = mTransitions.startTransition(
+ TRANSIT_END_RECENTS_TRANSITION, wct,
+ new PendingFinishTransitionHandler());
+ } else {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] RecentsController.finishInner: Non-transition affecting wct",
+ mInstanceId);
+ mPendingRunnerFinishCb = runnerFinishCb;
+ onFinishInner(wct);
+ }
} else {
// If there's no work to do, just go ahead and clean up
mPendingRunnerFinishCb = runnerFinishCb;
@@ -1631,6 +1680,9 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
@NonNull SurfaceControl.Transaction startTransaction,
@NonNull SurfaceControl.Transaction finishTransaction,
@NonNull Transitions.TransitionFinishCallback finishCallback) {
+ ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
+ "[%d] PendingFinishTransitionHandler.startAnimation: "
+ + "Started pending finish transition", mInstanceId);
return false;
}
@@ -1644,10 +1696,15 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler,
@Override
public void onTransitionConsumed(@NonNull IBinder transition, boolean aborted,
@Nullable SurfaceControl.Transaction finishTransaction) {
+ if (mPendingFinishTransition == null) {
+ // The cleanup was pre-empted by an earlier transition, nothing there is nothing
+ // to do here
+ return;
+ }
// Once we have merged (or not if the WCT didn't result in any changes), then we can
// run the pending finish logic
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_RECENTS_TRANSITION,
- "[%d] RecentsController.onTransitionConsumed: "
+ "[%d] PendingFinishTransitionHandler.onTransitionConsumed: "
+ "Consumed pending finish transition", mInstanceId);
onFinishInner(null /* wct */);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java
index 743bd052995e..347dcff86529 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java
@@ -40,7 +40,6 @@ import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction;
import com.android.internal.protolog.ProtoLog;
-import com.android.window.flags.Flags;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.activityembedding.ActivityEmbeddingController;
import com.android.wm.shell.common.ComponentUtils;
@@ -439,9 +438,6 @@ public class DefaultMixedHandler implements MixedTransitionHandler,
for (int i = 0; i < info.getRootCount(); ++i) {
out.addRoot(info.getRoot(i));
}
- if (!Flags.moveAnimationOptionsToChange()) {
- out.setAnimationOptions(info.getAnimationOptions());
- }
return out;
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java
index 01428e60582e..e9c6adec75d7 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java
@@ -539,7 +539,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
cornerRadius = 0;
}
- backgroundColorForTransition = getTransitionBackgroundColorIfSet(info, change, a,
+ backgroundColorForTransition = getTransitionBackgroundColorIfSet(change, a,
backgroundColorForTransition);
if (!isTask && a.getExtensionEdges() != 0x0) {
@@ -606,12 +606,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
mTransactionPool, mMainExecutor, animRelOffset, cornerRadius,
clipRect);
- final TransitionInfo.AnimationOptions options;
- if (Flags.moveAnimationOptionsToChange()) {
- options = change.getAnimationOptions();
- } else {
- options = info.getAnimationOptions();
- }
+ final TransitionInfo.AnimationOptions options = change.getAnimationOptions();
if (options != null) {
attachThumbnail(animations, onAnimFinish, change, options, cornerRadius);
}
@@ -834,12 +829,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
final boolean isOpeningType = TransitionUtil.isOpeningType(type);
final boolean enter = TransitionUtil.isOpeningType(changeMode);
final boolean isTask = change.getTaskInfo() != null;
- final TransitionInfo.AnimationOptions options;
- if (Flags.moveAnimationOptionsToChange()) {
- options = change.getAnimationOptions();
- } else {
- options = info.getAnimationOptions();
- }
+ final TransitionInfo.AnimationOptions options = change.getAnimationOptions();
final int overrideType = options != null ? options.getType() : ANIM_NONE;
final int userId = options != null ? options.getUserId() : UserHandle.USER_CURRENT;
final Rect endBounds = TransitionUtil.isClosingType(changeMode)
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java
index 1917996d48fb..938885cc1684 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/HomeTransitionObserver.java
@@ -21,6 +21,7 @@ import static android.view.Display.DEFAULT_DISPLAY;
import static android.window.TransitionInfo.FLAG_BACK_GESTURE_ANIMATED;
import static com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.TRANSIT_DESKTOP_MODE_START_DRAG_TO_DESKTOP;
+import static com.android.wm.shell.transition.Transitions.TRANSIT_CONVERT_TO_BUBBLE;
import static com.android.wm.shell.transition.Transitions.TransitionObserver;
import android.annotation.NonNull;
@@ -35,6 +36,7 @@ import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SingleInstanceRemoteListener;
import com.android.wm.shell.shared.IHomeTransitionListener;
import com.android.wm.shell.shared.TransitionUtil;
+import com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper;
/**
* The {@link TransitionObserver} that observes for transitions involving the home
@@ -48,6 +50,8 @@ public class HomeTransitionObserver implements TransitionObserver,
private @NonNull final Context mContext;
private @NonNull final ShellExecutor mMainExecutor;
+ private Boolean mPendingHomeVisibilityUpdate;
+
public HomeTransitionObserver(@NonNull Context context,
@NonNull ShellExecutor mainExecutor) {
mContext = context;
@@ -59,28 +63,78 @@ public class HomeTransitionObserver implements TransitionObserver,
@NonNull TransitionInfo info,
@NonNull SurfaceControl.Transaction startTransaction,
@NonNull SurfaceControl.Transaction finishTransaction) {
+ if (BubbleAnythingFlagHelper.enableBubbleToFullscreen()) {
+ handleTransitionReadyWithBubbleAnything(info);
+ } else {
+ handleTransitionReady(info);
+ }
+ }
+
+ private void handleTransitionReady(@NonNull TransitionInfo info) {
for (TransitionInfo.Change change : info.getChanges()) {
final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
- if (info.getType() == TRANSIT_DESKTOP_MODE_START_DRAG_TO_DESKTOP
- || taskInfo == null
+ if (taskInfo == null
+ || info.getType() == TRANSIT_DESKTOP_MODE_START_DRAG_TO_DESKTOP
|| taskInfo.displayId != DEFAULT_DISPLAY
|| taskInfo.taskId == -1
|| !taskInfo.isRunning) {
continue;
}
+ Boolean homeVisibilityUpdate = getHomeVisibilityUpdate(info, change, taskInfo);
+ if (homeVisibilityUpdate != null) {
+ notifyHomeVisibilityChanged(homeVisibilityUpdate);
+ }
+ }
+ }
+
+ private void handleTransitionReadyWithBubbleAnything(@NonNull TransitionInfo info) {
+ Boolean homeVisibilityUpdate = null;
+ for (TransitionInfo.Change change : info.getChanges()) {
+ final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
+ if (taskInfo == null
+ || taskInfo.displayId != DEFAULT_DISPLAY
+ || taskInfo.taskId == -1
+ || !taskInfo.isRunning) {
+ continue;
+ }
+
+ Boolean update = getHomeVisibilityUpdate(info, change, taskInfo);
+ if (update != null) {
+ homeVisibilityUpdate = update;
+ }
+ }
+
+ if (info.getType() == TRANSIT_DESKTOP_MODE_START_DRAG_TO_DESKTOP) {
+ // Do not apply at the start of desktop drag as that updates launcher UI visibility.
+ // Store the value and apply with a next transition if needed.
+ mPendingHomeVisibilityUpdate = homeVisibilityUpdate;
+ return;
+ }
+
+ if (info.getType() == TRANSIT_CONVERT_TO_BUBBLE && homeVisibilityUpdate == null) {
+ // We are converting to bubble and we did not get a change to home visibility in this
+ // transition. Apply the value from start of drag.
+ homeVisibilityUpdate = mPendingHomeVisibilityUpdate;
+ }
+ if (homeVisibilityUpdate != null) {
+ mPendingHomeVisibilityUpdate = null;
+ notifyHomeVisibilityChanged(homeVisibilityUpdate);
+ }
+ }
- final int mode = change.getMode();
- final boolean isBackGesture = change.hasFlags(FLAG_BACK_GESTURE_ANIMATED);
- if (taskInfo.getActivityType() == ACTIVITY_TYPE_HOME) {
- final boolean gestureToHomeTransition = isBackGesture
- && TransitionUtil.isClosingType(info.getType());
- if (gestureToHomeTransition || TransitionUtil.isClosingMode(mode)
- || (!isBackGesture && TransitionUtil.isOpeningMode(mode))) {
- notifyHomeVisibilityChanged(gestureToHomeTransition
- || TransitionUtil.isOpeningType(mode));
- }
+ private Boolean getHomeVisibilityUpdate(TransitionInfo info,
+ TransitionInfo.Change change, ActivityManager.RunningTaskInfo taskInfo) {
+ final int mode = change.getMode();
+ final boolean isBackGesture = change.hasFlags(FLAG_BACK_GESTURE_ANIMATED);
+ if (taskInfo.getActivityType() == ACTIVITY_TYPE_HOME) {
+ final boolean gestureToHomeTransition = isBackGesture
+ && TransitionUtil.isClosingType(info.getType());
+ if (gestureToHomeTransition || TransitionUtil.isClosingMode(mode)
+ || (!isBackGesture && TransitionUtil.isOpeningMode(mode))) {
+ return gestureToHomeTransition || TransitionUtil.isOpeningType(mode);
}
}
+ return null;
}
@Override
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
index 4feb4753096e..7984bcedc4e5 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java
@@ -58,7 +58,6 @@ import android.window.TransitionInfo;
import com.android.internal.R;
import com.android.internal.policy.TransitionAnimation;
import com.android.internal.protolog.ProtoLog;
-import com.android.window.flags.Flags;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
import com.android.wm.shell.shared.TransitionUtil;
@@ -78,12 +77,7 @@ public class TransitionAnimationHelper {
final boolean isFreeform = isTask && change.getTaskInfo().isFreeform();
final boolean isCoveredByOpaqueFullscreenChange =
isCoveredByOpaqueFullscreenChange(info, change);
- final TransitionInfo.AnimationOptions options;
- if (Flags.moveAnimationOptionsToChange()) {
- options = change.getAnimationOptions();
- } else {
- options = info.getAnimationOptions();
- }
+ final TransitionInfo.AnimationOptions options = change.getAnimationOptions();
final int overrideType = options != null ? options.getType() : ANIM_NONE;
int animAttr = 0;
boolean translucent = false;
@@ -279,16 +273,10 @@ public class TransitionAnimationHelper {
* the given transition animation.
*/
@ColorInt
- public static int getTransitionBackgroundColorIfSet(@NonNull TransitionInfo info,
- @NonNull TransitionInfo.Change change, @NonNull Animation a,
- @ColorInt int defaultColor) {
+ public static int getTransitionBackgroundColorIfSet(@NonNull TransitionInfo.Change change,
+ @NonNull Animation a, @ColorInt int defaultColor) {
if (!a.getShowBackdrop()) {
return defaultColor;
- }
- if (!Flags.moveAnimationOptionsToChange() && info.getAnimationOptions() != null
- && info.getAnimationOptions().getBackgroundColor() != 0) {
- // If available use the background color provided through AnimationOptions
- return info.getAnimationOptions().getBackgroundColor();
} else if (a.getBackdropColor() != 0) {
// Otherwise fallback on the background color provided through the animation
// definition.
diff --git a/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/functional/AltTabSwitchInDesktopModeTest.kt b/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/functional/AltTabSwitchInDesktopModeTest.kt
new file mode 100644
index 000000000000..617b3c576444
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/functional/AltTabSwitchInDesktopModeTest.kt
@@ -0,0 +1,27 @@
+/*
+ * 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.functional
+
+import com.android.wm.shell.scenarios.AltTabSwitchInDesktopMode
+import org.junit.Ignore
+import org.junit.runner.RunWith
+import org.junit.runners.BlockJUnit4ClassRunner
+
+/* Functional test for [AltTabSwitchInDesktopMode]. */
+@RunWith(BlockJUnit4ClassRunner::class)
+@Ignore("Blocked by b/392820286, include in Postsubmit, when the issue is resolved")
+class AltTabSwitchInDesktopModeTest : AltTabSwitchInDesktopMode() \ No newline at end of file
diff --git a/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/AltTabSwitchInDesktopMode.kt b/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/AltTabSwitchInDesktopMode.kt
new file mode 100644
index 000000000000..cf6d5a871b13
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/e2e/desktopmode/scenarios/src/com/android/wm/shell/scenarios/AltTabSwitchInDesktopMode.kt
@@ -0,0 +1,80 @@
+/*
+ * 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.scenarios
+
+import android.app.Instrumentation
+import android.tools.flicker.rules.ChangeDisplayOrientationRule
+import android.tools.NavBar
+import android.tools.Rotation
+import android.tools.traces.parsers.WindowManagerStateHelper
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.uiautomator.UiDevice
+import com.android.launcher3.tapl.LauncherInstrumentation
+import com.android.server.wm.flicker.helpers.DesktopModeAppHelper
+import com.android.server.wm.flicker.helpers.MailAppHelper
+import com.android.server.wm.flicker.helpers.NewTasksAppHelper
+import com.android.server.wm.flicker.helpers.SimpleAppHelper
+import com.android.window.flags.Flags
+import com.android.wm.shell.Utils
+import org.junit.After
+import org.junit.Assume
+import org.junit.Before
+import org.junit.Ignore
+import org.junit.Rule
+import org.junit.Test
+
+@Ignore("Test Base Class")
+abstract class AltTabSwitchInDesktopMode(val rotation: Rotation = Rotation.ROTATION_0) {
+
+ private val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation()
+ private val tapl = LauncherInstrumentation()
+ private val wmHelper = WindowManagerStateHelper(instrumentation)
+ private val device = UiDevice.getInstance(instrumentation)
+ private val firstApp = DesktopModeAppHelper(SimpleAppHelper(instrumentation))
+ private val secondApp = MailAppHelper(instrumentation)
+ private val thirdApp = NewTasksAppHelper(instrumentation)
+
+ @Rule
+ @JvmField val testSetupRule = Utils.testSetupRule(NavBar.MODE_GESTURAL, rotation)
+
+ @Before
+ fun setup() {
+ Assume.assumeTrue(Flags.enableDesktopWindowingMode() && tapl.isTablet)
+ tapl.setEnableRotation(true)
+ tapl.setExpectedRotation(rotation.value)
+ tapl.enableTransientTaskbar(false)
+ ChangeDisplayOrientationRule.setRotation(rotation)
+ firstApp.enterDesktopMode(wmHelper, device)
+ secondApp.launchViaIntent(wmHelper)
+ thirdApp.launchViaIntent(wmHelper)
+ }
+
+ @Test
+ open fun switchApp() {
+ tapl.launchedAppState
+ .showQuickSwitchView()
+ .moveFocusForward()
+ .launchFocusedAppTask(firstApp.packageName)
+ }
+
+ @After
+ fun teardown() {
+ thirdApp.exit(wmHelper)
+ secondApp.exit(wmHelper)
+ firstApp.exit(wmHelper)
+ }
+} \ No newline at end of file
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java
index 94dc774a6737..d4d8d93abf7d 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java
@@ -39,7 +39,6 @@ import android.animation.Animator;
import android.annotation.NonNull;
import android.graphics.Point;
import android.graphics.Rect;
-import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
@@ -77,7 +76,6 @@ public class ActivityEmbeddingAnimationRunnerTests extends ActivityEmbeddingAnim
doNothing().when(mController).onAnimationFinished(any());
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testStartAnimation() {
final TransitionInfo info = new TransitionInfoBuilder(TRANSIT_OPEN, 0)
@@ -103,7 +101,6 @@ public class ActivityEmbeddingAnimationRunnerTests extends ActivityEmbeddingAnim
verify(mController).onAnimationFinished(mTransition);
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testChangesBehindStartingWindow() {
final TransitionInfo info = new TransitionInfoBuilder(TRANSIT_OPEN, 0)
@@ -118,7 +115,6 @@ public class ActivityEmbeddingAnimationRunnerTests extends ActivityEmbeddingAnim
assertEquals(0, animator.getDuration());
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testTransitionTypeDragResize() {
final TransitionInfo info = new TransitionInfoBuilder(TRANSIT_TASK_FRAGMENT_DRAG_RESIZE, 0)
@@ -133,25 +129,6 @@ public class ActivityEmbeddingAnimationRunnerTests extends ActivityEmbeddingAnim
assertEquals(0, animator.getDuration());
}
- @DisableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
- @Test
- public void testInvalidCustomAnimation_disableAnimationOptionsPerChange() {
- final TransitionInfo info = new TransitionInfoBuilder(TRANSIT_OPEN, 0)
- .addChange(createChange(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY, TRANSIT_OPEN))
- .build();
- info.setAnimationOptions(TransitionInfo.AnimationOptions
- .makeCustomAnimOptions("packageName", 0 /* enterResId */, 0 /* exitResId */,
- 0 /* backgroundColor */, false /* overrideTaskTransition */));
- final Animator animator = mAnimRunner.createAnimator(
- info, mStartTransaction, mFinishTransaction,
- () -> mFinishCallback.onTransitionFinished(null /* wct */),
- new ArrayList<>());
-
- // An invalid custom animation is equivalent to jump-cut.
- assertEquals(0, animator.getDuration());
- }
-
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testInvalidCustomAnimation_enableAnimationOptionsPerChange() {
final TransitionInfo info = new TransitionInfoBuilder(TRANSIT_OPEN, 0)
@@ -169,36 +146,6 @@ public class ActivityEmbeddingAnimationRunnerTests extends ActivityEmbeddingAnim
assertEquals(0, animator.getDuration());
}
- @DisableFlags(Flags.FLAG_ACTIVITY_EMBEDDING_OVERLAY_PRESENTATION_FLAG)
- @Test
- public void testCalculateParentBounds_flagDisabled() {
- final Rect parentBounds = new Rect(0, 0, 2000, 2000);
- final Rect primaryBounds = new Rect();
- final Rect secondaryBounds = new Rect();
- parentBounds.splitVertically(primaryBounds, secondaryBounds);
-
- final TransitionInfo.Change change = createChange(0 /* flags */);
- change.setStartAbsBounds(secondaryBounds);
-
- final TransitionInfo.Change boundsAnimationChange = createChange(0 /* flags */);
- boundsAnimationChange.setStartAbsBounds(primaryBounds);
- boundsAnimationChange.setEndAbsBounds(primaryBounds);
- final Rect actualParentBounds = new Rect();
-
- calculateParentBounds(change, boundsAnimationChange, actualParentBounds);
-
- assertEquals(parentBounds, actualParentBounds);
-
- actualParentBounds.setEmpty();
-
- boundsAnimationChange.setStartAbsBounds(secondaryBounds);
- boundsAnimationChange.setEndAbsBounds(primaryBounds);
-
- calculateParentBounds(boundsAnimationChange, boundsAnimationChange, actualParentBounds);
-
- assertEquals(parentBounds, actualParentBounds);
- }
-
// TODO(b/243518738): Rewrite with TestParameter
@EnableFlags(Flags.FLAG_ACTIVITY_EMBEDDING_OVERLAY_PRESENTATION_FLAG)
@Test
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java
index 9f29ef71930a..53a13d0d4ffd 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java
@@ -32,8 +32,6 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
import android.animation.Animator;
import android.animation.ValueAnimator;
import android.graphics.Rect;
-import android.platform.test.annotations.DisableFlags;
-import android.platform.test.annotations.EnableFlags;
import android.view.SurfaceControl;
import android.window.TransitionInfo;
@@ -41,7 +39,6 @@ import androidx.test.annotation.UiThreadTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
-import com.android.window.flags.Flags;
import com.android.wm.shell.transition.TransitionInfoBuilder;
import org.junit.Before;
@@ -69,13 +66,11 @@ public class ActivityEmbeddingControllerTests extends ActivityEmbeddingAnimation
any());
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testInstantiate() {
verify(mShellInit).addInitCallback(any(), any());
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testOnInit() {
mController.onInit();
@@ -83,7 +78,6 @@ public class ActivityEmbeddingControllerTests extends ActivityEmbeddingAnimation
verify(mTransitions).addHandler(mController);
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testSetAnimScaleSetting() {
mController.setAnimScaleSetting(1.0f);
@@ -92,7 +86,6 @@ public class ActivityEmbeddingControllerTests extends ActivityEmbeddingAnimation
verify(mAnimSpec).setAnimScaleSetting(1.0f);
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testStartAnimation_containsNonActivityEmbeddingChange() {
final TransitionInfo.Change nonEmbeddedOpen = createChange(0 /* flags */);
@@ -129,7 +122,6 @@ public class ActivityEmbeddingControllerTests extends ActivityEmbeddingAnimation
assertFalse(info2.getChanges().contains(nonEmbeddedClose));
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testStartAnimation_containsOnlyFillTaskActivityEmbeddingChange() {
final TransitionInfo info = new TransitionInfoBuilder(TRANSIT_OPEN, 0)
@@ -146,7 +138,6 @@ public class ActivityEmbeddingControllerTests extends ActivityEmbeddingAnimation
verifyNoMoreInteractions(mFinishCallback);
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testStartAnimation_containsActivityEmbeddingSplitChange() {
// Change that occupies only part of the Task.
@@ -164,7 +155,6 @@ public class ActivityEmbeddingControllerTests extends ActivityEmbeddingAnimation
verifyNoMoreInteractions(mFinishTransaction);
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testStartAnimation_containsChangeEnterActivityEmbeddingSplit() {
// Change that is entering ActivityEmbedding split.
@@ -181,7 +171,6 @@ public class ActivityEmbeddingControllerTests extends ActivityEmbeddingAnimation
verifyNoMoreInteractions(mFinishTransaction);
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testStartAnimation_containsChangeExitActivityEmbeddingSplit() {
// Change that is exiting ActivityEmbedding split.
@@ -198,27 +187,6 @@ public class ActivityEmbeddingControllerTests extends ActivityEmbeddingAnimation
verifyNoMoreInteractions(mFinishTransaction);
}
- @DisableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
- @Test
- public void testShouldAnimate_containsAnimationOptions_disableAnimOptionsPerChange() {
- final TransitionInfo info = new TransitionInfoBuilder(TRANSIT_CLOSE, 0)
- .addChange(createEmbeddedChange(EMBEDDED_RIGHT_BOUNDS, TASK_BOUNDS, TASK_BOUNDS))
- .build();
-
- info.setAnimationOptions(TransitionInfo.AnimationOptions
- .makeCustomAnimOptions("packageName", 0 /* enterResId */, 0 /* exitResId */,
- 0 /* backgroundColor */, false /* overrideTaskTransition */));
- assertTrue(mController.shouldAnimate(info));
-
- info.setAnimationOptions(TransitionInfo.AnimationOptions
- .makeSceneTransitionAnimOptions());
- assertFalse(mController.shouldAnimate(info));
-
- info.setAnimationOptions(TransitionInfo.AnimationOptions.makeCrossProfileAnimOptions());
- assertFalse(mController.shouldAnimate(info));
- }
-
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testShouldAnimate_containsAnimationOptions_enableAnimOptionsPerChange() {
final TransitionInfo info = new TransitionInfoBuilder(TRANSIT_CLOSE, 0)
@@ -239,7 +207,6 @@ public class ActivityEmbeddingControllerTests extends ActivityEmbeddingAnimation
assertFalse(mController.shouldAnimate(info));
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@UiThreadTest
@Test
public void testMergeAnimation() {
@@ -278,7 +245,6 @@ public class ActivityEmbeddingControllerTests extends ActivityEmbeddingAnimation
verify(mFinishCallback).onTransitionFinished(any());
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testOnAnimationFinished() {
// Should not call finish when there is no transition.
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandlerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandlerTest.kt
index 4c3325d4d1de..0d1c57221fb9 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandlerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopMinimizationTransitionHandlerTest.kt
@@ -21,6 +21,7 @@ import android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD
import android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM
import android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN
import android.app.WindowConfiguration.WindowingMode
+import android.os.Handler
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper.RunWithLooper
import android.view.SurfaceControl
@@ -56,7 +57,12 @@ class DesktopMinimizationTransitionHandlerTest : ShellTestCase() {
@Before
fun setUp() {
handler =
- DesktopMinimizationTransitionHandler(testExecutor, testExecutor, displayController)
+ DesktopMinimizationTransitionHandler(
+ testExecutor,
+ testExecutor,
+ displayController,
+ mock<Handler>(),
+ )
whenever(displayController.getDisplayContext(any())).thenReturn(mContext)
}
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 e00bdca7e041..ff9fdd482347 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
@@ -2478,8 +2478,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
controller.moveTaskToFront(task.taskId, unminimizeReason = UnminimizeReason.UNKNOWN)
val wct = getLatestDesktopMixedTaskWct(type = TRANSIT_OPEN)
- assertThat(wct.hierarchyOps).hasSize(1)
- wct.assertLaunchTaskAt(0, task.taskId, WINDOWING_MODE_FREEFORM)
+ wct.assertLaunchTask(task.taskId, WINDOWING_MODE_FREEFORM)
}
@Test
@@ -2811,6 +2810,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
// Should launch home
wct.assertPendingIntentAt(0, launchHomeIntent(DEFAULT_DISPLAY))
+ wct.assertPendingIntentActivityOptionsLaunchDisplayIdAt(0, DEFAULT_DISPLAY)
}
@Test
@@ -2971,9 +2971,13 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
val captor = argumentCaptor<WindowContainerTransaction>()
verify(freeformTaskTransitionStarter)
.startMinimizedModeTransition(captor.capture(), eq(task.taskId), eq(false))
- captor.firstValue.hierarchyOps.none { hop ->
- hop.type == HIERARCHY_OP_TYPE_REMOVE_TASK && hop.container == wallpaperToken.asBinder()
- }
+ assertThat(
+ captor.firstValue.hierarchyOps.none { hop ->
+ hop.type == HIERARCHY_OP_TYPE_REMOVE_TASK &&
+ hop.container == wallpaperToken.asBinder()
+ }
+ )
+ .isTrue()
}
@Test
@@ -3062,9 +3066,13 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
val captor = argumentCaptor<WindowContainerTransaction>()
verify(freeformTaskTransitionStarter).startPipTransition(captor.capture())
- captor.firstValue.hierarchyOps.none { hop ->
- hop.type == HIERARCHY_OP_TYPE_REMOVE_TASK && hop.container == wallpaperToken.asBinder()
- }
+ assertThat(
+ captor.firstValue.hierarchyOps.none { hop ->
+ hop.type == HIERARCHY_OP_TYPE_REMOVE_TASK &&
+ hop.container == wallpaperToken.asBinder()
+ }
+ )
+ .isTrue()
}
@Test
@@ -3085,7 +3093,12 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
val captor = argumentCaptor<WindowContainerTransaction>()
verify(freeformTaskTransitionStarter)
.startMinimizedModeTransition(captor.capture(), eq(task.taskId), eq(true))
- captor.firstValue.hierarchyOps.none { hop -> hop.type == HIERARCHY_OP_TYPE_REMOVE_TASK }
+ assertThat(
+ captor.firstValue.hierarchyOps.none { hop ->
+ hop.type == HIERARCHY_OP_TYPE_REMOVE_TASK
+ }
+ )
+ .isTrue()
}
@Test
@@ -3132,9 +3145,13 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
val captor = argumentCaptor<WindowContainerTransaction>()
verify(freeformTaskTransitionStarter)
.startMinimizedModeTransition(captor.capture(), eq(task.taskId), eq(false))
- captor.firstValue.hierarchyOps.none { hop ->
- hop.type == HIERARCHY_OP_TYPE_REMOVE_TASK && hop.container == wallpaperToken.asBinder()
- }
+ assertThat(
+ captor.firstValue.hierarchyOps.none { hop ->
+ hop.type == HIERARCHY_OP_TYPE_REMOVE_TASK &&
+ hop.container == wallpaperToken.asBinder()
+ }
+ )
+ .isTrue()
}
@Test
@@ -3156,9 +3173,13 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
val captor = argumentCaptor<WindowContainerTransaction>()
verify(freeformTaskTransitionStarter)
.startMinimizedModeTransition(captor.capture(), eq(task1.taskId), eq(false))
- captor.firstValue.hierarchyOps.none { hop ->
- hop.type == HIERARCHY_OP_TYPE_REMOVE_TASK && hop.container == wallpaperToken.asBinder()
- }
+ assertThat(
+ captor.firstValue.hierarchyOps.none { hop ->
+ hop.type == HIERARCHY_OP_TYPE_REMOVE_TASK &&
+ hop.container == wallpaperToken.asBinder()
+ }
+ )
+ .isTrue()
}
@Test
@@ -3915,6 +3936,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
// Should launch home
assertNotNull(result, "Should handle request")
.assertPendingIntentAt(0, launchHomeIntent(DEFAULT_DISPLAY))
+ result!!.assertPendingIntentActivityOptionsLaunchDisplayIdAt(0, DEFAULT_DISPLAY)
}
@Test
@@ -3941,6 +3963,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
// Should launch home
assertNotNull(result, "Should handle request")
.assertPendingIntentAt(0, launchHomeIntent(DEFAULT_DISPLAY))
+ result!!.assertPendingIntentActivityOptionsLaunchDisplayIdAt(0, DEFAULT_DISPLAY)
}
@Test
@@ -4073,6 +4096,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
// Should launch home
assertNotNull(result, "Should handle request")
.assertPendingIntentAt(0, launchHomeIntent(DEFAULT_DISPLAY))
+ result!!.assertPendingIntentActivityOptionsLaunchDisplayIdAt(0, DEFAULT_DISPLAY)
}
@Test
@@ -4089,6 +4113,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
// Should launch home
assertNotNull(result, "Should handle request")
.assertPendingIntentAt(0, launchHomeIntent(SECOND_DISPLAY))
+ result!!.assertPendingIntentActivityOptionsLaunchDisplayIdAt(0, SECOND_DISPLAY)
}
@Test
@@ -6310,6 +6335,61 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
assertThat(taskRepository.getNumberOfDesks(DEFAULT_DISPLAY)).isEqualTo(currentDeskCount + 1)
}
+ @Test
+ @EnableFlags(
+ Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY,
+ Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER,
+ )
+ fun startLaunchTransition_desktopNotShowing_movesWallpaperToFront() {
+ val launchingTask = createFreeformTask()
+ val wct = WindowContainerTransaction()
+ wct.reorder(launchingTask.token, /* onTop= */ true)
+ whenever(
+ desktopMixedTransitionHandler.startLaunchTransition(
+ eq(TRANSIT_OPEN),
+ any(),
+ anyOrNull(),
+ anyOrNull(),
+ anyOrNull(),
+ )
+ )
+ .thenReturn(Binder())
+
+ controller.startLaunchTransition(TRANSIT_OPEN, wct, launchingTaskId = null)
+
+ val latestWct = getLatestDesktopMixedTaskWct(type = TRANSIT_OPEN)
+ val launchingTaskReorderIndex = latestWct.indexOfReorder(launchingTask, toTop = true)
+ val wallpaperReorderIndex = latestWct.indexOfReorder(wallpaperToken, toTop = true)
+ assertThat(launchingTaskReorderIndex).isNotEqualTo(-1)
+ assertThat(wallpaperReorderIndex).isNotEqualTo(-1)
+ assertThat(launchingTaskReorderIndex).isGreaterThan(wallpaperReorderIndex)
+ }
+
+ @Test
+ @EnableFlags(
+ Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY,
+ Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER,
+ )
+ fun startLaunchTransition_desktopShowing_doesNotReorderWallpaper() {
+ val wct = WindowContainerTransaction()
+ whenever(
+ desktopMixedTransitionHandler.startLaunchTransition(
+ eq(TRANSIT_OPEN),
+ any(),
+ anyOrNull(),
+ anyOrNull(),
+ anyOrNull(),
+ )
+ )
+ .thenReturn(Binder())
+
+ setUpFreeformTask()
+ controller.startLaunchTransition(TRANSIT_OPEN, wct, launchingTaskId = null)
+
+ val latestWct = getLatestDesktopMixedTaskWct(type = TRANSIT_OPEN)
+ assertNull(latestWct.hierarchyOps.find { op -> op.container == wallpaperToken.asBinder() })
+ }
+
private class RunOnStartTransitionCallback : ((IBinder) -> Unit) {
var invocations = 0
private set
@@ -6696,13 +6776,20 @@ private fun WindowContainerTransaction.assertWithoutHop(
}
private fun WindowContainerTransaction.indexOfReorder(
- task: RunningTaskInfo,
+ token: WindowContainerToken,
toTop: Boolean? = null,
): Int {
- val hop = hierarchyOps.singleOrNull(ReorderPredicate(task.token, toTop)) ?: return -1
+ val hop = hierarchyOps.singleOrNull(ReorderPredicate(token, toTop)) ?: return -1
return hierarchyOps.indexOf(hop)
}
+private fun WindowContainerTransaction.indexOfReorder(
+ task: RunningTaskInfo,
+ toTop: Boolean? = null,
+): Int {
+ return indexOfReorder(task.token, toTop)
+}
+
private class ReorderPredicate(val token: WindowContainerToken, val toTop: Boolean? = null) :
((WindowContainerTransaction.HierarchyOp) -> Boolean) {
override fun invoke(hop: WindowContainerTransaction.HierarchyOp): Boolean =
@@ -6820,6 +6907,29 @@ private fun WindowContainerTransaction.assertPendingIntentAt(index: Int, intent:
assertThat(op.pendingIntent?.intent?.categories).isEqualTo(intent.categories)
}
+private fun WindowContainerTransaction.assertPendingIntentActivityOptionsLaunchDisplayIdAt(
+ index: Int,
+ displayId: Int,
+) {
+ assertIndexInBounds(index)
+ val op = hierarchyOps[index]
+ if (op.launchOptions != null) {
+ val options = ActivityOptions(op.launchOptions)
+ assertThat(options.launchDisplayId).isEqualTo(displayId)
+ }
+}
+
+private fun WindowContainerTransaction.assertLaunchTask(taskId: Int, windowingMode: Int) {
+ val keyLaunchWindowingMode = "android.activity.windowingMode"
+
+ assertHop { hop ->
+ hop.type == HIERARCHY_OP_TYPE_LAUNCH_TASK &&
+ hop.launchOptions?.getInt(LAUNCH_KEY_TASK_ID) == taskId &&
+ hop.launchOptions?.getInt(keyLaunchWindowingMode, WINDOWING_MODE_UNDEFINED) ==
+ windowingMode
+ }
+}
+
private fun WindowContainerTransaction.assertLaunchTaskAt(
index: Int,
taskId: Int,
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt
index d33209dbc30e..62e3c544e390 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt
@@ -37,7 +37,6 @@ import androidx.test.filters.SmallTest
import com.android.dx.mockito.inline.extended.ExtendedMockito
import com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn
import com.android.dx.mockito.inline.extended.StaticMockitoSession
-import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_MINIMIZE_WINDOW
import com.android.internal.jank.InteractionJankMonitor
import com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION
import com.android.wm.shell.ShellTaskOrganizer
@@ -72,8 +71,6 @@ import org.mockito.Mockito.any
import org.mockito.Mockito.mock
import org.mockito.Mockito.spy
import org.mockito.Mockito.`when`
-import org.mockito.kotlin.eq
-import org.mockito.kotlin.verify
import org.mockito.quality.Strictness
/**
@@ -521,85 +518,6 @@ class DesktopTasksLimiterTest : ShellTestCase() {
}
@Test
- fun minimizeTransitionReadyAndFinished_logsJankInstrumentationBeginAndEnd() {
- desktopTaskRepo.addDesk(displayId = DEFAULT_DISPLAY, deskId = 0)
- desktopTaskRepo.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = 0)
- (1..<MAX_TASK_LIMIT).forEach { _ -> setUpFreeformTask() }
- val transition = Binder()
- val task = setUpFreeformTask()
- addPendingMinimizeChange(transition, taskId = task.taskId)
-
- callOnTransitionReady(
- transition,
- TransitionInfoBuilder(TRANSIT_OPEN).addChange(TRANSIT_TO_BACK, task).build(),
- )
-
- desktopTasksLimiter.getTransitionObserver().onTransitionStarting(transition)
-
- verify(interactionJankMonitor)
- .begin(any(), eq(mContext), eq(handler), eq(CUJ_DESKTOP_MODE_MINIMIZE_WINDOW))
-
- desktopTasksLimiter
- .getTransitionObserver()
- .onTransitionFinished(transition, /* aborted= */ false)
-
- verify(interactionJankMonitor).end(eq(CUJ_DESKTOP_MODE_MINIMIZE_WINDOW))
- }
-
- @Test
- fun minimizeTransitionReadyAndAborted_logsJankInstrumentationBeginAndCancel() {
- desktopTaskRepo.addDesk(displayId = DEFAULT_DISPLAY, deskId = 0)
- desktopTaskRepo.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = 0)
- (1..<MAX_TASK_LIMIT).forEach { _ -> setUpFreeformTask() }
- val transition = Binder()
- val task = setUpFreeformTask()
- addPendingMinimizeChange(transition, taskId = task.taskId)
-
- callOnTransitionReady(
- transition,
- TransitionInfoBuilder(TRANSIT_OPEN).addChange(TRANSIT_TO_BACK, task).build(),
- )
-
- desktopTasksLimiter.getTransitionObserver().onTransitionStarting(transition)
-
- verify(interactionJankMonitor)
- .begin(any(), eq(mContext), eq(handler), eq(CUJ_DESKTOP_MODE_MINIMIZE_WINDOW))
-
- desktopTasksLimiter
- .getTransitionObserver()
- .onTransitionFinished(transition, /* aborted= */ true)
-
- verify(interactionJankMonitor).cancel(eq(CUJ_DESKTOP_MODE_MINIMIZE_WINDOW))
- }
-
- @Test
- fun minimizeTransitionReadyAndMerged_logsJankInstrumentationBeginAndEnd() {
- desktopTaskRepo.addDesk(displayId = DEFAULT_DISPLAY, deskId = 0)
- desktopTaskRepo.setActiveDesk(displayId = DEFAULT_DISPLAY, deskId = 0)
- (1..<MAX_TASK_LIMIT).forEach { _ -> setUpFreeformTask() }
- val mergedTransition = Binder()
- val newTransition = Binder()
- val task = setUpFreeformTask()
- addPendingMinimizeChange(mergedTransition, taskId = task.taskId)
-
- callOnTransitionReady(
- mergedTransition,
- TransitionInfoBuilder(TRANSIT_OPEN).addChange(TRANSIT_TO_BACK, task).build(),
- )
-
- desktopTasksLimiter.getTransitionObserver().onTransitionStarting(mergedTransition)
-
- verify(interactionJankMonitor)
- .begin(any(), eq(mContext), eq(handler), eq(CUJ_DESKTOP_MODE_MINIMIZE_WINDOW))
-
- desktopTasksLimiter
- .getTransitionObserver()
- .onTransitionMerged(mergedTransition, newTransition)
-
- verify(interactionJankMonitor).end(eq(CUJ_DESKTOP_MODE_MINIMIZE_WINDOW))
- }
-
- @Test
fun getMinimizingTask_noPendingTransition_returnsNull() {
val transition = Binder()
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/GroupedTaskInfoTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/GroupedTaskInfoTest.kt
index 32096645aea7..6ecebd76a951 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/GroupedTaskInfoTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/GroupedTaskInfoTest.kt
@@ -26,7 +26,7 @@ import android.window.WindowContainerToken
import androidx.test.filters.SmallTest
import com.android.wm.shell.ShellTestCase
import com.android.wm.shell.shared.GroupedTaskInfo
-import com.android.wm.shell.shared.GroupedTaskInfo.TYPE_FREEFORM
+import com.android.wm.shell.shared.GroupedTaskInfo.TYPE_DESK
import com.android.wm.shell.shared.GroupedTaskInfo.TYPE_FULLSCREEN
import com.android.wm.shell.shared.GroupedTaskInfo.TYPE_SPLIT
import com.android.wm.shell.shared.split.SplitBounds
@@ -87,14 +87,14 @@ class GroupedTaskInfoTest : ShellTestCase() {
}
@Test
- fun testFreeformTasks_hasCorrectType() {
- assertThat(freeformTasksGroupInfo(freeformTaskIds = arrayOf(1)).isBaseType(TYPE_FREEFORM))
+ fun testDeskTasks_hasCorrectType() {
+ assertThat(deskTasksGroupInfo(deskId = 0, freeformTaskIds = arrayOf(1)).isBaseType(TYPE_DESK))
.isTrue()
}
@Test
- fun testCreateFreeformTasks_hasCorrectNumberOfTasks() {
- val list = freeformTasksGroupInfo(freeformTaskIds = arrayOf(1, 2, 3)).taskInfoList
+ fun testCreateDeskTasks_hasCorrectNumberOfTasks() {
+ val list = deskTasksGroupInfo(deskId = 0, freeformTaskIds = arrayOf(1, 2, 3)).taskInfoList
assertThat(list).hasSize(3)
assertThat(list[0].taskId).isEqualTo(1)
assertThat(list[1].taskId).isEqualTo(2)
@@ -102,9 +102,9 @@ class GroupedTaskInfoTest : ShellTestCase() {
}
@Test
- fun testCreateFreeformTasks_nonExistentMinimizedTaskId_throwsException() {
+ fun testCreateDeskTasks_nonExistentMinimizedTaskId_throwsException() {
assertThrows(IllegalArgumentException::class.java) {
- freeformTasksGroupInfo(
+ deskTasksGroupInfo(deskId = 0,
freeformTaskIds = arrayOf(1, 2, 3),
minimizedTaskIds = arrayOf(1, 4)
)
@@ -122,8 +122,8 @@ class GroupedTaskInfoTest : ShellTestCase() {
}
@Test
- fun testMixedWithFreeformBase_hasCorrectType() {
- assertThat(mixedTaskGroupInfoWithFreeformBase().isBaseType(TYPE_FREEFORM)).isTrue()
+ fun testMixedWithDeskBase_hasCorrectType() {
+ assertThat(mixedTaskGroupInfoWithDeskBase().isBaseType(TYPE_DESK)).isTrue()
}
@Test
@@ -190,15 +190,16 @@ class GroupedTaskInfoTest : ShellTestCase() {
}
@Test
- fun testParcelling_freeformTasks() {
- val taskInfo = freeformTasksGroupInfo(freeformTaskIds = arrayOf(1, 2, 3))
+ fun testParcelling_DeskTasks() {
+ val taskInfo = deskTasksGroupInfo(deskId = 50, freeformTaskIds = arrayOf(1, 2, 3))
val parcel = Parcel.obtain()
taskInfo.writeToParcel(parcel, 0)
parcel.setDataPosition(0)
// Read the object back from the parcel
val taskInfoFromParcel: GroupedTaskInfo =
GroupedTaskInfo.CREATOR.createFromParcel(parcel)
- assertThat(taskInfoFromParcel.isBaseType(TYPE_FREEFORM)).isTrue()
+ assertThat(taskInfoFromParcel.deskId).isEqualTo(taskInfo.deskId)
+ assertThat(taskInfoFromParcel.isBaseType(TYPE_DESK)).isTrue()
assertThat(taskInfoFromParcel.taskInfoList).hasSize(3)
// Only compare task ids
val taskIdComparator = Correspondence.transforming<TaskInfo, Int>(
@@ -209,8 +210,8 @@ class GroupedTaskInfoTest : ShellTestCase() {
}
@Test
- fun testParcelling_freeformTasks_minimizedTasks() {
- val taskInfo = freeformTasksGroupInfo(
+ fun testParcelling_DeskTasks_minimizedTasks() {
+ val taskInfo = deskTasksGroupInfo(deskId = 0,
freeformTaskIds = arrayOf(1, 2, 3), minimizedTaskIds = arrayOf(2))
val parcel = Parcel.obtain()
@@ -220,14 +221,14 @@ class GroupedTaskInfoTest : ShellTestCase() {
// Read the object back from the parcel
val taskInfoFromParcel: GroupedTaskInfo =
GroupedTaskInfo.CREATOR.createFromParcel(parcel)
- assertThat(taskInfoFromParcel.isBaseType(TYPE_FREEFORM)).isTrue()
+ assertThat(taskInfoFromParcel.isBaseType(TYPE_DESK)).isTrue()
assertThat(taskInfoFromParcel.minimizedTaskIds).isEqualTo(arrayOf(2).toIntArray())
}
@Test
fun testParcelling_mixedTasks() {
val taskInfo = GroupedTaskInfo.forMixed(listOf(
- freeformTasksGroupInfo(freeformTaskIds = arrayOf(4, 5, 6),
+ deskTasksGroupInfo(deskId = 0, freeformTaskIds = arrayOf(4, 5, 6),
minimizedTaskIds = arrayOf(5)),
splitTasksGroupInfo(firstId = 2, secondId = 3),
singleTaskGroupInfo(id = 1)))
@@ -239,7 +240,7 @@ class GroupedTaskInfoTest : ShellTestCase() {
// Read the object back from the parcel
val taskInfoFromParcel: GroupedTaskInfo =
GroupedTaskInfo.CREATOR.createFromParcel(parcel)
- assertThat(taskInfoFromParcel.isBaseType(TYPE_FREEFORM)).isTrue()
+ assertThat(taskInfoFromParcel.isBaseType(TYPE_DESK)).isTrue()
assertThat(taskInfoFromParcel.baseGroupedTask.minimizedTaskIds).isEqualTo(
arrayOf(5).toIntArray())
for (i in 1..6) {
@@ -275,12 +276,14 @@ class GroupedTaskInfoTest : ShellTestCase() {
}
@Test
- fun testTaskProperties_freeformTasks() {
+ fun testTaskProperties_DeskTasks() {
val task1 = createTaskInfo(id = 1)
val task2 = createTaskInfo(id = 2)
- val taskInfo = GroupedTaskInfo.forFreeformTasks(listOf(task1, task2), setOf())
+ val taskInfo = GroupedTaskInfo.forDeskTasks(
+ /* deskId = */ 500, listOf(task1, task2), setOf())
+ assertThat(taskInfo.deskId).isEqualTo(500)
assertThat(taskInfo.getTaskById(1)).isEqualTo(task1)
assertThat(taskInfo.getTaskById(2)).isEqualTo(task2)
assertThat(taskInfo.containsTask(1)).isTrue()
@@ -325,11 +328,13 @@ class GroupedTaskInfoTest : ShellTestCase() {
return GroupedTaskInfo.forSplitTasks(task1, task2, splitBounds)
}
- private fun freeformTasksGroupInfo(
+ private fun deskTasksGroupInfo(
+ deskId: Int,
freeformTaskIds: Array<Int>,
minimizedTaskIds: Array<Int> = emptyArray()
): GroupedTaskInfo {
- return GroupedTaskInfo.forFreeformTasks(
+ return GroupedTaskInfo.forDeskTasks(
+ deskId,
freeformTaskIds.map { createTaskInfo(it) }.toList(),
minimizedTaskIds.toSet())
}
@@ -346,9 +351,9 @@ class GroupedTaskInfoTest : ShellTestCase() {
singleTaskGroupInfo(id = 1)))
}
- private fun mixedTaskGroupInfoWithFreeformBase(): GroupedTaskInfo {
+ private fun mixedTaskGroupInfoWithDeskBase(): GroupedTaskInfo {
return GroupedTaskInfo.forMixed(listOf(
- freeformTasksGroupInfo(freeformTaskIds = arrayOf(2, 3, 4)),
+ deskTasksGroupInfo(deskId = 0, freeformTaskIds = arrayOf(2, 3, 4)),
singleTaskGroupInfo(id = 1)))
}
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java
index a546b3ea7d8f..bf65caec88c7 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/RecentTasksControllerTest.java
@@ -24,7 +24,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_PERSISTENCE;
-import static com.android.wm.shell.shared.GroupedTaskInfo.TYPE_FREEFORM;
+import static com.android.wm.shell.shared.GroupedTaskInfo.TYPE_DESK;
import static com.android.wm.shell.shared.GroupedTaskInfo.TYPE_FULLSCREEN;
import static com.android.wm.shell.shared.GroupedTaskInfo.TYPE_SPLIT;
import static com.android.wm.shell.shared.split.SplitScreenConstants.SNAP_TO_2_50_50;
@@ -349,7 +349,7 @@ public class RecentTasksControllerTest extends ShellTestCase {
GroupedTaskInfo freeformGroup = recentTasks.get(2);
// Check that groups have expected types
- assertTrue(freeformGroup.isBaseType(TYPE_FREEFORM));
+ assertTrue(freeformGroup.isBaseType(TYPE_DESK));
assertTrue(singleGroup1.isBaseType(TYPE_FULLSCREEN));
assertTrue(singleGroup2.isBaseType(TYPE_FULLSCREEN));
@@ -389,7 +389,7 @@ public class RecentTasksControllerTest extends ShellTestCase {
// Check that groups have expected types
assertTrue(splitGroup.isBaseType(TYPE_SPLIT));
- assertTrue(freeformGroup.isBaseType(TYPE_FREEFORM));
+ assertTrue(freeformGroup.isBaseType(TYPE_DESK));
assertTrue(singleGroup.isBaseType(TYPE_FULLSCREEN));
// Check freeform group entries
@@ -460,7 +460,7 @@ public class RecentTasksControllerTest extends ShellTestCase {
GroupedTaskInfo freeformGroup = recentTasks.get(2);
// Check that groups have expected types
- assertTrue(freeformGroup.isBaseType(TYPE_FREEFORM));
+ assertTrue(freeformGroup.isBaseType(TYPE_DESK));
assertTrue(singleGroup1.isBaseType(TYPE_FULLSCREEN));
assertTrue(singleGroup2.isBaseType(TYPE_FULLSCREEN));
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 c8025a94e453..93dd3456f3f2 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
@@ -17,16 +17,20 @@
package com.android.wm.shell.recents;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.view.WindowManager.TRANSIT_CLOSE;
import static android.view.WindowManager.TRANSIT_OPEN;
+import static android.view.WindowManager.TRANSIT_SLEEP;
import static android.view.WindowManager.TRANSIT_TO_FRONT;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_RECENTS_TRANSITIONS_CORNERS_BUGFIX;
+import static com.android.wm.shell.Flags.FLAG_ENABLE_RECENTS_BOOKEND_TRANSITION;
import static com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_ANIMATING;
import static com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_NOT_RUNNING;
import static com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_REQUESTED;
+import static com.android.wm.shell.transition.Transitions.TRANSIT_END_RECENTS_TRANSITION;
import static com.android.wm.shell.transition.Transitions.TRANSIT_START_RECENTS_TRANSITION;
import static com.google.common.truth.Truth.assertThat;
@@ -308,8 +312,7 @@ public class RecentsTransitionHandlerTest extends ShellTestCase {
mRecentsTransitionHandler.findController(transition).merge(
mergeTransitionInfo,
new StubTransaction(),
- finishT,
- transition,
+ new StubTransaction(),
mock(Transitions.TransitionFinishCallback.class));
mMainExecutor.flushAll();
@@ -318,6 +321,69 @@ public class RecentsTransitionHandlerTest extends ShellTestCase {
}
@Test
+ @EnableFlags(FLAG_ENABLE_RECENTS_BOOKEND_TRANSITION)
+ public void testMerge_consumeBookendTransition() throws Exception {
+ // Start and finish the transition
+ final IRecentsAnimationRunner animationRunner = mock(IRecentsAnimationRunner.class);
+ final IBinder transition = startRecentsTransition(/* synthetic= */ false, animationRunner);
+ mRecentsTransitionHandler.startAnimation(
+ transition, createTransitionInfo(), new StubTransaction(), new StubTransaction(),
+ mock(Transitions.TransitionFinishCallback.class));
+ mRecentsTransitionHandler.findController(transition).finish(/* toHome= */ false,
+ false /* sendUserLeaveHint */, mock(IResultReceiver.class));
+ mMainExecutor.flushAll();
+
+ // Merge the bookend transition
+ TransitionInfo mergeTransitionInfo =
+ new TransitionInfoBuilder(TRANSIT_END_RECENTS_TRANSITION)
+ .addChange(TRANSIT_OPEN, new TestRunningTaskInfoBuilder().build())
+ .build();
+ SurfaceControl.Transaction finishT = mock(SurfaceControl.Transaction.class);
+ Transitions.TransitionFinishCallback finishCallback
+ = mock(Transitions.TransitionFinishCallback.class);
+ mRecentsTransitionHandler.findController(transition).merge(
+ mergeTransitionInfo,
+ new StubTransaction(),
+ finishT,
+ finishCallback);
+ mMainExecutor.flushAll();
+
+ // Verify that we've merged
+ verify(finishCallback).onTransitionFinished(any());
+ }
+
+ @Test
+ @EnableFlags(FLAG_ENABLE_RECENTS_BOOKEND_TRANSITION)
+ public void testMerge_pendingBookendTransition_mergesTransition() throws Exception {
+ // Start and finish the transition
+ final IRecentsAnimationRunner animationRunner = mock(IRecentsAnimationRunner.class);
+ final IBinder transition = startRecentsTransition(/* synthetic= */ false, animationRunner);
+ mRecentsTransitionHandler.startAnimation(
+ transition, createTransitionInfo(), new StubTransaction(), new StubTransaction(),
+ mock(Transitions.TransitionFinishCallback.class));
+ mRecentsTransitionHandler.findController(transition).finish(/* toHome= */ false,
+ false /* sendUserLeaveHint */, mock(IResultReceiver.class));
+ mMainExecutor.flushAll();
+
+ // Merge a new transition while we have a pending finish
+ TransitionInfo mergeTransitionInfo = new TransitionInfoBuilder(TRANSIT_OPEN)
+ .addChange(TRANSIT_OPEN, new TestRunningTaskInfoBuilder().build())
+ .build();
+ SurfaceControl.Transaction finishT = mock(SurfaceControl.Transaction.class);
+ Transitions.TransitionFinishCallback finishCallback
+ = mock(Transitions.TransitionFinishCallback.class);
+ mRecentsTransitionHandler.findController(transition).merge(
+ mergeTransitionInfo,
+ new StubTransaction(),
+ finishT,
+ finishCallback);
+ mMainExecutor.flushAll();
+
+ // Verify that we've cleaned up the original transition
+ assertNull(mRecentsTransitionHandler.findController(transition));
+ }
+
+ @Test
@EnableFlags(FLAG_ENABLE_DESKTOP_RECENTS_TRANSITIONS_CORNERS_BUGFIX)
public void testMergeAndFinish_openingFreeformTasks_setsCornerRadius() {
ActivityManager.RunningTaskInfo freeformTask =
@@ -336,7 +402,6 @@ public class RecentsTransitionHandlerTest extends ShellTestCase {
mergeTransitionInfo,
new StubTransaction(),
finishT,
- transition,
mock(Transitions.TransitionFinishCallback.class));
mRecentsTransitionHandler.findController(transition).finish(/* toHome= */ false,
false /* sendUserLeaveHint */, mock(IResultReceiver.class));
@@ -385,15 +450,23 @@ public class RecentsTransitionHandlerTest extends ShellTestCase {
}
private TransitionInfo createTransitionInfo() {
- final ActivityManager.RunningTaskInfo task = new TestRunningTaskInfoBuilder()
+ final ActivityManager.RunningTaskInfo homeTask = new TestRunningTaskInfoBuilder()
.setTopActivityType(ACTIVITY_TYPE_HOME)
.build();
+ final ActivityManager.RunningTaskInfo appTask = new TestRunningTaskInfoBuilder()
+ .setTopActivityType(ACTIVITY_TYPE_STANDARD)
+ .build();
final TransitionInfo.Change homeChange = new TransitionInfo.Change(
- task.token, new SurfaceControl());
+ homeTask.token, new SurfaceControl());
homeChange.setMode(TRANSIT_TO_FRONT);
- homeChange.setTaskInfo(task);
+ homeChange.setTaskInfo(homeTask);
+ final TransitionInfo.Change appChange = new TransitionInfo.Change(
+ appTask.token, new SurfaceControl());
+ appChange.setMode(TRANSIT_TO_FRONT);
+ appChange.setTaskInfo(appTask);
return new TransitionInfoBuilder(TRANSIT_START_RECENTS_TRANSITION)
.addChange(homeChange)
+ .addChange(appChange)
.build();
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/animation/MinimizeAnimatorTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/animation/MinimizeAnimatorTest.kt
new file mode 100644
index 000000000000..ba609d4322fc
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/animation/MinimizeAnimatorTest.kt
@@ -0,0 +1,118 @@
+/*
+ * 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.shared.animation
+
+import android.animation.Animator
+import android.animation.AnimatorSet
+import android.animation.ValueAnimator
+import android.content.Context
+import android.content.res.Resources
+import android.os.Handler
+import android.util.DisplayMetrics
+import android.view.SurfaceControl
+import android.view.SurfaceControl.Transaction
+import android.window.TransitionInfo
+import android.window.WindowContainerToken
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import androidx.test.internal.runner.junit4.statement.UiThreadStatement.runOnUiThread
+import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_MINIMIZE_WINDOW
+import com.android.internal.jank.InteractionJankMonitor
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.any
+import org.mockito.ArgumentMatchers.anyFloat
+import org.mockito.ArgumentMatchers.anyLong
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.never
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class MinimizeAnimatorTest {
+ private val context = mock<Context>()
+ private val resources = mock<Resources>()
+ private val transaction = mock<Transaction>()
+ private val leash = mock<SurfaceControl>()
+ private val interactionJankMonitor = mock<InteractionJankMonitor>()
+ private val animationHandler = mock<Handler>()
+
+ private val displayMetrics = DisplayMetrics().apply { density = 1f }
+
+ @Before
+ fun setup() {
+ whenever(context.resources).thenReturn(resources)
+ whenever(resources.displayMetrics).thenReturn(displayMetrics)
+ whenever(transaction.setAlpha(any(), anyFloat())).thenReturn(transaction)
+ whenever(transaction.setPosition(any(), anyFloat(), anyFloat())).thenReturn(transaction)
+ whenever(transaction.setScale(any(), anyFloat(), anyFloat())).thenReturn(transaction)
+ whenever(transaction.setFrameTimeline(anyLong())).thenReturn(transaction)
+ }
+
+ @Test
+ fun create_returnsBoundsAndAlphaAnimators() {
+ val change = TransitionInfo.Change(mock<WindowContainerToken>(), leash)
+
+ val animator = createAnimator(change)
+
+ assertThat(animator).isInstanceOf(AnimatorSet::class.java)
+ val animatorSet = animator as AnimatorSet
+ assertThat(animatorSet.childAnimations).hasSize(2)
+ assertIsBoundsAnimator(animatorSet.childAnimations[0])
+ assertIsAlphaAnimator(animatorSet.childAnimations[1])
+ }
+
+ @Test
+ fun create_doesNotlogJankInstrumentation() = runOnUiThread {
+ val change = TransitionInfo.Change(mock<WindowContainerToken>(), leash)
+
+ createAnimator(change)
+
+ verify(interactionJankMonitor, never()).begin(
+ leash, context, animationHandler, CUJ_DESKTOP_MODE_MINIMIZE_WINDOW)
+ }
+
+ @Test
+ fun onAnimationStart_logsJankInstrumentation() = runOnUiThread {
+ val change = TransitionInfo.Change(mock<WindowContainerToken>(), leash)
+
+ createAnimator(change).start()
+
+ verify(interactionJankMonitor).begin(
+ leash, context, animationHandler, CUJ_DESKTOP_MODE_MINIMIZE_WINDOW)
+ }
+
+ private fun createAnimator(change: TransitionInfo.Change): Animator =
+ MinimizeAnimator.create(context, change, transaction, {}, interactionJankMonitor,
+ animationHandler)
+
+ private fun assertIsBoundsAnimator(animator: Animator) {
+ assertThat(animator).isInstanceOf(ValueAnimator::class.java)
+ assertThat(animator.duration).isEqualTo(200)
+ assertThat(animator.interpolator).isEqualTo(Interpolators.STANDARD_ACCELERATE)
+ }
+
+ private fun assertIsAlphaAnimator(animator: Animator) {
+ assertThat(animator).isInstanceOf(ValueAnimator::class.java)
+ assertThat(animator.duration).isEqualTo(100)
+ assertThat(animator.interpolator).isEqualTo(Interpolators.LINEAR)
+ }
+}
+
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java
index 6f28e656d060..3099b0f5cf66 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/transition/HomeTransitionObserverTest.java
@@ -17,36 +17,44 @@
package com.android.wm.shell.transition;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
+import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.view.WindowManager.TRANSIT_CHANGE;
import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_PREPARE_BACK_NAVIGATION;
import static android.view.WindowManager.TRANSIT_TO_BACK;
+import static android.view.WindowManager.TRANSIT_TO_FRONT;
import static android.window.TransitionInfo.FLAG_BACK_GESTURE_ANIMATED;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.wm.shell.desktopmode.DesktopModeTransitionTypes.TRANSIT_DESKTOP_MODE_START_DRAG_TO_DESKTOP;
+import static com.android.wm.shell.transition.Transitions.TRANSIT_CONVERT_TO_BUBBLE;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.when;
import android.app.ActivityManager;
import android.app.WindowConfiguration.ActivityType;
import android.content.Context;
+import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
+import android.platform.test.annotations.EnableFlags;
import android.view.SurfaceControl;
import android.window.TransitionInfo;
import android.window.TransitionInfo.TransitionMode;
+import android.window.WindowContainerToken;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
+import com.android.wm.shell.Flags;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.TestShellExecutor;
@@ -188,6 +196,72 @@ public class HomeTransitionObserverTest extends ShellTestCase {
}
@Test
+ @EnableFlags({Flags.FLAG_ENABLE_BUBBLE_TO_FULLSCREEN, Flags.FLAG_ENABLE_CREATE_ANY_BUBBLE})
+ public void testDragTaskToBubbleOverHome_notifiesHomeIsVisible() throws RemoteException {
+ ActivityManager.RunningTaskInfo homeTask = createTaskInfo(1, ACTIVITY_TYPE_HOME);
+ ActivityManager.RunningTaskInfo bubbleTask = createTaskInfo(2, ACTIVITY_TYPE_STANDARD);
+
+ TransitionInfo startDragTransition =
+ new TransitionInfoBuilder(TRANSIT_DESKTOP_MODE_START_DRAG_TO_DESKTOP)
+ .addChange(TRANSIT_TO_FRONT, homeTask)
+ .addChange(TRANSIT_TO_BACK, bubbleTask)
+ .build();
+
+ // Start drag to desktop which brings home to front
+ mHomeTransitionObserver.onTransitionReady(new Binder(), startDragTransition,
+ MockTransactionPool.create(), MockTransactionPool.create());
+ // Does not notify home visibility yet
+ verify(mListener, never()).onHomeVisibilityChanged(anyBoolean());
+
+ TransitionInfo convertToBubbleTransition =
+ new TransitionInfoBuilder(TRANSIT_CONVERT_TO_BUBBLE)
+ .addChange(TRANSIT_TO_FRONT, bubbleTask)
+ .build();
+
+ // Convert to bubble. Transition does not include changes for home task
+ mHomeTransitionObserver.onTransitionReady(new Binder(), convertToBubbleTransition,
+ MockTransactionPool.create(), MockTransactionPool.create());
+
+ // Notifies home visibility change that was pending from the start of drag
+ verify(mListener).onHomeVisibilityChanged(true);
+ }
+
+ @Test
+ @EnableFlags({Flags.FLAG_ENABLE_BUBBLE_TO_FULLSCREEN, Flags.FLAG_ENABLE_CREATE_ANY_BUBBLE})
+ public void testDragTaskToBubbleOverOtherTask_notifiesHomeIsNotVisible()
+ throws RemoteException {
+ ActivityManager.RunningTaskInfo homeTask = createTaskInfo(1, ACTIVITY_TYPE_HOME);
+ ActivityManager.RunningTaskInfo bubbleTask = createTaskInfo(2, ACTIVITY_TYPE_STANDARD);
+ ActivityManager.RunningTaskInfo otherTask = createTaskInfo(3, ACTIVITY_TYPE_STANDARD);
+
+ TransitionInfo startDragTransition =
+ new TransitionInfoBuilder(TRANSIT_DESKTOP_MODE_START_DRAG_TO_DESKTOP)
+ .addChange(TRANSIT_TO_FRONT, homeTask)
+ .addChange(TRANSIT_TO_BACK, bubbleTask)
+ .build();
+
+ // Start drag to desktop which brings home to front
+ mHomeTransitionObserver.onTransitionReady(new Binder(), startDragTransition,
+ MockTransactionPool.create(), MockTransactionPool.create());
+ // Does not notify home visibility yet
+ verify(mListener, never()).onHomeVisibilityChanged(anyBoolean());
+
+ TransitionInfo convertToBubbleTransition =
+ new TransitionInfoBuilder(TRANSIT_CONVERT_TO_BUBBLE)
+ .addChange(TRANSIT_TO_FRONT, bubbleTask)
+ .addChange(TRANSIT_TO_FRONT, otherTask)
+ .addChange(TRANSIT_TO_BACK, homeTask)
+ .build();
+
+ // Convert to bubble. Transition includes home task to back which updates home visibility
+ mHomeTransitionObserver.onTransitionReady(new Binder(), convertToBubbleTransition,
+ MockTransactionPool.create(), MockTransactionPool.create());
+
+ // Notifies home visibility change due to home moving to back in the second transition
+ verify(mListener).onHomeVisibilityChanged(false);
+ }
+
+ @Test
public void testHomeActivityWithBackGestureNotifiesHomeIsVisibleAfterClose()
throws RemoteException {
TransitionInfo info = mock(TransitionInfo.class);
@@ -227,4 +301,14 @@ public class HomeTransitionObserverTest extends ShellTestCase {
when(change.getMode()).thenReturn(mode);
taskInfo.isRunning = isRunning;
}
+
+ private static ActivityManager.RunningTaskInfo createTaskInfo(int taskId, int activityType) {
+ ActivityManager.RunningTaskInfo taskInfo = new ActivityManager.RunningTaskInfo();
+ taskInfo.taskId = taskId;
+ taskInfo.topActivityType = activityType;
+ taskInfo.configuration.windowConfiguration.setActivityType(activityType);
+ taskInfo.token = mock(WindowContainerToken.class);
+ taskInfo.isRunning = true;
+ return taskInfo;
+ }
}
diff --git a/libs/hostgraphics/Fence.cpp b/libs/hostgraphics/Fence.cpp
index 4383bf02a00e..938a9384768d 100644
--- a/libs/hostgraphics/Fence.cpp
+++ b/libs/hostgraphics/Fence.cpp
@@ -18,6 +18,6 @@
namespace android {
-const sp<Fence> Fence::NO_FENCE = sp<Fence>(new Fence);
+const sp<Fence> Fence::NO_FENCE = sp<Fence>::make();
} // namespace android
diff --git a/libs/hostgraphics/include/gui/BufferItemConsumer.h b/libs/hostgraphics/include/gui/BufferItemConsumer.h
index c25941151800..5c96c82e061c 100644
--- a/libs/hostgraphics/include/gui/BufferItemConsumer.h
+++ b/libs/hostgraphics/include/gui/BufferItemConsumer.h
@@ -17,6 +17,8 @@
#ifndef ANDROID_GUI_BUFFERITEMCONSUMER_H
#define ANDROID_GUI_BUFFERITEMCONSUMER_H
+#include <com_android_graphics_libgui_flags.h>
+#include <gui/BufferQueue.h>
#include <gui/ConsumerBase.h>
#include <gui/IGraphicBufferConsumer.h>
#include <utils/RefBase.h>
@@ -26,9 +28,22 @@ namespace android {
class BufferItemConsumer : public ConsumerBase {
public:
BufferItemConsumer(const sp<IGraphicBufferConsumer>& consumer, uint64_t consumerUsage,
- int bufferCount, bool controlledByApp)
+ int bufferCount = -1, bool controlledByApp = false)
: mConsumer(consumer) {}
+#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
+ BufferItemConsumer(uint64_t consumerUsage, int bufferCount = -1,
+ bool controlledByApp = false, bool isConsumerSurfaceFlinger = false) {
+ sp<IGraphicBufferProducer> producer;
+ BufferQueue::createBufferQueue(&producer, &mConsumer);
+ mSurface = sp<Surface>::make(producer, controlledByApp);
+ }
+
+ status_t setConsumerIsProtected(bool isProtected) {
+ return OK;
+ }
+#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
+
status_t acquireBuffer(BufferItem* item, nsecs_t presentWhen, bool waitForFence = true) {
return mConsumer->acquireBuffer(item, presentWhen, 0);
}
@@ -71,8 +86,20 @@ public:
return OK;
}
+#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
+// Returns a Surface that can be used as the producer for this consumer.
+ sp<Surface> getSurface() const {
+ return mSurface;
+ }
+#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
+
private:
sp<IGraphicBufferConsumer> mConsumer;
+#if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
+ // This Surface wraps the IGraphicBufferConsumer created for this
+ // ConsumerBase.
+ sp<Surface> mSurface;
+#endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
};
} // namespace android
diff --git a/libs/hostgraphics/include/gui/Surface.h b/libs/hostgraphics/include/gui/Surface.h
index 2774f89cb54c..e268ce6ca769 100644
--- a/libs/hostgraphics/include/gui/Surface.h
+++ b/libs/hostgraphics/include/gui/Surface.h
@@ -34,6 +34,10 @@ public:
ANativeWindow::query = hook_query;
}
+ sp<IGraphicBufferProducer> getIGraphicBufferProducer() const {
+ return mBufferProducer;
+ }
+
static bool isValid(const sp<Surface>& surface) {
return surface != nullptr;
}
diff --git a/libs/hostgraphics/include/ui/Fence.h b/libs/hostgraphics/include/ui/Fence.h
index 187c3116f61c..3364b8aed605 100644
--- a/libs/hostgraphics/include/ui/Fence.h
+++ b/libs/hostgraphics/include/ui/Fence.h
@@ -60,6 +60,10 @@ public:
return 0;
}
+ int get() const {
+ return 0;
+ }
+
inline Status getStatus() {
// The sync_wait call underlying wait() has been measured to be
// significantly faster than the sync_fence_info call underlying
diff --git a/libs/hwui/Android.bp b/libs/hwui/Android.bp
index bb2a53bc04d6..38ac8ab7135e 100644
--- a/libs/hwui/Android.bp
+++ b/libs/hwui/Android.bp
@@ -233,6 +233,14 @@ java_sdk_library {
}
filegroup {
+ name: "framework-graphics-ravenwood-policies",
+ srcs: [
+ "framework-graphics-ravenwood-policies.txt",
+ ],
+ visibility: ["//frameworks/base/ravenwood"],
+}
+
+filegroup {
name: "framework-graphics-srcs",
srcs: [
"apex/java/**/*.java",
@@ -461,6 +469,10 @@ cc_defaults {
},
linux: {
srcs: ["platform/linux/utils/SharedLib.cpp"],
+ shared_libs: [
+ "libbinder",
+ "libbinder_ndk",
+ ],
},
darwin: {
srcs: ["platform/darwin/utils/SharedLib.cpp"],
diff --git a/libs/hwui/framework-graphics-ravenwood-policies.txt b/libs/hwui/framework-graphics-ravenwood-policies.txt
new file mode 100644
index 000000000000..7296225ccfe8
--- /dev/null
+++ b/libs/hwui/framework-graphics-ravenwood-policies.txt
@@ -0,0 +1 @@
+class android.graphics.ColorMatrix keepclass
diff --git a/libs/hwui/jni/Bitmap.cpp b/libs/hwui/jni/Bitmap.cpp
index cfde0b28c0d5..27d4ac7cef4b 100644
--- a/libs/hwui/jni/Bitmap.cpp
+++ b/libs/hwui/jni/Bitmap.cpp
@@ -613,7 +613,7 @@ static void Bitmap_setHasMipMap(JNIEnv* env, jobject, jlong bitmapHandle,
///////////////////////////////////////////////////////////////////////////////
// TODO: Move somewhere else
-#ifdef __ANDROID__ // Layoutlib does not support parcel
+#ifdef __linux__ // Only Linux support parcel
#define ON_ERROR_RETURN(X) \
if ((error = (X)) != STATUS_OK) return error
@@ -717,7 +717,7 @@ static binder_status_t writeBlob(AParcel* parcel, uint64_t bitmapId, const SkBit
#undef ON_ERROR_RETURN
-#endif // __ANDROID__ // Layoutlib does not support parcel
+#endif // __linux__ // Only Linux support parcel
// This is the maximum possible size because the SkColorSpace must be
// representable (and therefore serializable) using a matrix and numerical
@@ -733,7 +733,7 @@ static bool validateImageInfo(const SkImageInfo& info, int32_t rowBytes) {
}
static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
-#ifdef __ANDROID__ // Layoutlib does not support parcel
+#ifdef __linux__ // Only Linux support parcel
if (parcel == NULL) {
jniThrowNullPointerException(env, "parcel cannot be null");
return NULL;
@@ -836,14 +836,14 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
return createBitmap(env, nativeBitmap.release(), getPremulBitmapCreateFlags(isMutable), nullptr,
nullptr, density, sourceId);
#else
- jniThrowRuntimeException(env, "Cannot use parcels outside of Android");
+ jniThrowRuntimeException(env, "Cannot use parcels outside of Linux");
return NULL;
#endif
}
static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject, jlong bitmapHandle, jint density,
jobject parcel) {
-#ifdef __ANDROID__ // Layoutlib does not support parcel
+#ifdef __linux__ // Only Linux support parcel
if (parcel == NULL) {
ALOGD("------- writeToParcel null parcel\n");
return JNI_FALSE;
@@ -901,7 +901,7 @@ static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject, jlong bitmapHandle, j
}
return JNI_TRUE;
#else
- doThrowRE(env, "Cannot use parcels outside of Android");
+ doThrowRE(env, "Cannot use parcels outside of Linux");
return JNI_FALSE;
#endif
}
diff --git a/libs/hwui/jni/Region.cpp b/libs/hwui/jni/Region.cpp
index 1e064b820591..76986eeb079d 100644
--- a/libs/hwui/jni/Region.cpp
+++ b/libs/hwui/jni/Region.cpp
@@ -18,7 +18,7 @@
#include "SkPath.h"
#include "GraphicsJNI.h"
-#ifdef __ANDROID__ // Layoutlib does not support parcel
+#ifdef __linux__ // Only Linux support parcel
#include <android/binder_parcel.h>
#include <android/binder_parcel_jni.h>
#include <android/binder_parcel_utils.h>
@@ -202,7 +202,7 @@ static jstring Region_toString(JNIEnv* env, jobject clazz, jlong regionHandle) {
static jlong Region_createFromParcel(JNIEnv* env, jobject clazz, jobject parcel)
{
-#ifdef __ANDROID__ // Layoutlib does not support parcel
+#ifdef __linux__ // Only Linux support parcel
if (parcel == nullptr) {
return 0;
}
@@ -230,7 +230,7 @@ static jlong Region_createFromParcel(JNIEnv* env, jobject clazz, jobject parcel)
static jboolean Region_writeToParcel(JNIEnv* env, jobject clazz, jlong regionHandle, jobject parcel)
{
-#ifdef __ANDROID__ // Layoutlib does not support parcel
+#ifdef __linux__ // Only Linux support parcel
const SkRegion* region = reinterpret_cast<SkRegion*>(regionHandle);
if (parcel == nullptr) {
return JNI_FALSE;
diff --git a/libs/hwui/jni/ScopedParcel.cpp b/libs/hwui/jni/ScopedParcel.cpp
index 95e4e01d8df8..52cd988344b0 100644
--- a/libs/hwui/jni/ScopedParcel.cpp
+++ b/libs/hwui/jni/ScopedParcel.cpp
@@ -15,7 +15,7 @@
*/
#include "ScopedParcel.h"
-#ifdef __ANDROID__ // Layoutlib does not support parcel
+#ifdef __linux__ // Only Linux support parcel
using namespace android;
@@ -92,4 +92,4 @@ void ScopedParcel::writeData(const std::optional<sk_sp<SkData>>& optData) {
AParcel_writeByteArray(mParcel, nullptr, -1);
}
}
-#endif // __ANDROID__ // Layoutlib does not support parcel
+#endif // __linux__ // Only Linux support parcel
diff --git a/libs/hwui/jni/ScopedParcel.h b/libs/hwui/jni/ScopedParcel.h
index f2f138fda43c..f2b793a354d7 100644
--- a/libs/hwui/jni/ScopedParcel.h
+++ b/libs/hwui/jni/ScopedParcel.h
@@ -15,7 +15,7 @@
*/
#include "SkData.h"
-#ifdef __ANDROID__ // Layoutlib does not support parcel
+#ifdef __linux__ // Only Linux support parcel
#include <android-base/unique_fd.h>
#include <android/binder_parcel.h>
#include <android/binder_parcel_jni.h>
@@ -64,4 +64,4 @@ enum class BlobType : int32_t {
ASHMEM,
};
-#endif // __ANDROID__ // Layoutlib does not support parcel \ No newline at end of file
+#endif // __linux__ // Only Linux support parcel
diff --git a/libs/hwui/jni/graphics_jni_helpers.h b/libs/hwui/jni/graphics_jni_helpers.h
index 91db134af18f..ff26ec1771bd 100644
--- a/libs/hwui/jni/graphics_jni_helpers.h
+++ b/libs/hwui/jni/graphics_jni_helpers.h
@@ -21,6 +21,7 @@
#include <nativehelper/JNIPlatformHelp.h>
#include <nativehelper/scoped_local_ref.h>
#include <nativehelper/scoped_utf_chars.h>
+#include <nativehelper/scoped_primitive_array.h>
#include <string>
// Host targets (layoutlib) do not differentiate between regular and critical native methods,
diff --git a/media/java/android/media/AudioDeviceVolumeManager.java b/media/java/android/media/AudioDeviceVolumeManager.java
index 892a8612d74a..56d3df3b2555 100644
--- a/media/java/android/media/AudioDeviceVolumeManager.java
+++ b/media/java/android/media/AudioDeviceVolumeManager.java
@@ -16,6 +16,9 @@
package android.media;
+import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
+import static android.media.audio.Flags.FLAG_UNIFY_ABSOLUTE_VOLUME_MANAGEMENT;
+
import static com.android.media.flags.Flags.FLAG_ENABLE_AUDIO_INPUT_DEVICE_ROUTING_AND_VOLUME_CONTROL;
import android.Manifest;
@@ -91,6 +94,8 @@ public class AudioDeviceVolumeManager {
* @see #setDeviceAbsoluteVolumeBehavior(AudioDeviceAttributes, VolumeInfo, boolean, Executor,
* OnAudioDeviceVolumeChangedListener)
*/
+ @SystemApi(client = MODULE_LIBRARIES)
+ @FlaggedApi(FLAG_UNIFY_ABSOLUTE_VOLUME_MANAGEMENT)
public interface OnAudioDeviceVolumeChangedListener {
/**
* Called the device for the given audio device has changed.
@@ -203,6 +208,30 @@ public class AudioDeviceVolumeManager {
* volume updates to apply on that device
* @param device the audio device set to absolute volume mode
* @param volume the type of volume this device responds to
+ * @param executor the Executor used for receiving volume updates through the listener
+ * @param vclistener the callback for volume updates
+ */
+ @SystemApi(client = MODULE_LIBRARIES)
+ @RequiresPermission(anyOf = { android.Manifest.permission.MODIFY_AUDIO_ROUTING,
+ android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ android.Manifest.permission.BLUETOOTH_STACK})
+ @FlaggedApi(FLAG_UNIFY_ABSOLUTE_VOLUME_MANAGEMENT)
+ public void setDeviceAbsoluteVolumeBehavior(
+ @NonNull AudioDeviceAttributes device,
+ @NonNull VolumeInfo volume,
+ @NonNull @CallbackExecutor Executor executor,
+ @NonNull OnAudioDeviceVolumeChangedListener vclistener) {
+ setDeviceAbsoluteVolumeBehavior(device, volume, /*handlesVolumeAdjustment=*/false, executor,
+ vclistener);
+ }
+
+ /**
+ * @hide
+ * Configures a device to use absolute volume model, and registers a listener for receiving
+ * volume updates to apply on that device
+ * @param device the audio device set to absolute volume mode
+ * @param volume the type of volume this device responds to
* @param handlesVolumeAdjustment whether the controller handles volume adjustments separately
* from volume changes. If true, adjustments from {@link AudioManager#adjustStreamVolume}
* will be sent via {@link OnAudioDeviceVolumeChangedListener#onAudioDeviceVolumeAdjusted}.
@@ -210,7 +239,7 @@ public class AudioDeviceVolumeManager {
* @param vclistener the callback for volume updates
*/
@RequiresPermission(anyOf = { android.Manifest.permission.MODIFY_AUDIO_ROUTING,
- android.Manifest.permission.BLUETOOTH_PRIVILEGED })
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED})
public void setDeviceAbsoluteVolumeBehavior(
@NonNull AudioDeviceAttributes device,
@NonNull VolumeInfo volume,
@@ -229,6 +258,30 @@ public class AudioDeviceVolumeManager {
* registers a listener for receiving volume updates to apply on that device
* @param device the audio device set to absolute multi-volume mode
* @param volumes the list of volumes the given device responds to
+ * @param executor the Executor used for receiving volume updates through the listener
+ * @param vclistener the callback for volume updates
+ */
+ @SystemApi(client = MODULE_LIBRARIES)
+ @RequiresPermission(anyOf = { android.Manifest.permission.MODIFY_AUDIO_ROUTING,
+ android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED,
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED,
+ android.Manifest.permission.BLUETOOTH_STACK})
+ @FlaggedApi(FLAG_UNIFY_ABSOLUTE_VOLUME_MANAGEMENT)
+ public void setDeviceAbsoluteMultiVolumeBehavior(
+ @NonNull AudioDeviceAttributes device,
+ @NonNull List<VolumeInfo> volumes,
+ @NonNull @CallbackExecutor Executor executor,
+ @NonNull OnAudioDeviceVolumeChangedListener vclistener) {
+ setDeviceAbsoluteMultiVolumeBehavior(device, volumes, /*handlesVolumeAdjustment=*/false,
+ executor, vclistener);
+ }
+
+ /**
+ * @hide
+ * Configures a device to use absolute volume model applied to different volume types, and
+ * registers a listener for receiving volume updates to apply on that device
+ * @param device the audio device set to absolute multi-volume mode
+ * @param volumes the list of volumes the given device responds to
* @param handlesVolumeAdjustment whether the controller handles volume adjustments separately
* from volume changes. If true, adjustments from {@link AudioManager#adjustStreamVolume}
* will be sent via {@link OnAudioDeviceVolumeChangedListener#onAudioDeviceVolumeAdjusted}.
@@ -236,7 +289,7 @@ public class AudioDeviceVolumeManager {
* @param vclistener the callback for volume updates
*/
@RequiresPermission(anyOf = { android.Manifest.permission.MODIFY_AUDIO_ROUTING,
- android.Manifest.permission.BLUETOOTH_PRIVILEGED })
+ android.Manifest.permission.BLUETOOTH_PRIVILEGED})
public void setDeviceAbsoluteMultiVolumeBehavior(
@NonNull AudioDeviceAttributes device,
@NonNull List<VolumeInfo> volumes,
diff --git a/packages/InputDevices/res/values-af/strings.xml b/packages/InputDevices/res/values-af/strings.xml
index 273cfa003c08..0fc0c0505ad4 100644
--- a/packages/InputDevices/res/values-af/strings.xml
+++ b/packages/InputDevices/res/values-af/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serwies (Cyrillies)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegryns (Cyrillies)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Roemeens"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Engels (Indië)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-am/strings.xml b/packages/InputDevices/res/values-am/strings.xml
index 859325387dff..722d949f7d8f 100644
--- a/packages/InputDevices/res/values-am/strings.xml
+++ b/packages/InputDevices/res/values-am/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"ሰርቢያኛ (ሲሪሊክኛ)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"ሞንቴኔግሮኛ (ሲሪሊክኛ)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"ሮማኒያኛ"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"እንግሊዝኛ (ሕንድ)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-as/strings.xml b/packages/InputDevices/res/values-as/strings.xml
index e6540e486055..acff29d4057f 100644
--- a/packages/InputDevices/res/values-as/strings.xml
+++ b/packages/InputDevices/res/values-as/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"ছাৰ্বিয়ান (চিৰিলিক)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"মণ্টেনেগ্ৰিণ (চিৰিলিক)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"ৰোমানিয়ান"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"ইংৰাজী (ভাৰত)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-az/strings.xml b/packages/InputDevices/res/values-az/strings.xml
index aa93a92b994e..c0fe764ac161 100644
--- a/packages/InputDevices/res/values-az/strings.xml
+++ b/packages/InputDevices/res/values-az/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serb dili (Kiril)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Monteneqro dili (Kiril)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Rumın dili"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"İngilis dili (Hindistan)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-bg/strings.xml b/packages/InputDevices/res/values-bg/strings.xml
index ceb7e376280f..78b93dad9635 100644
--- a/packages/InputDevices/res/values-bg/strings.xml
+++ b/packages/InputDevices/res/values-bg/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"сръбски (кирилица)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"черногорски (кирилица)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"румънски"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"английски (Индия)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-bn/strings.xml b/packages/InputDevices/res/values-bn/strings.xml
index 369a8035dab8..da529e1fffad 100644
--- a/packages/InputDevices/res/values-bn/strings.xml
+++ b/packages/InputDevices/res/values-bn/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"সার্বিয়ান (সিরিলিক)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"মন্টেনেগ্রিন (সিরিলিক)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"রোমানিয়ান"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"ইংরাজি (ভারত)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ca/strings.xml b/packages/InputDevices/res/values-ca/strings.xml
index bbf39467284f..8b05b49b995c 100644
--- a/packages/InputDevices/res/values-ca/strings.xml
+++ b/packages/InputDevices/res/values-ca/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbi (ciríl·lic)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegrí (ciríl·lic)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Romanès"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Anglès (Índia)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-da/strings.xml b/packages/InputDevices/res/values-da/strings.xml
index 00a2a62091af..a9925add45f1 100644
--- a/packages/InputDevices/res/values-da/strings.xml
+++ b/packages/InputDevices/res/values-da/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbisk (kyrillisk)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegrinsk (kyrillisk)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Rumænsk"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Engelsk (Indien)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-de/strings.xml b/packages/InputDevices/res/values-de/strings.xml
index 717c5975a75f..9bd23eba8de3 100644
--- a/packages/InputDevices/res/values-de/strings.xml
+++ b/packages/InputDevices/res/values-de/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbisch (kyrillisch)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegrinisch (kyrillisch)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Rumänisch"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Englisch (Indien)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-el/strings.xml b/packages/InputDevices/res/values-el/strings.xml
index 02b7f1f8a9fd..cf49339b7ef2 100644
--- a/packages/InputDevices/res/values-el/strings.xml
+++ b/packages/InputDevices/res/values-el/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Σερβικά (Κυριλλικά)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Μαυροβουνιακά (Κυριλλικά)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Ρουμανικά"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Αγγλικά (Ινδίας)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-en-rAU/strings.xml b/packages/InputDevices/res/values-en-rAU/strings.xml
index 1cdcc552d5ee..3b8c50da6f11 100644
--- a/packages/InputDevices/res/values-en-rAU/strings.xml
+++ b/packages/InputDevices/res/values-en-rAU/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbian (Cyrillic)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegrin (Cyrillic)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Romanian"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"English (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-en-rGB/strings.xml b/packages/InputDevices/res/values-en-rGB/strings.xml
index 1cdcc552d5ee..3b8c50da6f11 100644
--- a/packages/InputDevices/res/values-en-rGB/strings.xml
+++ b/packages/InputDevices/res/values-en-rGB/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbian (Cyrillic)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegrin (Cyrillic)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Romanian"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"English (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-en-rIN/strings.xml b/packages/InputDevices/res/values-en-rIN/strings.xml
index 1cdcc552d5ee..3b8c50da6f11 100644
--- a/packages/InputDevices/res/values-en-rIN/strings.xml
+++ b/packages/InputDevices/res/values-en-rIN/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbian (Cyrillic)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegrin (Cyrillic)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Romanian"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"English (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-es-rUS/strings.xml b/packages/InputDevices/res/values-es-rUS/strings.xml
index edd76575215e..48ccb8de8d23 100644
--- a/packages/InputDevices/res/values-es-rUS/strings.xml
+++ b/packages/InputDevices/res/values-es-rUS/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbio (cirílico)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegrino (cirílico)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Rumano"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Inglés (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-es/strings.xml b/packages/InputDevices/res/values-es/strings.xml
index b522845ebacb..ef7362515f9a 100644
--- a/packages/InputDevices/res/values-es/strings.xml
+++ b/packages/InputDevices/res/values-es/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbio (cirílico)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegrino (cirílico)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Rumano"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Inglés (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-et/strings.xml b/packages/InputDevices/res/values-et/strings.xml
index 82670ddd339e..22891976a02e 100644
--- a/packages/InputDevices/res/values-et/strings.xml
+++ b/packages/InputDevices/res/values-et/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"serbia (kirillitsa)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"montenegro (kirillitsa)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"rumeenia"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"inglise (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-eu/strings.xml b/packages/InputDevices/res/values-eu/strings.xml
index b777b8c21ad9..0fe3b5756b30 100644
--- a/packages/InputDevices/res/values-eu/strings.xml
+++ b/packages/InputDevices/res/values-eu/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbiarra (zirilikoa)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegroarra (zirilikoa)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Errumaniera"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Ingelesa (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-fa/strings.xml b/packages/InputDevices/res/values-fa/strings.xml
index 9ec7a34193bc..16b9ad4c1880 100644
--- a/packages/InputDevices/res/values-fa/strings.xml
+++ b/packages/InputDevices/res/values-fa/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"صربی (سیریلیک)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"مونته‌نگرویی (سیریلیک)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"رومانیایی"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"انگلیسی (هند)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-fi/strings.xml b/packages/InputDevices/res/values-fi/strings.xml
index 6825ea9396bf..0d8bd06eeb0d 100644
--- a/packages/InputDevices/res/values-fi/strings.xml
+++ b/packages/InputDevices/res/values-fi/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"serbia (kyrillinen)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"montenegro (kyrillinen)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"romania"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"englanti (Intia)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-fr/strings.xml b/packages/InputDevices/res/values-fr/strings.xml
index fb4d1442d71f..bdb0d0285502 100644
--- a/packages/InputDevices/res/values-fr/strings.xml
+++ b/packages/InputDevices/res/values-fr/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbe (cyrillique)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Monténégrin (cyrillique)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Roumain"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Anglais (Inde)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-gl/strings.xml b/packages/InputDevices/res/values-gl/strings.xml
index 925adf9466f9..c62abba0f1d0 100644
--- a/packages/InputDevices/res/values-gl/strings.xml
+++ b/packages/InputDevices/res/values-gl/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbio (cirílico)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegrino (cirílico)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Romanés"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Inglés (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-hi/strings.xml b/packages/InputDevices/res/values-hi/strings.xml
index 175197905af1..bf3bd9a36437 100644
--- a/packages/InputDevices/res/values-hi/strings.xml
+++ b/packages/InputDevices/res/values-hi/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"सर्बियन (सिरिलिक)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"मोंटेनेग्रिन (सिरिलिक)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"रोमेनियन"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"अंग्रेज़ी (भारत)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-hu/strings.xml b/packages/InputDevices/res/values-hu/strings.xml
index c83ba841653b..6b4259a35811 100644
--- a/packages/InputDevices/res/values-hu/strings.xml
+++ b/packages/InputDevices/res/values-hu/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"szerb (cirill betűs)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"montenegrói (cirill betűs)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"román"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"angol (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-hy/strings.xml b/packages/InputDevices/res/values-hy/strings.xml
index 718f8d1fede1..43153fab95eb 100644
--- a/packages/InputDevices/res/values-hy/strings.xml
+++ b/packages/InputDevices/res/values-hy/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"սերբերեն (կյուրեղատառ)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"չեռնոգորերեն (կյուրեղատառ)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Ռումիներեն"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"անգլերեն (Հնդկաստան)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-in/strings.xml b/packages/InputDevices/res/values-in/strings.xml
index ba2e5bd38b9a..1aa1b2bb1e8a 100644
--- a/packages/InputDevices/res/values-in/strings.xml
+++ b/packages/InputDevices/res/values-in/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbia (Sirilik)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegro (Sirilik)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Rumania"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Inggris (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-is/strings.xml b/packages/InputDevices/res/values-is/strings.xml
index 842119d0ee54..9547882f65ba 100644
--- a/packages/InputDevices/res/values-is/strings.xml
+++ b/packages/InputDevices/res/values-is/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbneska (kyrillískt)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Svartfellska (kyrillískt)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"rúmenska"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Enska (Indland)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-it/strings.xml b/packages/InputDevices/res/values-it/strings.xml
index f7f76e0a64be..090397de169c 100644
--- a/packages/InputDevices/res/values-it/strings.xml
+++ b/packages/InputDevices/res/values-it/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbo (cirillico)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegrino (cirillico)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Rumeno"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Inglese (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-iw/strings.xml b/packages/InputDevices/res/values-iw/strings.xml
index 0df5d20e351b..b0faa6ef0fa2 100644
--- a/packages/InputDevices/res/values-iw/strings.xml
+++ b/packages/InputDevices/res/values-iw/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"סרבית (אותיות קיריליות)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"מונטנגרית (אותיות קיריליות)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"רומנית"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"אנגלית (הודו)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-kk/strings.xml b/packages/InputDevices/res/values-kk/strings.xml
index 60ad838930a7..05f9243e89a6 100644
--- a/packages/InputDevices/res/values-kk/strings.xml
+++ b/packages/InputDevices/res/values-kk/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Сербия (кириллица)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Черногория (кириллица)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Румын"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Ағылшын (Үндістан)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-km/strings.xml b/packages/InputDevices/res/values-km/strings.xml
index 936c925ab89b..03a3a439d333 100644
--- a/packages/InputDevices/res/values-km/strings.xml
+++ b/packages/InputDevices/res/values-km/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"សែប៊ី (ស៊ីរីលីក)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"ម៉ុងតេណេហ្គ្រោ (ស៊ីរីលីក)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"រ៉ូម៉ានី"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"អង់គ្លេស (ឥណ្ឌា)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-kn/strings.xml b/packages/InputDevices/res/values-kn/strings.xml
index 24539519f155..f4f4fa4aeaf7 100644
--- a/packages/InputDevices/res/values-kn/strings.xml
+++ b/packages/InputDevices/res/values-kn/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"ಸೆರ್ಬಿಯನ್ (ಸಿರಿಲಿಕ್)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"ಮೊಂಟೆನೆಗ್ರಿನ್ (ಸಿರಿಲಿಕ್)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"ರೊಮೇನಿಯನ್"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"ಇಂಗ್ಲಿಷ್ (ಭಾರತ)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ky/strings.xml b/packages/InputDevices/res/values-ky/strings.xml
index f6d018ec7f01..2222900b4c3b 100644
--- a/packages/InputDevices/res/values-ky/strings.xml
+++ b/packages/InputDevices/res/values-ky/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Сербче (Кирилл)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Черногориялыкча (Кирилл)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Румынча"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Англисче (Индия)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-lo/strings.xml b/packages/InputDevices/res/values-lo/strings.xml
index 61f8f71cf073..44380b0ba760 100644
--- a/packages/InputDevices/res/values-lo/strings.xml
+++ b/packages/InputDevices/res/values-lo/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"ເຊີບຽນ (ຊີຣິວລິກ)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"ມອນເທເນກຣິນ (ຊີຣິວລິກ)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"ໂຣມານຽນ"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"ອັງກິດ (ອິນເດຍ)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-lv/strings.xml b/packages/InputDevices/res/values-lv/strings.xml
index cc2c94c1811f..3a55b6af7037 100644
--- a/packages/InputDevices/res/values-lv/strings.xml
+++ b/packages/InputDevices/res/values-lv/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbu (kirilica)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Melnkalniešu (kirilica)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Rumāņu"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Angļu (Indija)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-mk/strings.xml b/packages/InputDevices/res/values-mk/strings.xml
index 60981d65a484..351ac947c491 100644
--- a/packages/InputDevices/res/values-mk/strings.xml
+++ b/packages/InputDevices/res/values-mk/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"српски (кирилица)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"црногорски (кирилица)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"романски"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"англиски (Индија)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ml/strings.xml b/packages/InputDevices/res/values-ml/strings.xml
index 8064c74c7b61..ed6cb8b70c96 100644
--- a/packages/InputDevices/res/values-ml/strings.xml
+++ b/packages/InputDevices/res/values-ml/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"സെർബിയൻ (സിറിലിക്)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"മോണ്ടിനെഗ്രിൻ (സിറിലിക്)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"റൊമേനിയൻ"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"ഇംഗ്ലീഷ് (ഇന്ത്യ)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-mn/strings.xml b/packages/InputDevices/res/values-mn/strings.xml
index 547ce49fc658..e77551e1a123 100644
--- a/packages/InputDevices/res/values-mn/strings.xml
+++ b/packages/InputDevices/res/values-mn/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Серби (кирилл)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Монтенегро (кирилл)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Румын"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Англи хэл (Энэтхэг)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-mr/strings.xml b/packages/InputDevices/res/values-mr/strings.xml
index 25bdfab5a584..9483a47aef33 100644
--- a/packages/InputDevices/res/values-mr/strings.xml
+++ b/packages/InputDevices/res/values-mr/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"सर्बियन (सिरिलिक)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"मॉन्टेनेग्रिन (सिरिलिक)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"रोमानियन"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"इंग्रजी (भारत)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-my/strings.xml b/packages/InputDevices/res/values-my/strings.xml
index 4ef5aab9bec6..1325470d68c6 100644
--- a/packages/InputDevices/res/values-my/strings.xml
+++ b/packages/InputDevices/res/values-my/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"ဆားဘီးယား (စီရီလစ်)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"မွန်တီနီဂရင်း (စီရီလစ်)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"ရိုမေးနီးယား"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"အင်္ဂလိပ် (အိန္ဒိယ)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-nb/strings.xml b/packages/InputDevices/res/values-nb/strings.xml
index 837e24645e63..e6c082607b62 100644
--- a/packages/InputDevices/res/values-nb/strings.xml
+++ b/packages/InputDevices/res/values-nb/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbisk (kyrillisk)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegrisk (kyrillisk)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Rumensk"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Engelsk (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ne/strings.xml b/packages/InputDevices/res/values-ne/strings.xml
index 0ab1ea6db71f..bc2d0bfa2746 100644
--- a/packages/InputDevices/res/values-ne/strings.xml
+++ b/packages/InputDevices/res/values-ne/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"सर्बियाली (सिरिलिक)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"मोन्टेनिग्रिन (सिरिलिक)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"रोमानियाली"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"अङ्ग्रेजी (भारत)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-or/strings.xml b/packages/InputDevices/res/values-or/strings.xml
index 97f9088ceb33..7606b6fc26d9 100644
--- a/packages/InputDevices/res/values-or/strings.xml
+++ b/packages/InputDevices/res/values-or/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"ସର୍ବିଆନ (ସିରିଲିକ)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"ମଣ୍ଟେନେଗ୍ରିନ (ସିରିଲିକ)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"ରୋମାନିଆନ"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"ଇଂରାଜୀ (ଭାରତ)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-pl/strings.xml b/packages/InputDevices/res/values-pl/strings.xml
index 0fd962b46e9b..7f4b58fa9d1a 100644
--- a/packages/InputDevices/res/values-pl/strings.xml
+++ b/packages/InputDevices/res/values-pl/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"serbski (cyrylica)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"czarnogórski (cyrylica)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"rumuński"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Angielski (Indie)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ro/strings.xml b/packages/InputDevices/res/values-ro/strings.xml
index 169378de0e88..a416a482da8c 100644
--- a/packages/InputDevices/res/values-ro/strings.xml
+++ b/packages/InputDevices/res/values-ro/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Sârbă (caractere chirilice)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Muntenegreană (Chirilică)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Română"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Engleză (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-si/strings.xml b/packages/InputDevices/res/values-si/strings.xml
index ba27136317d9..2d5ffc3a5a25 100644
--- a/packages/InputDevices/res/values-si/strings.xml
+++ b/packages/InputDevices/res/values-si/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"සර්බියානු (සිරිලික්)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"මොන්ටෙනේග්‍රීන් (සිරිලික්)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"රුමේනියානු"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"ඉංග්‍රීසි (ඉන්දියාව)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-sq/strings.xml b/packages/InputDevices/res/values-sq/strings.xml
index c77de92f9cdf..97ab5f9ac3f7 100644
--- a/packages/InputDevices/res/values-sq/strings.xml
+++ b/packages/InputDevices/res/values-sq/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbisht (cirilike)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Malazisht (cirilike)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Rumanisht"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Anglisht (Indi)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-sw/strings.xml b/packages/InputDevices/res/values-sw/strings.xml
index d9ac91f860f1..fd8b84577dd8 100644
--- a/packages/InputDevices/res/values-sw/strings.xml
+++ b/packages/InputDevices/res/values-sw/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Kiserbia (Kisiriliki)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Kimontenegri (Kisiriliki)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Kiromania"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Kiingereza (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ta/strings.xml b/packages/InputDevices/res/values-ta/strings.xml
index fc91d696f575..0bf41fe7eded 100644
--- a/packages/InputDevices/res/values-ta/strings.xml
+++ b/packages/InputDevices/res/values-ta/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"செர்பியன் (சிரிலிக்)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"மாண்டினெக்ரன் (சிரிலிக்)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"ரோமானியன்"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"ஆங்கிலம் (இந்தியா)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-tl/strings.xml b/packages/InputDevices/res/values-tl/strings.xml
index ea815d5cbd8d..270331d4776c 100644
--- a/packages/InputDevices/res/values-tl/strings.xml
+++ b/packages/InputDevices/res/values-tl/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbian (Cyrillic)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegrin (Cyrillic)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Romanian"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"English (India)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-tr/strings.xml b/packages/InputDevices/res/values-tr/strings.xml
index 3a40c84c71d3..1d1d4e1e73bd 100644
--- a/packages/InputDevices/res/values-tr/strings.xml
+++ b/packages/InputDevices/res/values-tr/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Sırpça (Kiril)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Karadağca (Kiril)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Rumence"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"İngilizce (Hindistan)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-uk/strings.xml b/packages/InputDevices/res/values-uk/strings.xml
index 0e0d562e0b73..70f731d3be81 100644
--- a/packages/InputDevices/res/values-uk/strings.xml
+++ b/packages/InputDevices/res/values-uk/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Сербська (кирилиця)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Чорногорська (кирилиця)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Румунська"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Англійська (Індія)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ur/strings.xml b/packages/InputDevices/res/values-ur/strings.xml
index 44721b8eb7ac..07e38357d01d 100644
--- a/packages/InputDevices/res/values-ur/strings.xml
+++ b/packages/InputDevices/res/values-ur/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"سربیائی (سیریلک)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"مونٹے نیگریائی (سیریلک)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"رومانیائی"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"انگریزی (ہندوستان)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-uz/strings.xml b/packages/InputDevices/res/values-uz/strings.xml
index 776c1c71a256..b44820a5ef74 100644
--- a/packages/InputDevices/res/values-uz/strings.xml
+++ b/packages/InputDevices/res/values-uz/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serb (kirill)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Chernogor (kirill)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Rumin"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Ingliz (Hindiston)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-vi/strings.xml b/packages/InputDevices/res/values-vi/strings.xml
index 1fcba4269748..3f9de673135f 100644
--- a/packages/InputDevices/res/values-vi/strings.xml
+++ b/packages/InputDevices/res/values-vi/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Tiếng Serbia (Chữ Kirin)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Tiếng Montenegro (Chữ Kirin)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"Tiếng Romania"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"Tiếng Anh (Ấn Độ)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-zh-rCN/strings.xml b/packages/InputDevices/res/values-zh-rCN/strings.xml
index cb7f6cb895dc..bf37dc5b8ab6 100644
--- a/packages/InputDevices/res/values-zh-rCN/strings.xml
+++ b/packages/InputDevices/res/values-zh-rCN/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"塞尔维亚语(西里尔字母)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"黑山语(西里尔字母)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"罗马尼亚语"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"英语(印度)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-zh-rHK/strings.xml b/packages/InputDevices/res/values-zh-rHK/strings.xml
index c718760a618e..c30c9723f8fa 100644
--- a/packages/InputDevices/res/values-zh-rHK/strings.xml
+++ b/packages/InputDevices/res/values-zh-rHK/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"塞爾維亞文 (西里爾字母)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"蒙特內哥羅文 (西里爾字母)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"羅馬尼亞文"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"英文 (印度)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-zh-rTW/strings.xml b/packages/InputDevices/res/values-zh-rTW/strings.xml
index 68cf9b0e6b20..b840b1c50211 100644
--- a/packages/InputDevices/res/values-zh-rTW/strings.xml
+++ b/packages/InputDevices/res/values-zh-rTW/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"塞爾維亞文 (西里爾字母)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"蒙特內哥羅文 (西里爾字母)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"羅馬尼亞文"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"英文 (印度)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-zu/strings.xml b/packages/InputDevices/res/values-zu/strings.xml
index 4ae9e47fdf91..bc79dbd5e898 100644
--- a/packages/InputDevices/res/values-zu/strings.xml
+++ b/packages/InputDevices/res/values-zu/strings.xml
@@ -57,6 +57,5 @@
<string name="keyboard_layout_serbian_cyrillic" msgid="7013541044323542196">"Serbian (Cyrillic)"</string>
<string name="keyboard_layout_montenegrin_cyrillic" msgid="2391253952894077421">"Montenegrin (Cyrillic)"</string>
<string name="keyboard_layout_romanian" msgid="8698989892731726903">"IsiRomanian"</string>
- <!-- no translation found for keyboard_layout_english_india (7962353311188603367) -->
- <skip />
+ <string name="keyboard_layout_english_india" msgid="7962353311188603367">"IsiNgisi (India)"</string>
</resources>
diff --git a/packages/SettingsLib/ActionButtonsPreference/res/layout-v35/settingslib_expressive_action_buttons.xml b/packages/SettingsLib/ActionButtonsPreference/res/layout-v36/settingslib_expressive_action_buttons.xml
index 3e73ebd4880e..3e73ebd4880e 100644
--- a/packages/SettingsLib/ActionButtonsPreference/res/layout-v35/settingslib_expressive_action_buttons.xml
+++ b/packages/SettingsLib/ActionButtonsPreference/res/layout-v36/settingslib_expressive_action_buttons.xml
diff --git a/packages/SettingsLib/ActionButtonsPreference/res/values-v35/styles_expressive.xml b/packages/SettingsLib/ActionButtonsPreference/res/values-v36/styles_expressive.xml
index 267c9f65e104..267c9f65e104 100644
--- a/packages/SettingsLib/ActionButtonsPreference/res/values-v35/styles_expressive.xml
+++ b/packages/SettingsLib/ActionButtonsPreference/res/values-v36/styles_expressive.xml
diff --git a/packages/SettingsLib/BannerMessagePreference/res/drawable-v35/settingslib_expressive_card_background.xml b/packages/SettingsLib/BannerMessagePreference/res/drawable-v36/settingslib_expressive_card_background.xml
index a677a66f86e7..a677a66f86e7 100644
--- a/packages/SettingsLib/BannerMessagePreference/res/drawable-v35/settingslib_expressive_card_background.xml
+++ b/packages/SettingsLib/BannerMessagePreference/res/drawable-v36/settingslib_expressive_card_background.xml
diff --git a/packages/SettingsLib/BannerMessagePreference/res/drawable-v35/settingslib_resolved_banner_avd.xml b/packages/SettingsLib/BannerMessagePreference/res/drawable-v36/settingslib_resolved_banner_avd.xml
index c999de7d99ea..c999de7d99ea 100644
--- a/packages/SettingsLib/BannerMessagePreference/res/drawable-v35/settingslib_resolved_banner_avd.xml
+++ b/packages/SettingsLib/BannerMessagePreference/res/drawable-v36/settingslib_resolved_banner_avd.xml
diff --git a/packages/SettingsLib/BannerMessagePreference/res/layout-v35/settingslib_expressive_banner_message.xml b/packages/SettingsLib/BannerMessagePreference/res/layout-v36/settingslib_expressive_banner_message.xml
index c448a2d434f8..c448a2d434f8 100644
--- a/packages/SettingsLib/BannerMessagePreference/res/layout-v35/settingslib_expressive_banner_message.xml
+++ b/packages/SettingsLib/BannerMessagePreference/res/layout-v36/settingslib_expressive_banner_message.xml
diff --git a/packages/SettingsLib/BannerMessagePreference/res/values-v35/styles_expressive.xml b/packages/SettingsLib/BannerMessagePreference/res/values-v36/styles_expressive.xml
index 09e07ccef683..09e07ccef683 100644
--- a/packages/SettingsLib/BannerMessagePreference/res/values-v35/styles_expressive.xml
+++ b/packages/SettingsLib/BannerMessagePreference/res/values-v36/styles_expressive.xml
diff --git a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_filled.xml b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_filled.xml
index ff22b2e7f86f..ff22b2e7f86f 100644
--- a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_filled.xml
+++ b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_filled.xml
diff --git a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_filled_extra.xml b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_filled_extra.xml
index d878ba0d310b..d878ba0d310b 100644
--- a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_filled_extra.xml
+++ b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_filled_extra.xml
diff --git a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_filled_large.xml b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_filled_large.xml
index 8f0a158c55eb..8f0a158c55eb 100644
--- a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_filled_large.xml
+++ b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_filled_large.xml
diff --git a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_outline.xml b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_outline.xml
index 0c8996063e9f..0c8996063e9f 100644
--- a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_outline.xml
+++ b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_outline.xml
diff --git a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_outline_extra.xml b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_outline_extra.xml
index 41d8490feeb3..41d8490feeb3 100644
--- a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_outline_extra.xml
+++ b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_outline_extra.xml
diff --git a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_outline_large.xml b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_outline_large.xml
index 958552064c98..958552064c98 100644
--- a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_outline_large.xml
+++ b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_outline_large.xml
diff --git a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_tonal.xml b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_tonal.xml
index 03ca1f0a1033..03ca1f0a1033 100644
--- a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_tonal.xml
+++ b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_tonal.xml
diff --git a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_tonal_extra.xml b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_tonal_extra.xml
index 030ee66fef3f..030ee66fef3f 100644
--- a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_tonal_extra.xml
+++ b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_tonal_extra.xml
diff --git a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_tonal_large.xml b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_tonal_large.xml
index 5c16723f7a63..5c16723f7a63 100644
--- a/packages/SettingsLib/ButtonPreference/res/layout-v35/settingslib_expressive_button_tonal_large.xml
+++ b/packages/SettingsLib/ButtonPreference/res/layout-v36/settingslib_expressive_button_tonal_large.xml
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/drawable-v35/settingslib_expressive_icon_back.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/drawable-v36/settingslib_expressive_icon_back.xml
index 9986a60250fe..9986a60250fe 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/drawable-v35/settingslib_expressive_icon_back.xml
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/drawable-v36/settingslib_expressive_icon_back.xml
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v35/settingslib_expressive_collapsing_toolbar_base_layout.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_base_layout.xml
index b881c57e2f53..b881c57e2f53 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v35/settingslib_expressive_collapsing_toolbar_base_layout.xml
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_base_layout.xml
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v35/settingslib_expressive_collapsing_toolbar_content_layout.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml
index 6221659388d1..6221659388d1 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v35/settingslib_expressive_collapsing_toolbar_content_layout.xml
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-night-v35/themes.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-night-v36/themes.xml
index fadcf7ba8699..fadcf7ba8699 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-night-v35/themes.xml
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-night-v36/themes.xml
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/styles.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/styles.xml
index 0f71a788e8c6..0f71a788e8c6 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/styles.xml
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/styles.xml
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/styles_expressive.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/styles_expressive.xml
index 37a78101cc4e..37a78101cc4e 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/styles_expressive.xml
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/styles_expressive.xml
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/themes.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/themes.xml
index 7c9d1a47b7ef..7c9d1a47b7ef 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/themes.xml
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/themes.xml
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/themes_expressive.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/themes_expressive.xml
index ca1904a15b2f..ca1904a15b2f 100644
--- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/themes_expressive.xml
+++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v36/themes_expressive.xml
diff --git a/packages/SettingsLib/MainSwitchPreference/res/color-night-v35/settingslib_main_switch_text_color.xml b/packages/SettingsLib/MainSwitchPreference/res/color-night-v36/settingslib_main_switch_text_color.xml
index ea15a67e93cd..ea15a67e93cd 100644
--- a/packages/SettingsLib/MainSwitchPreference/res/color-night-v35/settingslib_main_switch_text_color.xml
+++ b/packages/SettingsLib/MainSwitchPreference/res/color-night-v36/settingslib_main_switch_text_color.xml
diff --git a/packages/SettingsLib/MainSwitchPreference/res/color-v35/settingslib_main_switch_text_color.xml b/packages/SettingsLib/MainSwitchPreference/res/color-v36/settingslib_main_switch_text_color.xml
index ea15a67e93cd..ea15a67e93cd 100644
--- a/packages/SettingsLib/MainSwitchPreference/res/color-v35/settingslib_main_switch_text_color.xml
+++ b/packages/SettingsLib/MainSwitchPreference/res/color-v36/settingslib_main_switch_text_color.xml
diff --git a/packages/SettingsLib/MainSwitchPreference/res/drawable-v35/settingslib_expressive_switch_bar_bg.xml b/packages/SettingsLib/MainSwitchPreference/res/drawable-v36/settingslib_expressive_switch_bar_bg.xml
index 3999e762ea9e..3999e762ea9e 100644
--- a/packages/SettingsLib/MainSwitchPreference/res/drawable-v35/settingslib_expressive_switch_bar_bg.xml
+++ b/packages/SettingsLib/MainSwitchPreference/res/drawable-v36/settingslib_expressive_switch_bar_bg.xml
diff --git a/packages/SettingsLib/MainSwitchPreference/res/layout-v35/settingslib_expressive_main_switch_bar.xml b/packages/SettingsLib/MainSwitchPreference/res/layout-v36/settingslib_expressive_main_switch_bar.xml
index f75d9b23c49b..f75d9b23c49b 100644
--- a/packages/SettingsLib/MainSwitchPreference/res/layout-v35/settingslib_expressive_main_switch_bar.xml
+++ b/packages/SettingsLib/MainSwitchPreference/res/layout-v36/settingslib_expressive_main_switch_bar.xml
diff --git a/packages/SettingsLib/MainSwitchPreference/res/layout-v35/settingslib_expressive_main_switch_layout.xml b/packages/SettingsLib/MainSwitchPreference/res/layout-v36/settingslib_expressive_main_switch_layout.xml
index 94c6924a02f2..94c6924a02f2 100644
--- a/packages/SettingsLib/MainSwitchPreference/res/layout-v35/settingslib_expressive_main_switch_layout.xml
+++ b/packages/SettingsLib/MainSwitchPreference/res/layout-v36/settingslib_expressive_main_switch_layout.xml
diff --git a/packages/SettingsLib/ProfileSelector/res/color-night-v35/settingslib_tabs_indicator_color.xml b/packages/SettingsLib/ProfileSelector/res/color-night-v36/settingslib_tabs_indicator_color.xml
index 5192a9a53572..5192a9a53572 100644
--- a/packages/SettingsLib/ProfileSelector/res/color-night-v35/settingslib_tabs_indicator_color.xml
+++ b/packages/SettingsLib/ProfileSelector/res/color-night-v36/settingslib_tabs_indicator_color.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/color-night-v35/settingslib_switch_track_outline_color.xml b/packages/SettingsLib/SettingsTheme/res/color-night-v36/settingslib_switch_track_outline_color.xml
index eedc364ff54b..eedc364ff54b 100644
--- a/packages/SettingsLib/SettingsTheme/res/color-night-v35/settingslib_switch_track_outline_color.xml
+++ b/packages/SettingsLib/SettingsTheme/res/color-night-v36/settingslib_switch_track_outline_color.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_expressive_color_main_switch_track.xml b/packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_expressive_color_main_switch_track.xml
index a6885a4ac358..a6885a4ac358 100644
--- a/packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_expressive_color_main_switch_track.xml
+++ b/packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_expressive_color_main_switch_track.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_preference_bg_color.xml b/packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_preference_bg_color.xml
index cece9665b729..cece9665b729 100644
--- a/packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_preference_bg_color.xml
+++ b/packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_preference_bg_color.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_switch_track_outline_color.xml b/packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_switch_track_outline_color.xml
index eedc364ff54b..eedc364ff54b 100644
--- a/packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_switch_track_outline_color.xml
+++ b/packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_switch_track_outline_color.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_text_color_primary.xml b/packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_text_color_primary.xml
index 230eb7d30aea..230eb7d30aea 100644
--- a/packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_text_color_primary.xml
+++ b/packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_text_color_primary.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_text_color_secondary.xml b/packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_text_color_secondary.xml
index 5bd2a29ccf9a..5bd2a29ccf9a 100644
--- a/packages/SettingsLib/SettingsTheme/res/color-v35/settingslib_text_color_secondary.xml
+++ b/packages/SettingsLib/SettingsTheme/res/color-v36/settingslib_text_color_secondary.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_arrow_drop_down.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_arrow_drop_down.xml
index 875524775a3c..875524775a3c 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_arrow_drop_down.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_arrow_drop_down.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_list_divider.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_list_divider.xml
index c17f7ee8c61e..c17f7ee8c61e 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_list_divider.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_list_divider.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_progress_horizontal.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_progress_horizontal.xml
index 3cb34354de17..3cb34354de17 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_progress_horizontal.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_progress_horizontal.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background.xml
index 9aa0bc39c5d8..9aa0bc39c5d8 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_bottom.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom.xml
index 554cba565383..554cba565383 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_bottom.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_bottom_highlighted.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_highlighted.xml
index c0c08699cc2a..c0c08699cc2a 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_bottom_highlighted.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_highlighted.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_bottom_selected.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_selected.xml
index 543b237373fb..543b237373fb 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_bottom_selected.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_bottom_selected.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_center.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center.xml
index b89a0ddcdec5..b89a0ddcdec5 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_center.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_center_highlighted.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_highlighted.xml
index 8099d9b3d7f7..8099d9b3d7f7 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_center_highlighted.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_highlighted.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_center_selected.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_selected.xml
index 6d2cd1a51620..6d2cd1a51620 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_center_selected.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_center_selected.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_highlighted.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_highlighted.xml
index a119a4ae083f..a119a4ae083f 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_highlighted.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_highlighted.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_selected.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_selected.xml
index bcdbf1d19545..bcdbf1d19545 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_selected.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_selected.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_top.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top.xml
index 7955e4418ae9..7955e4418ae9 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_top.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_top_highlighted.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_highlighted.xml
index 052eb01cab8d..052eb01cab8d 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_top_highlighted.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_highlighted.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_top_selected.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_selected.xml
index d4b658c384e6..d4b658c384e6 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_round_background_top_selected.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_round_background_top_selected.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_spinner_background.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_spinner_background.xml
index 20ee38190b01..20ee38190b01 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_spinner_background.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_spinner_background.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_spinner_dropdown_background.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_spinner_dropdown_background.xml
index b287c3bb546f..b287c3bb546f 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_spinner_dropdown_background.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v36/settingslib_spinner_dropdown_background.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_preference.xml b/packages/SettingsLib/SettingsTheme/res/layout-v36/settingslib_expressive_preference.xml
index 4ef747a99b49..4ef747a99b49 100644
--- a/packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_preference.xml
+++ b/packages/SettingsLib/SettingsTheme/res/layout-v36/settingslib_expressive_preference.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_preference_icon_frame.xml b/packages/SettingsLib/SettingsTheme/res/layout-v36/settingslib_expressive_preference_icon_frame.xml
index 19818e0b06da..19818e0b06da 100644
--- a/packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_preference_icon_frame.xml
+++ b/packages/SettingsLib/SettingsTheme/res/layout-v36/settingslib_expressive_preference_icon_frame.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_preference_switch.xml b/packages/SettingsLib/SettingsTheme/res/layout-v36/settingslib_expressive_preference_switch.xml
index 4abcd22d67cc..4abcd22d67cc 100644
--- a/packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_preference_switch.xml
+++ b/packages/SettingsLib/SettingsTheme/res/layout-v36/settingslib_expressive_preference_switch.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_two_target_divider.xml b/packages/SettingsLib/SettingsTheme/res/layout-v36/settingslib_expressive_two_target_divider.xml
index 9be9ec331984..9be9ec331984 100644
--- a/packages/SettingsLib/SettingsTheme/res/layout-v35/settingslib_expressive_two_target_divider.xml
+++ b/packages/SettingsLib/SettingsTheme/res/layout-v36/settingslib_expressive_two_target_divider.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/values-night-v35/colors.xml b/packages/SettingsLib/SettingsTheme/res/values-night-v36/colors.xml
index e31e80176625..e31e80176625 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-night-v35/colors.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-night-v36/colors.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v35/colors.xml b/packages/SettingsLib/SettingsTheme/res/values-v36/colors.xml
index b1b37b12c572..b1b37b12c572 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-v35/colors.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-v36/colors.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v35/dimens.xml b/packages/SettingsLib/SettingsTheme/res/values-v36/dimens.xml
index 193ae618e803..193ae618e803 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-v35/dimens.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-v36/dimens.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v35/styles_expressive.xml b/packages/SettingsLib/SettingsTheme/res/values-v36/styles_expressive.xml
index 3af88c48e8ca..3af88c48e8ca 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-v35/styles_expressive.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-v36/styles_expressive.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v35/styles_preference_expressive.xml b/packages/SettingsLib/SettingsTheme/res/values-v36/styles_preference_expressive.xml
index cec8e45e2bfb..cec8e45e2bfb 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-v35/styles_preference_expressive.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-v36/styles_preference_expressive.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v35/themes.xml b/packages/SettingsLib/SettingsTheme/res/values-v36/themes.xml
index b6e80c784f10..1c45ff6ca6cf 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-v35/themes.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-v36/themes.xml
@@ -16,7 +16,7 @@
-->
<resources>
- <style name="Theme.SettingsBase_v35" parent="Theme.SettingsBase_v33" >
+ <style name="Theme.SettingsBase_v36" parent="Theme.SettingsBase_v33" >
<item name="android:colorAccent">@color/settingslib_materialColorPrimary</item>
<item name="android:colorBackground">@color/settingslib_materialColorSurfaceContainer</item>
<item name="android:textColorPrimary">@color/settingslib_materialColorOnSurface</item>
@@ -27,5 +27,5 @@
<item name="android:clipChildren">false</item>
</style>
- <style name="Theme.SettingsBase" parent="Theme.SettingsBase_v35" />
+ <style name="Theme.SettingsBase" parent="Theme.SettingsBase_v36" />
</resources> \ No newline at end of file
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v35/themes_expressive.xml b/packages/SettingsLib/SettingsTheme/res/values-v36/themes_expressive.xml
index 14f214a96435..14f214a96435 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-v35/themes_expressive.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-v36/themes_expressive.xml
diff --git a/packages/SettingsLib/SettingsTheme/res/values-v35/themes_preference_expressive.xml b/packages/SettingsLib/SettingsTheme/res/values-v36/themes_preference_expressive.xml
index 41fe2250f0ad..41fe2250f0ad 100644
--- a/packages/SettingsLib/SettingsTheme/res/values-v35/themes_preference_expressive.xml
+++ b/packages/SettingsLib/SettingsTheme/res/values-v36/themes_preference_expressive.xml
diff --git a/packages/SettingsLib/TwoTargetPreference/res/layout-v35/settingslib_expressive_preference_two_target.xml b/packages/SettingsLib/TwoTargetPreference/res/layout-v36/settingslib_expressive_preference_two_target.xml
index 4347ef29037d..4347ef29037d 100644
--- a/packages/SettingsLib/TwoTargetPreference/res/layout-v35/settingslib_expressive_preference_two_target.xml
+++ b/packages/SettingsLib/TwoTargetPreference/res/layout-v36/settingslib_expressive_preference_two_target.xml
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index dbc4e5a2b1db..dcad7356508d 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Kon nie omgewing opdateer nie"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktief (net media). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktiewe (net media). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Gastetoestel. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Gastetoestel. L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Gastetoestel (net media). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Gastetoestel (net media). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Gekoppel (steun oudiodeling). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Gekoppel (steun oudiodeling). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Gekoppel (steun oudiodeling). Links: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Gekoppel (steun oudiodeling). Regs: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Gekoppel (steun oudiodeling)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Gastetoestel (steun oudiodeling). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Gastetoestel (steun oudiodeling). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Gastetoestel (steun oudiodeling)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktief (net media)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Gastetoestel"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Gastetoestel (net media)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Steun oudiodeling"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Gastetoestel. Steun oudiodeling"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktief (net media), net linkerkant"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktief (net media), net regterkant"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktief (net media), linker- en regterkant"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardeware-versnelde lewering"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitering"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Vensterbestuur"</string>
<string name="strict_mode" msgid="889864762140862437">"Strengmodus geaktiveer"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Flits skerm as apps lang bewerkings uitvoer op die hoofdraad"</string>
<string name="pointer_location" msgid="7516929526199520173">"Wyserligging"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView-implementering"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Stel WebView-implementering"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Hierdie keuse is nie meer geldig nie. Probeer weer."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Webaansig-Ontwikkelaarnutsgoed"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Webaansigpakket nie gevind nie."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Kon nie Ontwikkelaarnutsgoed begin nie."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Fotokleurmodus"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Gebruik sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Gedeaktiveer"</string>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index bfe60068ff6d..dc6bd0fb06c8 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"በዙሪያ ያሉትን ማዘመን አልተቻለም"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"ገቢር (ሚዲያ ብቻ)። <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ባትሪ።"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"ገቢር (ሚዲያ ብቻ)። ግ፦ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>፣ ቀ፦ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ባትሪ።"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"የእንግዳ መሣሪያ። <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ባትሪ።"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"የእንግዳ መሣሪያ። ግ፦ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>፣ ቀ፦ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ባትሪ።"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"የእንግዳ መሣሪያ (ሚዲያ ብቻ)። <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ባትሪ።"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"የእንግዳ መሣሪያ (ሚዲያ ብቻ)። ግ፦ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>፣ ቀ፦ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ባትሪ።"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"ተገናኝቷል (የድምፅ ማጋራት ይደግፋል)፣ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ባትሪ።"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"ተገናኝቷል (የድምፅ ማጋራት ይደግፋል) ግ፦ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>፣ ቀ፦ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ባትሪ።"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"ተገናኝቷል (የድምፅ ማጋራት ይደግፋል)። ግራ፦<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ባትሪ።"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"ተገናኝቷል (የድምፅ ማጋራት ይደግፋል)። ቀኝ፦ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ባትሪ።"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"ተገናኝቷል (የድምፅ ማጋራት ይደግፋል)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"የእንግዳ መሣሪያ (የድምፅ ማጋራትን ይደግፋል)። <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ባትሪ።"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"የእንግዳ መሣሪያ (የድምፅ ማጋራትን ይደግፋል)። ግ፦ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>፣ ቀ፦ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ባትሪ።"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"የእንግዳ መሣሪያ (የድምፅ ማጋራትን ይደግፋል)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"ገቢር (ሚዲያ ብቻ)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"የእንግዳ መሣሪያ"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"የእንግዳ መሣሪያ (ሚዲያ ብቻ)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"ድምፅ ማጋራትን ይደግፋል"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"የእንግዳ መሣሪያ። የድምፅ ማጋራትን ይደግፋል"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"የተፋጠነ የሃርድዌር አሰጣጥ"</string>
<string name="media_category" msgid="8122076702526144053">"ማህደረመረጃ"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"ቁጥጥር"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"የመስኮት አስተዳደር"</string>
<string name="strict_mode" msgid="889864762140862437">"ጥብቅ ሁነታ ነቅቷል"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"መተግበሪያዎች ረጅም ክንውኖች ወደ ዋና ክሮች ሲያካሂዱ ማያላይ ብልጭ አድርግ።"</string>
<string name="pointer_location" msgid="7516929526199520173">"የአመልካች ሥፍራ"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"የWebView ትግበራ"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"የWebView ትግበራን ያዘጋጁ"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"ይህ ምርጫ ከአሁን በኋላ የሚሰራ አይደለም። እንደገና ይሞክሩ።"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"የድር ዕይታ DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"የድር ዕይታ ጥቅል አልተገኘም።"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevToolsን ማስጀመር አልተቻለም።"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"የስዕል ቀለም ሁነታ"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB ይጠቀሙ"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"ተሰናክሏል"</string>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index 64a021d1b8a7..e2487d7ec7b4 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"تعذَّر تعديل حالة الأصوات المحيطة"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"‏البلوتوث نشِط (للوسائط فقط). مستوى شحن البطارية: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"‏البلوتوث نشِط (للوسائط فقط)، مستوى الشحن في سماعة الرأس اليسرى: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، مستوى الشحن في سماعة الرأس اليمنى: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"‏جهاز ضيف. مستوى شحن البطارية: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"‏جهاز ضيف. اليسرى: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، اليمنى: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> من البطارية"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"‏جهاز ضيف (للوسائط فقط). مستوى شحن البطارية: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"‏جهاز ضيف (للوسائط فقط). اليسرى: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، اليمنى: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> من البطارية"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"‏البلوتوث متصل (ميزة \"مشاركة الصوت\" متاحة). مستوى شحن البطارية: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"‏البلوتوث متصل (ميزة \"مشاركة الصوت\" متاحة). مستوى الشحن في سماعة الرأس اليسرى: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، مستوى الشحن في سماعة الرأس اليمنى: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"‏البلوتوث متصل (ميزة \"مشاركة الصوت\" متاحة). مستوى الشحن في سماعة الرأس اليسرى: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"‏البلوتوث متصل (ميزة \"مشاركة الصوت\" متاحة). مستوى الشحن في سماعة الرأس اليمنى: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"البلوتوث متصل (ميزة \"مشاركة الصوت\" متاحة)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"‏جهاز ضيف (يوفِّر ميزة \"مشاركة الصوت\"). مستوى شحن البطارية: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"‏جهاز ضيف (يوفِّر ميزة \"مشاركة الصوت\"). اليسرى: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، اليمنى: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> من البطارية"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"جهاز ضيف (يوفِّر ميزة \"مشاركة الصوت\")"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"البلوتوث مفعَّل (للوسائط فقط)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"جهاز ضيف"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"جهاز ضيف (للوسائط فقط)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"تتوفّر ميزة \"مشاركة الصوت\""</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"جهاز ضيف. يوفِّر ميزة \"مشاركة الصوت\""</string>
<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>
@@ -492,12 +482,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"‏تطبيق WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"‏تعيين تطبيق WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"لم يعد هذا الاختيار صالحًا. أعد المحاولة."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"‏أدوات مطوري البرامج في WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"‏تعذَّر العثور على حزمة WebView."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"تعذَّر تشغيل \"أدوات مطوري البرامج\"."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"نمط لون الصورة"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"‏استخدام sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"غير مفعّل"</string>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index 82ee7f3ab289..f95a66befec1 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"আশ-পাশ আপডে’ট কৰিব পৰা নগ’ল"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"সক্ৰিয় হৈ আছে (কেৱল মিডিয়া)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> বেটাৰী।"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"সক্ৰিয় হৈ আছে (কেৱল মিডিয়া)। বাওঁ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, সোঁ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> বেটাৰী।"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"অতিথিৰ ডিভাইচ। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> বেটাৰী।"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"অতিথিৰ ডিভাইচ। বাওঁ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, সোঁ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> বেটাৰী।"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"অতিথিৰ ডিভাইচ (কেৱল মিডিয়া)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> বেটাৰী।"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"অতিথিৰ ডিভাইচ (কেৱল মিডিয়া)। বাওঁ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, সোঁ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> বেটাৰী।"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"সংযুক্ত হৈ আছে (অডিঅ’ শ্বেয়াৰিং সমৰ্থন কৰে), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> বেটাৰী।"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"সংযুক্ত হৈ আছে (অডিঅ’ শ্বেয়াৰিং সমৰ্থন কৰে), বাওঁ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, সোঁ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> বেটাৰী"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"সংযুক্ত হৈ আছে (অডিঅ’ শ্বেয়াৰিং সমৰ্থন কৰে)। বাকী আছে: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> বেটাৰী।"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"সংযুক্ত হৈ আছে (অডিঅ’ শ্বেয়াৰিং সমৰ্থন কৰে)। সোঁ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> বেটাৰী।"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"সংযুক্ত হৈ আছে (অডিঅ’ শ্বেয়াৰিং সমৰ্থন কৰে)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"অতিথিৰ ডিভাইচ (অডিঅ’ শ্বেয়াৰিং সমৰ্থন কৰে)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> বেটাৰী।"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"অতিথিৰ ডিভাইচ (অডিঅ’ শ্বেয়াৰিং সমৰ্থন কৰে)। বাওঁ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, সোঁ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> বেটাৰী।"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"অতিথিৰ ডিভাইচ (অডিঅ’ শ্বেয়াৰিং সমৰ্থন কৰে)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"সক্ৰিয় হৈ আছে (কেৱল মিডিয়া)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"অতিথিৰ ডিভাইচ"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"অতিথিৰ ডিভাইচ (কেৱল মিডিয়া)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"অডিঅ’ শ্বেয়াৰিং সমৰ্থন কৰে"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"অতিথিৰ ডিভাইচ। অডিঅ’ শ্বেয়াৰিং সমৰ্থন কৰে"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"হাৰ্ডৱেৰৰদ্বাৰা ত্বৰিত ৰেণ্ডাৰিং"</string>
<string name="media_category" msgid="8122076702526144053">"মিডিয়া"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"নিৰীক্ষণ কৰি থকা হৈছে"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"ৱিণ্ড’ পৰিচালনা"</string>
<string name="strict_mode" msgid="889864762140862437">"কঠোৰ ম’ড সক্ষম কৰা হৈছে"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"যেতিয়া এপ্‌সমূহে মুখ্য থ্ৰেডত দীঘলীয়া কাৰ্যকলাপ চলায়, তেতিয়া স্ক্ৰীন ফ্লাশ্ব কৰক"</string>
<string name="pointer_location" msgid="7516929526199520173">"পইণ্টাৰৰ অৱস্থান"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"ৱেবভিউ প্ৰয়োগ"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"ৱেবভিউ প্ৰয়োগ ছেট কৰক"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"বাছনিটো এতিয়া আৰু মান্য় নহয়। আকৌ চেষ্টা কৰক।"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView পেকেজ বিচাৰি পোৱা নগ’ল।"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools লঞ্চ কৰিব পৰা নগ’ল।"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"চিত্ৰৰ ৰং ম’ড"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"এছআৰজিবি ব্যৱহাৰ কৰক"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"নিষ্ক্ৰিয় হৈ আছে"</string>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index aa939646c319..5e47ff955125 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Ətraf mühit güncəllənmədi"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktiv (yalnız media). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batareya."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktiv (yalnız media). Sol: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Sağ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batareya."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Qonaq cihaz. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batareya."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Qonaq cihaz. Sol: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Sağ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batareya."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Qonaq cihaz (yalnız media). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batareya."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Qonaq cihaz (yalnız media). Sol: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Sağ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batareya."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Qoşulub (audio paylaşma dəstəklənir). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batareya."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Qoşulub (audio paylaşma dəstəklənir). Sol: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Sağ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batareya."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Qoşulub (audio paylaşma dəstəklənir). Sol: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batareya."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Qoşulub (audio paylaşma dəstəklənir). Sağ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batareya."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Qoşulub (audio paylaşma dəstəklənir)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Qonaq cihaz (auido paylaşma dəstəklənir). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batareya."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Qonaq cihaz (auido paylaşma dəstəklənir). Sol: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Sağ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batareya."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Qonaq cihaz (audio paylaşma dəstəklənir)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktiv (yalnız media)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Qonaq cihaz"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Qonaq cihaz (yalnız media)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Audio paylaşma dəstəklənir"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Qonaq cihaz. Audio paylaşma dəstəklənir"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktiv (yalnız media), yalnız sol"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktiv (yalnız media), yalnız sağ"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktiv (yalnız media), sol və sağ"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Renderinq aparat sürətlənməsi"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitorinq"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Pəncərə idarəetməsi"</string>
<string name="strict_mode" msgid="889864762140862437">"Ciddi rejim"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Uzun əməliyyatlar ərzində ekran işıqlandırılsın"</string>
<string name="pointer_location" msgid="7516929526199520173">"Kursor yeri"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView servisi"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView servisini ayarlayın"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Bu seçim artıq etibarlı deyil. Yenidən cəhd edin."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebGörüntü üzrə DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebGörüntü paketi tapılmadı."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools-u başlatmaq mümkün olmadı."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Şəkil rəng rejimi"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB istifadə edin"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Deaktiv"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 7f605006771f..cb623991538d 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Ažuriranje okruženja nije uspelo"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktivno (samo za medije). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktivno (samo za medije). Levo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, desno: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Uređaj gosta. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Uređaj gosta. Levo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, desno: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Uređaj gosta (samo za medije). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Uređaj gosta (samo za medije). Levo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, desno: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Povezano (podržava deljenje zvuka), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Povezano (podržava deljenje zvuka), levo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, desno: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Povezano (podržava deljenje zvuka). Levo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Povezano (podržava deljenje zvuka). Desno: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Povezano (podržava deljenje zvuka)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Uređaj gosta (podržava deljenje zvuka). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Uređaj gosta (podržava deljenje zvuka). Levo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, desno: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Uređaj gosta (podržava deljenje zvuka)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktivan (samo za medije)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Uređaj gosta"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Uređaj gosta (samo za medije)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Podržava deljenje zvuka"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Uređaj gosta. Podržava deljenje zvuka"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktivan (samo za medije), samo levo"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktivan (samo za medije), samo desno"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktivan (samo za medije), levo i desno"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardverski ubrzano prikazivanje"</string>
<string name="media_category" msgid="8122076702526144053">"Mediji"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Nadgledanje"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Upravljanje prozorima"</string>
<string name="strict_mode" msgid="889864762140862437">"Omogućen je strogi režim"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Ekran treperi kada aplikacije obavljaju duge operacije na glavnoj niti"</string>
<string name="pointer_location" msgid="7516929526199520173">"Lokacija pokazivača"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Primena WebView-a"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Podesite primenu WebView-a"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Ovaj izbor više nije važeći. Probajte ponovo."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView alatke za programere"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Paket za WebView nije pronađen."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Pokretanje alatki za programere nije uspelo."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Režim boja slika"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Koristi sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Onemogućeno je"</string>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index 50de9248baf2..ef66fb32d844 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Не ўдалося абнавіць стан навакольных гукаў"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Выкарыстоўваецца (толькі для мультымедыя). Зарад акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Выкарыстоўваецца (толькі для мультымедыя). Зарад акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (левы навушнік), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (правы навушнік)."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Гасцявая прылада. Зарад акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Гасцявая прылада. Зарад акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (левы навушнік), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (правы навушнік)."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Гасцявая прылада (толькі мультымедыя). Зарад акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Гасцявая прылада (толькі мультымедыя). Зарад акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (левы навушнік), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (правы навушнік)."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Падключана (падтрымліваецца абагульванне аўдыя). Зарад акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Падключана (падтрымліваецца абагульванне аўдыя). Зарад акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (левы навушнік), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (правы навушнік)."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Падключана (падтрымліваецца абагульванне аўдыя). Зарад акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> (левы навушнік)."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Падключана (падтрымліваецца абагульванне аўдыя). Зарад акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> (правы навушнік)."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Падключана (падтрымліваецца абагульванне аўдыя)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Гасцявая прылада (падтрымлівае абагульванне аўдыя). Зарад акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Гасцявая прылада (падтрымлівае абагульванне аўдыя). Зарад акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (левы навушнік), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (правы навушнік)."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Гасцявая прылада (падтрымлівае абагульванне аўдыя)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Выкарыстоўваецца (толькі для мультымедыя)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Гасцявая прылада"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Гасцявая прылада (толькі мультымедыя)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Падтрымліваецца абагульванне аўдыя"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Гасцявая прылада. Падтрымлівае абагульванне аўдыя."</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Апаратнае паскарэнне рэндэрынгу"</string>
<string name="media_category" msgid="8122076702526144053">"Медыя"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Маніторынг"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Кіраванне вокнамі"</string>
<string name="strict_mode" msgid="889864762140862437">"Уключаны строгі рэжым"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Падсвечваць экран падчас доўгіх аперацый"</string>
<string name="pointer_location" msgid="7516929526199520173">"Пазіцыя ўказальніка"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Рэалізацыя WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Наладзіць рэалізацыю WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Гэты варыянт больш не даступны. Паспрабуйце яшчэ раз."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Інструменты распрацоўшчыка WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Пакет WebView не знойдзены."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Не ўдалося запусціць інструменты распрацоўшчыка."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Каляровы рэжым выявы"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Выкарыстоўваць sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Выключана"</string>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index c3c17833ea29..69d68662b8c5 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Данните за околните звуци не бяха актуализирани"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Активно (само за мултимедия). Батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Активно (само за мултимедия). Л: батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Д: батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Устройство на гост. Батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Устройство на гост. Л: батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Д: батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Устройство на гост (само за мултимедия). Батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Устройство на гост (само за мултимедия). Л: батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Д: батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Свързано (поддържа споделяне на звука). Батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Свързано (поддържа споделяне на звука). Л: батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Д: батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Свързано (поддържа споделяне на звука). За ляво ухо. Батерия: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Свързано (поддържа споделяне на звука). За дясно ухо. Батерия: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Свързано (поддържа споделяне на звука)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Устройство на гост (поддържа споделяне на звука). Батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Устройство на гост (поддържа споделяне на звука). Л: батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Д: батерия – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Устройство на гост (поддържа споделяне на звука)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Активно (само за мултимедия)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Устройство на гост"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Устройство на гост (само за мултимедия)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Поддържа споделяне на звука"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Устройство на гост. Поддържа споделяне на звука"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Хардуерно ускорено изобразяване"</string>
<string name="media_category" msgid="8122076702526144053">"Мултимедия"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Наблюдение"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Управление на прозорците"</string>
<string name="strict_mode" msgid="889864762140862437">"Активиран строг режим"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Примигване на екрана при дълги операции в главната нишка"</string>
<string name="pointer_location" msgid="7516929526199520173">"Mестопол. на показалеца"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Внедряване на WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Задаване на внедряването на WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Този избор вече не е валиден. Опитайте отново."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"DevTools за WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Пакетът на WebView не е намерен."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools не се стартира."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Цветови режим за снимките"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Използване на sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Деактивирано"</string>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index 93b652124d8a..7e8e3fe3de70 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"সারাউন্ডিং আপডেট করা যায়নি"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"চালু আছে (শুধুমাত্র মিডিয়া)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ব্যাটারি।"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"চালু আছে (শুধুমাত্র মিডিয়া), বাঁদিক: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ডানদিক: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ব্যাটারি।"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"অতিথি ডিভাইস। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ব্যাটারি।"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"অতিথি ডিভাইস। বাঁদিক: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ডানদিক: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ব্যাটারি।"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"অতিথি ডিভাইস (শুধুমাত্র মিডিয়া)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ব্যাটারি।"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"অতিথি ডিভাইস (শুধুমাত্র মিডিয়া)। বাঁদিক: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ডানদিক: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ব্যাটারি।"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"কানেক্ট করা আছে (অডিও শেয়ারিংয়ে কাজ করে), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ব্যাটারি।"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"কানেক্ট করা আছে (অডিও শেয়ারিংয়ে কাজ করে), বাঁদিক: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ডানদিক: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ব্যাটারি।"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"কানেক্ট করা আছে (অডিও শেয়ারিংয়ে কাজ করে)। বাঁদিক: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ব্যাটারি।"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"কানেক্ট করা আছে (অডিও শেয়ারিংয়ে কাজ করে)। ডানদিকে: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ব্যাটারি।"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"কানেক্ট করা আছে (অডিও শেয়ারিংয়ে কাজ করে)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"অতিথি ডিভাইস (অডিও শেয়ারিং কাজ করে)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ব্যাটারি।"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"অতিথি ডিভাইস (অডিও শেয়ারিং কাজ করে)। বাঁদিক: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ডানদিক: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ব্যাটারি।"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"অতিথি ডিভাইস (অডিও শেয়ারিং কাজ করে)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"চালু আছে (শুধুমাত্র মিডিয়া)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"অতিথি ডিভাইস"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"অতিথি ডিভাইস (শুধুমাত্র মিডিয়া)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"অডিও শেয়ারিংয়ে কাজ করে"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"অতিথি ডিভাইস। অডিও শেয়ারিং কাজ করে"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"হার্ডওয়্যার দ্বারা চালিত রেন্ডারিং"</string>
<string name="media_category" msgid="8122076702526144053">"মিডিয়া"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"পর্যবেক্ষণে রাখা"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"উইন্ডো ম্যানেজমেন্ট"</string>
<string name="strict_mode" msgid="889864762140862437">"স্ট্রিক্ট মোড চালু আছে"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"মুখ্য থ্রেডে অ্যাপগুলির দীর্ঘ কার্যকলাপের ক্ষেত্রে স্ক্রিন ফ্ল্যাশ করে"</string>
<string name="pointer_location" msgid="7516929526199520173">"পয়েন্টারের লোকেশন"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"ওয়েবভিউ প্রয়োগ"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"ওয়েবভিউ প্রয়োগ সেট করুন"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"এই পছন্দটি আর বৈধ নেই৷ আবার চেষ্টা করুন৷"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView প্রদানকারীর DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView প্যাকেজ পাওয়া যায়নি।"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools চালু করা যায়নি।"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"ছবি রঙ মোড"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB ব্যবহার করুন"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"অক্ষম হয়েছে"</string>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index abb0775eb9ab..d0b15d9e6768 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Ažuriranje okruženja nije uspjelo"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktivno (samo za medijski sadržaj). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktivno (samo za medijski sadržaj). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> baterije, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Gostujući uređaj. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Gostujući uređaj. L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> baterije, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Gostujući uređaj (samo za medijski sadržaj). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Gostujući uređaj (samo za medijski sadržaj). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> baterije, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Povezano (podržava dijeljenje zvuka). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Povezano (podržava dijeljenje zvuka). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> baterije, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Povezano (podržava dijeljenje zvuka). Lijevo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Povezano (podržava dijeljenje zvuka). Desno: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Povezano (podržava dijeljenje zvuka)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Gostujući uređaj (podržava dijeljenje zvuka). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Gostujući uređaj (podržava dijeljenje zvuka). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> baterije, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Gostujući uređaj (podržava dijeljenje zvuka)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktivno (samo za medijski sadržaj)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Gostujući uređaj"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Gostujući uređaj (samo za medijski sadržaj)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Podržava dijeljenje zvuka"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Gostujući uređaj. Podržava dijeljenje zvuka"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktivno (samo za medijski sadržaj), samo lijevo"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktivno (samo za medijski sadržaj), samo desno"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktivno (samo za medijski sadržaj), lijevo i desno"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardverski ubrzano prikazivanje"</string>
<string name="media_category" msgid="8122076702526144053">"Mediji"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Praćenje"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Upravljanje prozorima"</string>
<string name="strict_mode" msgid="889864762140862437">"Omogući strogi način rada"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Ekran bljeska kada aplikacije vrše duge operacije u glavnoj niti"</string>
<string name="pointer_location" msgid="7516929526199520173">"Lokacija pokazivača"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Postavljanje WebViewa"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Podesi WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Ovaj izbor više ne vrijedi. Pokušajte ponovo."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Alati za programere za WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Paket WebViewa nije pronađen."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Pokretanje alata za programere nije uspjelo."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Način rada boja slika"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Koristi sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Onemogućeno"</string>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index ed49307c4093..283182c7219d 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"No s\'ha pogut actualitzar l\'entorn"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Actiu (només contingut multimèdia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Actiu (només contingut multimèdia), E: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Dispositiu convidat. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Dispositiu convidat. E: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Dispositiu convidat (només contingut multimèdia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Dispositiu convidat (només contingut multimèdia). E: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Connectat (admet compartició d\'àudio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Connectat (admet compartició d\'àudio), E: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Connectat (admet compartició d\'àudio). Esquerre: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Connectat (admet compartició d\'àudio). Dret: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Connectat (admet compartició d\'àudio)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Dispositiu convidat (admet compartició d\'àudio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Dispositiu convidat (admet compartició d\'àudio). E: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Dispositiu convidat (admet compartició d\'àudio)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Actiu (només contingut multimèdia)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Dispositiu convidat"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Dispositiu convidat (només contingut multimèdia)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Admet compartició d\'àudio"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Dispositiu convidat. Admet compartició d\'àudio"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Actiu (només contingut multimèdia), només esquerre"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Actiu (només contingut multimèdia), només dret"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Actiu (només contingut multimèdia), esquerre i dret"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Renderització accelerada per maquinari"</string>
<string name="media_category" msgid="8122076702526144053">"Multimèdia"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Supervisió"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Gestió de finestres"</string>
<string name="strict_mode" msgid="889864762140862437">"Mode estricte activat"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Il·lumina la pantalla quan les aplicacions facin operacions llargues al fil principal"</string>
<string name="pointer_location" msgid="7516929526199520173">"Ubicació del punter"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implementació de WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Estableix implementació de WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Aquesta opció ja no és vàlida. Torna-ho a provar."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"DevTools de WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"No s\'ha trobat el paquet de WebView."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"No s\'ha pogut iniciar DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Mode de color de la imatge"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Utilitza sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Desactivat"</string>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index 7ea6e430cb09..bc00d47af14f 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Okolí se nepodařilo aktualizovat"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktivní (pouze média). Baterie: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktivní (pouze média), baterie: L <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Zařízení hosta. Baterie: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Zařízení hosta. Baterie: L <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Zařízení hosta (jen média). Baterie: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Zařízení hosta (jen média). Baterie: L <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Připojeno (podporuje sdílení zvuku), baterie: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Připojeno (podporuje sdílení zvuku), baterie: L <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Připojeno (podporuje sdílení zvuku). Levá strana: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterie"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Připojeno (podporuje sdílení zvuku). Pravá strana: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterie."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Připojeno (podporuje sdílení zvuku)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Zařízení hosta (podporuje sdílení zvuku). Baterie: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Zařízení hosta (podporuje sdílení zvuku). Baterie: L <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Zařízení hosta (podporuje sdílení zvuku)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktivní (pouze média)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Zařízení hosta"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Zařízení hosta (jen media)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Podporuje sdílení zvuku"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Zařízení hosta. Podporuje sdílení zvuku"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktivní (pouze média), pouze levé"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktivní (pouze média), pouze pravé"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktivní (pouze média), levé a pravé"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardwarově urychlené vykreslování"</string>
<string name="media_category" msgid="8122076702526144053">"Média"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Sledování"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Správa oken"</string>
<string name="strict_mode" msgid="889864762140862437">"Přísný režim aktivován"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Rozblikat obrazovku při dlouhých operacích hlavního vlákna"</string>
<string name="pointer_location" msgid="7516929526199520173">"Umístění ukazatele"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implementace WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Nastavte implementaci WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Tato volba již není platná. Zkuste to znovu."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Nástroje pro vývojáře WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Balíček WebView nebyl nalezen."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Nástroje pro vývojáře nelze spustit."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Režim barev obrázku"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Použije se barevný prostor sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Vypnuto"</string>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index 4aad2a2b8ac6..986c40f26df7 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Omgivelserne kunne ikke opdateres"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktiveret (kun for medier). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktiveret (kun for medier), V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Gæsteenhed. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Gæsteenhed. V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Gæsteenhed (kun medier). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Gæsteenhed (kun medier). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Forbundet (understøtter lyddeling). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Forbundet (understøtter lyddeling), V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Forbundet (understøtter lyddeling). Venstre: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Forbundet (understøtter lyddeling). Højre: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Forbundet (understøtter lyddeling)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Gæsteenhed (understøtter lyddeling). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Gæsteenhed (understøtter lyddeling). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Gæsteenhed (understøtter lyddeling)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktiveret (kun for medier)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Gæsteenhed"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Gæsteenhed (kun medier)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Understøtter lyddeling"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Gæsteenhed. Understøtter lyddeling"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktiveret (kun for medier), kun venstre"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktiveret (kun for medier), kun højre"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktiveret (kun for medier), venstre og højre"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardware-accelereret gengivelse"</string>
<string name="media_category" msgid="8122076702526144053">"Medie"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Overvågning"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Administration af vinduer"</string>
<string name="strict_mode" msgid="889864762140862437">"Striks tilstand aktiveret"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Blink med skærmen, når apps foretager handlinger på hovedtråd"</string>
<string name="pointer_location" msgid="7516929526199520173">"Markørens lokation"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView-implementering"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Konfigurer WebView-implementering"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Dette valg er ikke længere gyldigt. Prøv igen."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Udviklerværktøjer til Webvisning"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Pakken Webvisning blev ikke fundet."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Udviklerværktøjer kunne ikke åbnes."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Farvetilstand for billeder"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Brug sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Deaktiveret"</string>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 55cae9699b47..e7ffaa4f6048 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Status der Umgebungsgeräusche konnte nicht aktualisiert werden"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktiv (nur Medien). Akku: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktiv (nur Medien). Akku links: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Akku rechts: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Gastgerät. Akku: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Gastgerät. Akku links: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Akku rechts: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Gastgerät (nur Medien). Akku: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Gastgerät (nur Medien). Akku links: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Akku rechts: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Verbunden (unterstützt Audiofreigabe). Akku: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Verbunden (unterstützt Audiofreigabe). Akku links: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Akku rechts: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Verbunden (unterstützt Audiofreigabe). Akku links: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Verbunden (unterstützt Audiofreigabe). Akku rechts: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Verbunden (unterstützt Audiofreigabe)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Gastgerät (unterstützt Audiofreigabe). Akku: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Gastgerät (unterstützt Audiofreigabe). Akku links: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Akku rechts: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Gastgerät (unterstützt Audiofreigabe)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktiv (nur Medien)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Gastgerät"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Gastgerät (nur Medien)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Unterstützt Audiofreigabe"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Gastgerät. Unterstützt Audiofreigabe."</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktiv (nur Medien), nur links"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktiv (nur Medien), nur rechts"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktiv (nur Medien), links und rechts"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardwarebeschleunigtes Rendering"</string>
<string name="media_category" msgid="8122076702526144053">"Medien"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitoring"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Fensterverwaltung"</string>
<string name="strict_mode" msgid="889864762140862437">"Strikter Modus aktiviert"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Bei langen App-Vorgängen im Hauptthread blinkt Bildschirm"</string>
<string name="pointer_location" msgid="7516929526199520173">"Zeigerposition"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView-Implementierung"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView-Implementierung festlegen"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Diese Auswahl ist nicht mehr gültig. Bitte versuche es noch einmal."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView-Entwicklertools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Das WebView-Paket wurde nicht gefunden."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Die Entwicklertools konnten nicht gestartet werden."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Farbmodus für Bilder"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB verwenden"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Deaktiviert"</string>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 6b6b7fbcab93..2fc0ff2fc1db 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Δεν ήταν δυνατή η ενημέρωση των ήχων περιβάλλοντος"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Ενεργό (μόνο για μέσα). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> μπαταρία."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Ενεργό (μόνο για μέσα). Α: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Δ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> μπαταρία."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Συσκευή επισκέπτη. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> μπαταρία."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Συσκευή επισκέπτη. Α: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Δ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> μπαταρία."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Συσκευή επισκέπτη (μόνο για μέσα). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> μπαταρία."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Συσκευή επισκέπτη (μόνο για μέσα). Α: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Δ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> μπαταρία."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Συνδεδεμένο (υποστηρίζει κοινή χρήση ήχου). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> μπαταρία."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Συνδεδεμένο (υποστηρίζει κοινή χρήση ήχου). Α: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Δ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> μπαταρία."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Συνδεδεμένο (υποστηρίζει κοινή χρήση ήχου). Αριστερά: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> μπαταρία."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Συνδεδεμένο (υποστηρίζει κοινή χρήση ήχου). Δεξιά: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> μπαταρία."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Συνδεδεμένο (υποστηρίζει κοινή χρήση ήχου)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Συσκευή επισκέπτη (υποστηρίζει κοινή χρήση ήχου). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> μπαταρία."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Συσκευή επισκέπτη (υποστηρίζει κοινή χρήση ήχου). Α: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Δ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> μπαταρία."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Συσκευή επισκέπτη (υποστηρίζει κοινή χρήση ήχου)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Ενεργό (μόνο για μέσα)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Συσκευή επισκέπτη"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Συσκευή επισκέπτη (μόνο μέσα)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Υποστηρίζει κοινή χρήση ήχου"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Συσκευή επισκέπτη. Υποστηρίζει κοινή χρήση ήχου"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Απόδοση με επιτάχυνση από υλικό εξοπλισμό"</string>
<string name="media_category" msgid="8122076702526144053">"Μέσα"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Παρακολούθηση"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Διαχείριση παραθύρων"</string>
<string name="strict_mode" msgid="889864762140862437">"Ενεργ. αυστηρής λειτουργ."</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Αναβ. οθόνη σε εκτέλεση μεγάλων λειτ.σε κύριο νήμα"</string>
<string name="pointer_location" msgid="7516929526199520173">"Θέση δείκτη"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Υλοποίηση WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Ορισμός υλοποίησης WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Αυτή η επιλογή δεν είναι πια έγκυρη. Δοκιμάστε ξανά."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Εργαλεία για προγραμματιστές Προβολής στον ιστό"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Δεν βρέθηκε το πακέτο Προβολή στον ιστό."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Αδύνατη εκκίνηση Εργαλείων για προγραμματιστές."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Λειτουργία χρώματος εικόνας"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Χρήση sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Απενεργοποιημένο"</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index a8119602b651..34d6bf7299f2 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Couldn\'t update surroundings"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Active (media only). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Active (media only). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Guest device. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Guest device. L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Guest device (media only). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Guest device (media only). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Connected (supports audio sharing). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Connected (supports audio sharing). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Connected (supports audio sharing). Left: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Connected (supports audio sharing). Right: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Connected (supports audio sharing)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Guest device (supports audio sharing). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Guest device (supports audio sharing). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Guest device (supports audio sharing)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Active (media only)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Guest device"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Guest device (media only)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Supports audio sharing"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Guest device. Supports audio sharing"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Active (media only), left only"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Active (media only), right only"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Active (media only), left and right"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardware accelerated rendering"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitoring"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Window management"</string>
<string name="strict_mode" msgid="889864762140862437">"Strict mode enabled"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Flash screen when apps do long operations on main thread"</string>
<string name="pointer_location" msgid="7516929526199520173">"Pointer location"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView implementation"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Set WebView implementation"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"This choice is no longer valid. Try again."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView package not found."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Could not launch DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Picture colour mode"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Use sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Disabled"</string>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
index a12b46c06300..120343727593 100644
--- a/packages/SettingsLib/res/values-en-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -386,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardware accelerated rendering"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitoring"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Window Management"</string>
<string name="strict_mode" msgid="889864762140862437">"Strict mode enabled"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Flash screen when apps do long operations on main thread"</string>
<string name="pointer_location" msgid="7516929526199520173">"Pointer location"</string>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index a8119602b651..34d6bf7299f2 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Couldn\'t update surroundings"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Active (media only). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Active (media only). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Guest device. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Guest device. L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Guest device (media only). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Guest device (media only). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Connected (supports audio sharing). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Connected (supports audio sharing). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Connected (supports audio sharing). Left: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Connected (supports audio sharing). Right: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Connected (supports audio sharing)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Guest device (supports audio sharing). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Guest device (supports audio sharing). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Guest device (supports audio sharing)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Active (media only)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Guest device"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Guest device (media only)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Supports audio sharing"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Guest device. Supports audio sharing"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Active (media only), left only"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Active (media only), right only"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Active (media only), left and right"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardware accelerated rendering"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitoring"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Window management"</string>
<string name="strict_mode" msgid="889864762140862437">"Strict mode enabled"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Flash screen when apps do long operations on main thread"</string>
<string name="pointer_location" msgid="7516929526199520173">"Pointer location"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView implementation"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Set WebView implementation"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"This choice is no longer valid. Try again."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView package not found."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Could not launch DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Picture colour mode"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Use sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Disabled"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index a8119602b651..34d6bf7299f2 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Couldn\'t update surroundings"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Active (media only). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Active (media only). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Guest device. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Guest device. L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Guest device (media only). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Guest device (media only). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Connected (supports audio sharing). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Connected (supports audio sharing). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Connected (supports audio sharing). Left: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Connected (supports audio sharing). Right: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Connected (supports audio sharing)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Guest device (supports audio sharing). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Guest device (supports audio sharing). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> battery."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Guest device (supports audio sharing)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Active (media only)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Guest device"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Guest device (media only)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Supports audio sharing"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Guest device. Supports audio sharing"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Active (media only), left only"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Active (media only), right only"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Active (media only), left and right"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardware accelerated rendering"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitoring"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Window management"</string>
<string name="strict_mode" msgid="889864762140862437">"Strict mode enabled"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Flash screen when apps do long operations on main thread"</string>
<string name="pointer_location" msgid="7516929526199520173">"Pointer location"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView implementation"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Set WebView implementation"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"This choice is no longer valid. Try again."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView package not found."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Could not launch DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Picture colour mode"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Use sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Disabled"</string>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 6c3c98aa5702..ca17178b0db0 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"No se pudo actualizar el sonido envolvente"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Activado (solo para contenido multimedia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Activo (solo para contenido multimedia); I: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>; D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Dispositivo de invitado. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Dispositivo de invitado. I: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>; D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Dispositivo de invitado (solo para contenido multimedia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Dispositivo de invitado (solo para contenido multimedia). I: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>; D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Conectado (admite el uso compartido de audio); <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Conectado (admite el uso compartido de audio); I: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>; D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Conectado (admite el uso compartido de audio). Izquierdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Conectado (admite el uso compartido de audio). Derecho: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Conectado (admite el uso compartido de audio)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Dispositivo de invitado (admite el uso compartido de audio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Dispositivo de invitado (admite el uso compartido de audio). I: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>; D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Dispositivo de invitado (admite el uso compartido de audio)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Activo (solo para contenido multimedia)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Dispositivo de invitado"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Dispositivo de invitado (solo para contenido multimedia)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Admite el uso compartido de audio"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Dispositivo de invitado. Admite el uso compartido de audio"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Activo (solo para contenido multimedia); solo izquierdo"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Activo (solo para contenido multimedia); solo derecho"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Activo (solo para contenido multimedia); izquierdo y derecho"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Renderización acelerada por hardware"</string>
<string name="media_category" msgid="8122076702526144053">"Multimedia"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Supervisión"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Administración de ventanas"</string>
<string name="strict_mode" msgid="889864762140862437">"Modo estricto"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Parpadear si aplicaciones tardan en proceso principal"</string>
<string name="pointer_location" msgid="7516929526199520173">"Ubicación del puntero"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implementación de WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Configurar la implementación de WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Esta opción ya no es válida. Vuelve a intentarlo."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Herramientas para desarrolladores de WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"No se encontró el paquete WebView."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"No se pudieron iniciar las Herramientas para desarrolladores."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Modo de color de la imagen"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Usa sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Inhabilitado"</string>
@@ -667,7 +653,7 @@
<string name="user_grant_admin_message" msgid="1673791931033486709">"Los administradores tienen privilegios especiales que no tienen otros usuarios. Un administrador puede administrar a todos los usuarios, actualizar o restablecer el dispositivo, modificar parámetros de configuración, ver todas las apps instaladas y otorgar o revocar privilegios de administrador de otros usuarios."</string>
<string name="user_grant_admin_button" msgid="5441486731331725756">"Convertir en administrador"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"¿Configurar el usuario ahora?"</string>
- <string name="user_setup_dialog_message" msgid="269931619868102841">"Asegúrate de que la persona pueda acceder al dispositivo y configurar su espacio."</string>
+ <string name="user_setup_dialog_message" msgid="269931619868102841">"Asegúrate de que la persona pueda acceder al dispositivo y configurar su espacio"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"¿Quieres configurar tu perfil ahora?"</string>
<string name="user_setup_button_setup_now" msgid="1708269547187760639">"Configurar ahora"</string>
<string name="user_setup_button_setup_later" msgid="8712980133555493516">"Ahora no"</string>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index b91c9b420cf0..22e8b114f875 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"No se han podido actualizar los alrededores"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Activo (solo multimedia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Activo (solo multimedia). Izquierdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batería. Derecho: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Dispositivo invitado. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Dispositivo invitado. Izquierdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batería. Derecho: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Dispositivo invitado (solo multimedia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Dispositivo invitado (solo multimedia). Izquierdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batería. Derecho: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Conectado (permite compartir audio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Conectado (admite Compartir audio). Izquierdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batería. Derecho: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Conectado (admite Compartir audio). Izquierdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Conectado (admite Compartir audio). Derecho: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Conectado (admite Compartir audio)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Dispositivo invitado (admite Compartir audio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Dispositivo invitado (admite Compartir audio). Izquierdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batería. Derecho: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Dispositivo invitado (admite Compartir audio)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Activo (solo multimedia)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Dispositivo invitado"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Dispositivo invitado (solo multimedia)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Permite compartir audio"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Dispositivo invitado. Admite Compartir audio."</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Activo (solo multimedia), solo el izquierdo"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Activo (solo multimedia), solo el derecho"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Activo (solo multimedia), izquierdo y derecho"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Renderización acelerada por hardware"</string>
<string name="media_category" msgid="8122076702526144053">"Multimedia"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Supervisión"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Gestión de ventanas"</string>
<string name="strict_mode" msgid="889864762140862437">"Modo Estricto habilitado"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Hace parpadear la pantalla si las aplicaciones tardan mucho en el subproceso principal"</string>
<string name="pointer_location" msgid="7516929526199520173">"Ubicación del puntero"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implementación de WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Establecer implementación de WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Esta opción ya no está disponible. Vuelve a intentarlo."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"DevTools de WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"No se ha encontrado el paquete WebView."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"No se ha podido iniciar DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Modo de color de imagen"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Utiliza sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Inhabilitado"</string>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index 8c5d7fe4a96b..0de019794528 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Ümbritsevate helide seadeid ei saanud värskendada"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktiivne (ainult meedia). Aku <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktiivne (ainult meedia). Aku: V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Külalisseade. Aku: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Külalisseade. Aku: V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Külalisseade (ainult meedia). Aku: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Külalisseade (ainult meedia). Aku: V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Ühendatud (toetab heli jagamist). Aku <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Ühendatud (toetab heli jagamist). Aku: V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Ühendatud (toetab heli jagamist). Vasak: aku <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Ühendatud (toetab heli jagamist). Parem: aku <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Ühendatud (toetab heli jagamist)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Külalisseade (toetab heli jagamist). Aku: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Külalisseade (toetab heli jagamist). Aku: V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Külalisseade (toetab heli jagamist)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktiivne (ainult meedia)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Külalisseade"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Külalisseade (ainult meedia)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Toetab heli jagamist"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Külalisseade. Toetab heli jagamist."</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktiivne (ainult meedia), ainult vasak"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktiivne (ainult meedia), ainult parem"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktiivne (ainult meedia), vasak ja parem"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Riistvarakiirendusega renderdamine"</string>
<string name="media_category" msgid="8122076702526144053">"Meedia"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Jälgimine"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Akende haldamine"</string>
<string name="strict_mode" msgid="889864762140862437">"Range režiim on lubatud"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Ekraan vilgub, kui rakendused teevad pealõimes pikki toiminguid"</string>
<string name="pointer_location" msgid="7516929526199520173">"Kursori asukoht"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView\' rakendamine"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView\' rakendamise seadistamine"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"See valik ei kehti enam. Proovige uuesti."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView\' arendaja tööriistad"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView\' paketti ei leitud."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Ei saanud arendaja tööriistu käivitada."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Pildi värvirežiim"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB kasutamine"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Keelatud"</string>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index a1e46649c3cf..7a8bf56841b6 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Ezin izan da eguneratu ingurunea"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktibo (multimedia-edukia soilik). Bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktibo (multimedia-edukia soilik). L aldearen bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. R aldearen bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Gailu gonbidatua. Bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Gailu gonbidatua. L aldearen bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. R aldearen bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Gailu gonbidatua (multimedia-edukia soilik). Bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Gailu gonbidatua (multimedia-edukia soilik). L aldearen bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. R aldearen bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Konektatuta (audioa partekatzeko eginbidea onartzen du). Bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Konektatuta (audioa partekatzeko eginbidea onartzen du). L aldearen bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. R aldearen bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Konektatuta (audioa partekatzeko eginbidea onartzen du). Ezkerreko aldearen bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Konektatuta (audioa partekatzeko eginbidea onartzen du). Eskuineko aldearen bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Konektatuta (audioa partekatzeko eginbidea onartzen du)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Gailu gonbidatua (audioa partekatzeko eginbidea onartzen du). Bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Gailu gonbidatua (audioa partekatzeko eginbidea onartzen du). L aldearen bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. R aldearen bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Gailu gonbidatua (audioa partekatzeko eginbidea onartzen du)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktibo (multimedia-edukia soilik)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Gailu gonbidatua"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Gailu gonbidatua (multimedia-edukia soilik)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Audioa partekatzeko eginbidea onartzen du"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Gailu gonbidatua. Audioa partekatzeko eginbidea onartzen du."</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktibo (multimedia-edukia soilik); ezkerreko aldea soilik"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktibo (multimedia-edukia soilik); eskuineko aldea soilik"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktibo (multimedia-edukia soilik); ezkerreko eta eskuineko aldeak"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardware bidez azeleratutako errendatzea"</string>
<string name="media_category" msgid="8122076702526144053">"Multimedia-edukia"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Kontrola"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Leihoen kudeaketa"</string>
<string name="strict_mode" msgid="889864762140862437">"Modu zorrotza gaituta"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Distirarazi hari nagusian eragiketa luzeak egitean"</string>
<string name="pointer_location" msgid="7516929526199520173">"Erakuslearen kokapena"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView inplementazioa"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Ezarri WebView inplementazioa"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Jada ez dago erabilgarri aukera hori. Saiatu berriro."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView-ren garatzaileentzako tresnak"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Ez da aurkitu WebView-ko paketea."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Ezin izan dira abiarazi garatzaileentzako tresnak."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Irudiaren kolore modua"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Erabili sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Desgaituta"</string>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index c939180e6f5a..9ba2f3510980 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"پیرامون به‌روز نشد"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"فعال (فقط رسانه). باتری: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"فعال (فقط رسانه). باتری چپ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، باتری راست: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"‏دستگاه مهمان. سطح باتری: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"‏دستگاه مهمان. سطح باتری چپ: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، سطح باتری راست: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"‏دستگاه مهمان (فقط رسانه). سطح باتری: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"‏دستگاه مهمان (فقط رسانه). سطح باتری چپ: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، سطح باتری راست: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"متصل (از اشتراک صدا پشتیبانی می‌کند)، باتری: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"متصل (از اشتراک صدا پشتیبانی می‌کند)، باتری چپ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، باتری راست: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"متصل (از اشتراک صدا پشتیبانی می‌کند). باتری چپ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"متصل (از اشتراک صدا پشتیبانی می‌کند). باتری راست: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"متصل (از اشتراک صدا پشتیبانی می‌کند)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"‏دستگاه مهمان (از «اشتراک صدا» پشتیبانی می‌کند). سطح باتری: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"‏دستگاه مهمان (از «اشتراک صدا» پشتیبانی می‌کند). سطح باتری چپ: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، سطح باتری راست: ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"دستگاه مهمان (از «اشتراک صدا» پشتیبانی می‌کند)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"فعال (فقط رسانه)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"دستگاه مهمان"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"دستگاه مهمان (فقط رسانه)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"از اشتراک صدا پشتیبانی می‌کند"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"دستگاه مهمان. از «اشتراک صدا» پشتیبانی می‌کند"</string>
<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>
@@ -157,7 +147,7 @@
<string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="2477639096903834374">"‏صدای HD"</string>
<string name="bluetooth_profile_hearing_aid" msgid="2607867572569689732">"سمعک"</string>
<string name="bluetooth_profile_le_audio" msgid="1725521360076451751">"صدای کم‌مصرف"</string>
- <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"متصل به سمعک"</string>
+ <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="5757754050938807276">"به سمعک وصل‌شده"</string>
<string name="bluetooth_le_audio_profile_summary_connected" msgid="6916226974453480650">"به «صدای کم‌مصرف» وصل است"</string>
<string name="bluetooth_a2dp_profile_summary_connected" msgid="7422607970115444153">"به رسانه صوتی متصل شد"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="2420981566026949688">"به تلفن صوتی متصل شد"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"پردازش سخت‌افزاری سریع"</string>
<string name="media_category" msgid="8122076702526144053">"رسانه"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"نظارت"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"مدیریت پنجره"</string>
<string name="strict_mode" msgid="889864762140862437">"حالت شدید فعال شد"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"چشمک زدن صفحه هنگام انجام عملیات طولانی توسط برنامه‌ها در رشته اصلی"</string>
<string name="pointer_location" msgid="7516929526199520173">"محل اشاره‌گر"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"اجرای وب‌نما"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"تنظیم اجرای وب‌نما"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"این انتخاب دیگر معتبر نیست. دوباره امتحان کنید."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"‏‫DevTools وب‌نما"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"بسته وب‌نما پیدا نشد."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"‏‫DevTools راه‌اندازی نشد."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"حالت رنگ عکس"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"‏استفاده از sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"غیر فعال"</string>
@@ -620,7 +606,7 @@
<string name="media_transfer_this_device_name_tv" msgid="8508713779441163887">"این تلویزیون"</string>
<string name="media_transfer_dock_speaker_device_name" msgid="2856219597113881950">"بلندگوی پایه اتصال"</string>
<string name="media_transfer_external_device_name" msgid="2588672258721846418">"دستگاه خارجی"</string>
- <string name="media_transfer_default_device_name" msgid="4315604017399871828">"دستگاه متصل"</string>
+ <string name="media_transfer_default_device_name" msgid="4315604017399871828">"دستگاه وصل‌شده"</string>
<string name="media_transfer_this_phone" msgid="7194341457812151531">"این تلفن"</string>
<string name="media_transfer_digital_line_name" msgid="312091711951124301">"S/PDIF"</string>
<string name="media_transfer_analog_line_name" msgid="1841163866716302104">"آنالوگ"</string>
@@ -632,7 +618,7 @@
<string name="media_output_status_device_in_low_power_mode" msgid="8184631698321758451">"برای پخش در اینجا، دستگاه را بیدار کنید"</string>
<string name="media_output_status_unauthorized" msgid="5880222828273853838">"دستگاه برای پخش تأیید نشده است"</string>
<string name="media_output_status_track_unsupported" msgid="5576313219317709664">"نمی‌توان این رسانه را اینجا پخش کرد"</string>
- <string name="tv_media_transfer_connected" msgid="5145011475885290725">"متصل"</string>
+ <string name="tv_media_transfer_connected" msgid="5145011475885290725">"وصل‌شده"</string>
<string name="tv_media_transfer_arc_fallback_title" msgid="3674360098755328601">"HDMI ARC"</string>
<string name="tv_media_transfer_earc_fallback_title" msgid="3098685494578519940">"HDMI eARC"</string>
<string name="tv_media_transfer_arc_subtitle" msgid="1040017851325069082">"‏متصل ازطریق ARC"</string>
@@ -667,7 +653,7 @@
<string name="user_grant_admin_message" msgid="1673791931033486709">"سرپرستان امتیازهای ویژه‌ای دارند که کاربران دیگر ندارند. سرپرست می‌تواند همه کاربران را مدیریت کند، این دستگاه را به‌روز یا بازنشانی کند، تنظیمات را تغییر دهد، همه برنامه‌های نصب‌شده را ببیند، و امتیازهای سرپرست را به دیگران اعطا کند یا از آن‌ها بگیرد."</string>
<string name="user_grant_admin_button" msgid="5441486731331725756">"انتخاب به‌عنوان سرپرست"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"هم اکنون کاربر تنظیم شود؟"</string>
- <string name="user_setup_dialog_message" msgid="269931619868102841">"مطمئن شوید شخص در دسترس است تا دستگاه را بگیرد و فضایش را تنظیم کند"</string>
+ <string name="user_setup_dialog_message" msgid="269931619868102841">"مطمئن شوید آن شخص دردسترس است تا دستگاه را بگیرد و فضای خود را تنظیم کند"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"اکنون نمایه را تنظیم می‌کنید؟"</string>
<string name="user_setup_button_setup_now" msgid="1708269547187760639">"اکنون تنظیم شود"</string>
<string name="user_setup_button_setup_later" msgid="8712980133555493516">"حالا نه"</string>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index d2228824cd04..d1cc76cab9aa 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Ympäristön päivittäminen epäonnistui"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktiivinen (vain media). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> virtaa."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktiivinen (vain media). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, O: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> virtaa."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Vieraslaite. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> virtaa."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Vieraslaite. V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, O: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> virtaa."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Vieraslaite (vain media). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> virtaa."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Vieraslaite (vain media). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, O: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> virtaa."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Yhdistetty (tukee audionjakoa). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> virtaa."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Yhdistetty (tukee audionjakoa). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> virtaa, O: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> virtaa."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Yhdistetty (tukee audionjakoa). Vasen: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> virtaa."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Yhdistetty (tukee audionjakoa). Oikea: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> virtaa."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Yhdistetty (tukee audionjakoa)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Vieraslaite (tukee audionjakoa). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> virtaa."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Vieraslaite (tukee audionjakoa). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, O: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> virtaa."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Vieraslaite (tukee audionjakoa)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktiivinen (vain media)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Vieraslaite"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Vieraslaite (vain media)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Tukee audionjakoa"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Vieraslaite. Tukee audionjakoa"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktiivinen (vain media), vain vasen"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktiivinen (vain media), vain oikea"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktiivinen (vain media), vasen ja oikea"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Laitteistokiihdytetty hahmonnus"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Valvonta"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Ikkunoiden hallinnointi"</string>
<string name="strict_mode" msgid="889864762140862437">"Tiukka tila käytössä"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Vilkuta näyttöä sovellusten tehdessä pitkiä toimia"</string>
<string name="pointer_location" msgid="7516929526199520173">"Osoittimen sijainti"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView-käyttöönotto"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Määritä WebView-käyttöönotto"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Tämä valinta ei ole enää saatavilla. Yritä uudestaan."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView\'n DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView-pakettia ei löydy."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevToolsia ei voitu käynnistää."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Kuvien värit"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Ota sRGB käyttöön"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Poistettu käytöstä"</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index b03e6cb372e2..d83389261c71 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Impossible de mettre à jour les sons de l\'environnement"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Actif (contenu multimédia uniquement). Pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Actif (contenu multimédia uniquement). G. : pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D. : pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Appareil invité. Pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Appareil invité. G. : pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D. : pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Appareil invité (contenu multimédia seulement). Pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Appareil invité (contenu multimédia seulement). G. : pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D. : pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Connecté (prise en charge du partage audio). Pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Connecté (prise en charge du partage audio). G. : pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D. : pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Connecté (prise en charge du partage audio). Gauche : pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Connecté (prise en charge du partage audio). Droite : pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Connecté (prise en charge du partage audio)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Appareil invité (prend en charge le partage audio). Pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Appareil invité (prend en charge le partage audio). G. : pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D. : pile à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Appareil invité (prend en charge le partage audio)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Actif (contenu multimédia uniquement)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Appareil invité"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Appareil invité (contenu multimédia seulement)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Prise en charge du partage audio"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Appareil invité. Prend en charge le partage audio"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Actif (contenu multimédia uniquement), côté gauche seulement"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Actif (contenu multimédia uniquement), côté droit seulement"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Actif (contenu multimédia uniquement), côtés gauche et droit"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Accélération matérielle"</string>
<string name="media_category" msgid="8122076702526144053">"Médias"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Surveillance"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Gestion des fenêtres"</string>
<string name="strict_mode" msgid="889864762140862437">"Mode Strict activé"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Afficher un cadre rouge si le fil principal reste occupé"</string>
<string name="pointer_location" msgid="7516929526199520173">"Emplacement du curseur"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Mise en œuvre WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Définir la mise en œuvre WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Ce choix n\'est plus valide. Réessayez."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Outils pour les développeurs WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Impossible de trouver l\'ensemble WebView."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Impossible de lancer les outils pour développeurs."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Mode couleur des images"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Utiliser sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Désactivé"</string>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 4440126078fd..2fc946b9ed9f 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Impossible de mettre à jour le mode Sons environnants"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Actif (multimédia uniquement). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batterie."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Actif (multimédia uniquement). Gauche : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batterie, droit : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batterie."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Appareil invité. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batterie."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Appareil invité. Gauche : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batterie, droit : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batterie."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Appareil invité (multimédia uniquement). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batterie."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Appareil invité (multimédia uniquement). Gauche : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batterie, droit : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batterie."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Connecté (compatible avec le partage audio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batterie."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Connecté (compatible avec le partage audio). Gauche : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batterie, droit : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batterie."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Connecté (compatible avec le partage audio). Gauche : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batterie."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Connecté (compatible avec le partage audio). Droit : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batterie."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Connecté (compatible avec le partage audio)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Appareil invité (compatible avec le partage audio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batterie."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Appareil invité (compatible avec le partage audio). Gauche : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batterie, droit : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batterie."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Appareil invité (compatible avec le partage audio)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Activé (multimédia uniquement)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Appareil invité"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Appareil invité (multimédia uniquement)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Compatible avec le partage audio"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Appareil invité. Compatible avec le partage audio"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Activé (multimédia uniquement), gauche uniquement"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Activé (multimédia uniquement), droit uniquement"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Activé (multimédia uniquement), gauche et droit"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Rendu accéléré par le matériel"</string>
<string name="media_category" msgid="8122076702526144053">"Multimédia"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Suivi"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Gestion des fenêtres"</string>
<string name="strict_mode" msgid="889864762140862437">"Mode Strict activé"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Faire clignoter l\'écran si le thread principal reste occupé"</string>
<string name="pointer_location" msgid="7516929526199520173">"Emplacement du curseur"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implémentation WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Définir la mise en œuvre WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Ce choix n\'est plus valide. Réessayez."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Outils de développement WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Package WebView introuvable."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Impossible de lancer les outils de développement."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Mode de couleur des images"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Utiliser sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Désactivé"</string>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index 536b91816bc4..b6eacfc33293 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Non se puido actualizar o ambiente"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Activo (só contido multimedia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Activo (só contido multimedia). Esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batería. Dereito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Dispositivo convidado. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Dispositivo convidado. Esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batería. Dereito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Dispositivo convidado (só contido multimedia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Dispositivo convidado (só contido multimedia). Esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batería. Dereito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Conectado (compatible con audio compartido). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Conectado (compatible con audio compartido). Esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batería. Dereito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Conectado (compatible con audio compartido). Esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Conectado (compatible con audio compartido). Dereito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Conectado (compatible con audio compartido)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Dispositivo convidado (compatible con audio compartido). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Dispositivo convidado (compatible con audio compartido). Esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de batería. Dereito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de batería."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Dispositivo convidado (compatible con audio compartido)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Activo (só contido multimedia)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Dispositivo convidado"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Dispositivo convidado (só contido multimedia)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Compatible con audio compartido"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Dispositivo convidado. Compatible con audio compartido"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Activo (só contido multimedia), só esquerdo"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Activo (só contido multimedia), só dereito"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Activo (só contido multimedia), esquerdo e dereito"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Procesamento acelerado mediante hardware"</string>
<string name="media_category" msgid="8122076702526144053">"Multimedia"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Supervisión"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Xestión de ventás"</string>
<string name="strict_mode" msgid="889864762140862437">"Modo estrito activado"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"A pantalla ilumínase se as aplicacións tardan moito no proceso principal"</string>
<string name="pointer_location" msgid="7516929526199520173">"Localización do punteiro"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implementación de WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Definir implementación de WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Esta opción xa non é válida. Téntao de novo."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"DevTools de WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Non se atopou o paquete de WebView."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Non se puido activar DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Modo de cor da imaxe"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Utiliza sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Desactivado"</string>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index 1b4bad383589..57f898210efd 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"આસપાસના અવાજો અપડેટ કરી શક્યા નથી"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"સક્રિય (માત્ર મીડિયા માટે). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> બૅટરી."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"સક્રિય (માત્ર મીડિયા માટે). ડાબી બાજુ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, જમણી બાજુ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> બૅટરી."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"અતિથિ ડિવાઇસ. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> બૅટરી."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"અતિથિ ડિવાઇસ. ડાબી બાજુ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, જમણી બાજુ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> બૅટરી."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"અતિથિ ડિવાઇસ (માત્ર મીડિયા માટે). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> બૅટરી."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"અતિથિ ડિવાઇસ (માત્ર મીડિયા માટે). ડાબી બાજુ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, જમણી બાજુ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> બૅટરી."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"કનેક્ટેડ (ઑડિયો શેરિંગને સપોર્ટ કરે છે). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> બૅટરી."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"કનેક્ટેડ (ઑડિયો શેરિંગને સપોર્ટ કરે છે). ડાબી બાજુ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, જમણી બાજુ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> બૅટરી."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"કનેક્ટેડ (ઑડિયો શેરિંગને સપોર્ટ કરે છે). ડાબી બાજુ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> બૅટરી."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"કનેક્ટેડ (ઑડિયો શેરિંગને સપોર્ટ કરે છે). જમણી બાજુ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> બૅટરી."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"કનેક્ટેડ (ઑડિયો શેરિંગને સપોર્ટ કરે છે)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"અતિથિ ડિવાઇસ (ઑડિયો શેરિંગને સપોર્ટ કરે છે). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> બૅટરી."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"અતિથિ ડિવાઇસ (ઑડિયો શેરિંગને સપોર્ટ કરે છે). ડાબી બાજુ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, જમણી બાજુ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> બૅટરી."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"અતિથિ ડિવાઇસ (ઑડિયો શેરિંગને સપોર્ટ કરે છે)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"સક્રિય છે (માત્ર મીડિયા માટે)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"અતિથિ ડિવાઇસ"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"અતિથિ ડિવાઇસ (માત્ર મીડિયા માટે)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"ઑડિયો શેરિંગને સપોર્ટ કરે છે"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"અતિથિ ડિવાઇસ. ઑડિયો શેરિંગને સપોર્ટ કરે છે"</string>
<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>
@@ -177,7 +167,7 @@
<string name="bluetooth_hid_profile_summary_use_for" msgid="4289460627406490952">"ઇનપુટ માટે ઉપયોગ કરો"</string>
<string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="3374057355721486932">"સાંભળવામાં મદદ આપતા યંત્રો માટે ઉપયોગ કરો"</string>
<string name="bluetooth_le_audio_profile_summary_use_for" msgid="2778318636027348572">"LE_AUDIO માટે ઉપયોગ કરો"</string>
- <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"જોડી કરો"</string>
+ <string name="bluetooth_pairing_accept" msgid="2054232610815498004">"જોડાણ કરો"</string>
<string name="bluetooth_pairing_accept_all_caps" msgid="2734383073450506220">"જોડી કરો"</string>
<string name="bluetooth_pairing_decline" msgid="6483118841204885890">"રદ કરો"</string>
<string name="bluetooth_pairing_will_share_phonebook" msgid="3064334458659165176">"એ કનેક્ટ કરેલ હોય ત્યારે જોડાણ બનાવવાથી તમારા સંપર્કો અને કૉલ ઇતિહાસનો અ‍ૅક્સેસ મળે છે."</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"હાર્ડવેર પ્રવેગક રેન્ડરિંગ"</string>
<string name="media_category" msgid="8122076702526144053">"મીડિયા"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"નિરિક્ષણ કરી રહ્યું છે"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"વિન્ડો મેનેજમેન્ટ"</string>
<string name="strict_mode" msgid="889864762140862437">"સ્ટ્રિક્ટ મોડ ચાલુ કરેલો છે"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"જ્યારે મુખ્ય થ્રેડ પર ઍપ લાંબી કામગીરીઓ કરે ત્યારે સ્ક્રીનને ફ્લેશ કરો"</string>
<string name="pointer_location" msgid="7516929526199520173">"પૉઇન્ટર લોકેશન"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView અમલીકરણ"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView અમલીકરણ સેટ કરો"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"આ વિકલ્પ હવે માન્ય નથી. ફરી પ્રયાસ કરો."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView પૅકેજ મળ્યું નથી."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools લૉન્ચ કરી શક્યા નથી."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"ચિત્ર રંગ મોડ"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB નો ઉપયોગ કરો"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"બંધ"</string>
@@ -666,20 +652,20 @@
<string name="user_grant_admin_title" msgid="5157031020083343984">"આ વપરાશકર્તાને ઍડમિન બનાવવા છે?"</string>
<string name="user_grant_admin_message" msgid="1673791931033486709">"ઍડમિન પાસે વિશિષ્ટ વિશેષાધિકારો હોય છે જે અન્ય વપરાશકર્તાઓ પાસે હોતા નથી. ઍડમિન બધા વપરાશકર્તાઓને મેનેજ કરી શકે, આ ડિવાઇસને અપડેટ અથવા રીસેટ કરી શકે, સેટિંગમાં ફેરફાર કરી શકે, ઇન્સ્ટૉલ કરેલી બધી ઍપ જોઈ શકે અને અન્ય લોકોને ઍડમિનના અધિકારો આપી શકે અથવા તેમને રદબાતલ કરી શકે."</string>
<string name="user_grant_admin_button" msgid="5441486731331725756">"ઍડમિન બનાવો"</string>
- <string name="user_setup_dialog_title" msgid="8037342066381939995">"અત્યારે જ વપરાશકર્તાને સેટ અપ કરીએ?"</string>
+ <string name="user_setup_dialog_title" msgid="8037342066381939995">"વપરાશકર્તાને હમણાં જ સેટ અપ કરીએ?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"ખાતરી કરો કે વ્યક્તિ ડિવાઇસ લેવા અને તેમના સ્થાનનું સેટ અપ કરવા માટે ઉપલબ્ધ છે"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"હવે પ્રોફાઇલ સેટ કરીએ?"</string>
- <string name="user_setup_button_setup_now" msgid="1708269547187760639">"હવે સેટ કરો"</string>
+ <string name="user_setup_button_setup_now" msgid="1708269547187760639">"હમણાં જ સેટ અપ કરો"</string>
<string name="user_setup_button_setup_later" msgid="8712980133555493516">"હમણાં નહીં"</string>
<string name="user_add_user_type_title" msgid="551279664052914497">"ઉમેરો"</string>
<string name="user_new_user_name" msgid="60979820612818840">"નવો વપરાશકર્તા"</string>
<string name="user_new_profile_name" msgid="2405500423304678841">"નવી પ્રોફાઇલ"</string>
- <string name="user_info_settings_title" msgid="6351390762733279907">"વપરાશકર્તા માહિતી"</string>
+ <string name="user_info_settings_title" msgid="6351390762733279907">"વપરાશકર્તાની માહિતી"</string>
<string name="profile_info_settings_title" msgid="105699672534365099">"પ્રોફાઇલ માહિતી"</string>
<string name="user_need_lock_message" msgid="4311424336209509301">"તમે પ્રતિબંધિત પ્રોફાઇલ બનાવી શકો તે પહેલાં, તમારે તમારી ઍપ્લિકેશનો અને વ્યક્તિગત ડેટાની સુરક્ષા માટે એક લૉક સ્ક્રીન સેટ કરવાની જરૂર પડશે."</string>
<string name="user_set_lock_button" msgid="1427128184982594856">"લૉક સેટ કરો"</string>
<string name="user_switch_to_user" msgid="6975428297154968543">"<xliff:g id="USER_NAME">%s</xliff:g> પર સ્વિચ કરો"</string>
- <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"નવા વપરાશકર્તા બનાવી રહ્યાં છીએ…"</string>
+ <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"નવો વપરાશકર્તા બનાવી રહ્યાં છીએ…"</string>
<string name="creating_new_guest_dialog_message" msgid="1114905602181350690">"નવા અતિથિની પ્રોફાઇલ બનાવી રહ્યાં છીએ…"</string>
<string name="add_user_failed" msgid="4809887794313944872">"નવો વપરાશકર્તા બનાવવામાં નિષ્ફળ"</string>
<string name="add_guest_failed" msgid="8074548434469843443">"નવી અતિથિ બનાવવામાં નિષ્ફળ રહ્યાં"</string>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index 55d425fa7b38..02bc92be8899 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"वॉल्यूम को मैनेज करने की सेटिंग नहीं बदली जा सकी"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"चालू है (सिर्फ़ मीडिया के लिए). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बैटरी."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"चालू है (सिर्फ़ मीडिया के लिए). बायां हेडसेट: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, दायां हेडसेट: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> बैटरी."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"मेहमान मोड में इस्तेमाल किया जा रहा डिवाइस. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बैटरी."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"मेहमान मोड में इस्तेमाल किया जा रहा डिवाइस. बायां हेडसेट: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> बैटरी, दायां हेडसेट:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> बैटरी."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"मेहमान मोड में इस्तेमाल किए जा रहे डिवाइस के पास सिर्फ़ मीडिया का ऐक्सेस होता है. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बैटरी."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"मेहमान मोड में इस्तेमाल किए जा रहे डिवाइस के पास सिर्फ़ मीडिया का ऐक्सेस होता है. बायां हेडसेट: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> बैटरी, दायां हेडसेट:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> बैटरी."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"कनेक्ट हो गया (ऑडियो शेयर करने की सुविधा काम करती है). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बैटरी."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"कनेक्ट हो गया (ऑडियो शेयर करने की सुविधा काम करती है). बायां हेडसेट: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, दायां हेडसेट: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> बैटरी."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"कनेक्ट हो गया (ऑडियो शेयर करने की सुविधा काम करती है). बायां हेडसेट: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बैटरी."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"कनेक्ट हो गया (ऑडियो शेयर करने की सुविधा काम करती है). दायां हेडसेट: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बैटरी."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"कनेक्ट है (ऑडियो शेयर करने की सुविधा काम करती है)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"मेहमान मोड में इस्तेमाल किए जा रहे डिवाइस में ऑडियो शेयर करने की सुविधा काम करती है. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बैटरी."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"मेहमान मोड में इस्तेमाल किए जा रहे डिवाइस में ऑडियो शेयर करने की सुविधा काम करती है. बायां हेडसेट: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> बैटरी, दायां हेडसेट:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> बैटरी."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"मेहमान मोड में इस्तेमाल किए जा रहे डिवाइस में ऑडियो शेयर करने की सुविधा काम करती है"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"चालू है (सिर्फ़ मीडिया के लिए)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"मेहमान मोड में इस्तेमाल किया जा रहा डिवाइस"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"मेहमान मोड में इस्तेमाल किए जा रहे डिवाइस के पास सिर्फ़ मीडिया का ऐक्सेस होता है"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"ऑडियो शेयर करने की सुविधा काम करती है"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"मेहमान मोड में इस्तेमाल किया जा रहा डिवाइस. ऑडियो शेयर करने की सुविधा काम करती है"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"हार्डवेयर ऐक्सेलरेटेड रेंडरिंग"</string>
<string name="media_category" msgid="8122076702526144053">"मीडिया"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"निगरानी"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Window Management"</string>
<string name="strict_mode" msgid="889864762140862437">"स्ट्रिक्ट मोड चालू रखें"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"थ्रेड पर लंबा प्रोसेस होने पर स्‍क्रीन फ़्लैश करें"</string>
<string name="pointer_location" msgid="7516929526199520173">"पॉइंटर की जगह"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"वेबव्यू लागू करें"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"वेबव्यू सेट करें"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"यह चुनाव अब मान्य नहीं है. दोबारा कोशिश करें."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"वेबव्यू DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"वेबव्यू पैकेज नहीं मिला."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools लॉन्च नहीं किया जा सका."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"चित्र रंग मोड"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB का उपयोग करें"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"बंद"</string>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 97f2df6a7632..15eb4710cbf8 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Ažuriranje okruženja nije uspjelo"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktivno (samo medijski sadržaji). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktivno (samo medijski sadržaji), L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Gostujući uređaj. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Gostujući uređaj. L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Gostujući uređaj (samo medijski sadržaji). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Gostujući uređaj (samo medijski sadržaji). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Povezano (podržava zajedničko slušanje). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Povezano (podržava zajedničko slušanje), L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Povezano (podržava zajedničko slušanje). Lijeva strana: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Povezano (podržava zajedničko slušanje). Desna strana: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Povezano (podržava zajedničko slušanje)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Gostujući uređaj (podržava zajedničko slušanje). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Gostujući uređaj (podržava zajedničko slušanje). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterije."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Gostujući uređaj (podržava zajedničko slušanje)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktivno (samo medijski sadržaji)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Gostujući uređaj"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Gostujući uređaj (samo medijski sadržaji)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Podržava zajedničko slušanje"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Gostujući uređaj. Podržava zajedničko slušanje"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktivno (samo medijski sadržaji), samo lijeva"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktivno (samo medijski sadržaji), samo desna"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktivno (samo medijski sadržaji), lijeva i desna"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardverski ubrzano renderiranje"</string>
<string name="media_category" msgid="8122076702526144053">"Mediji"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Nadzor"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Upravljanje prozorima"</string>
<string name="strict_mode" msgid="889864762140862437">"Omogućen strogi način"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Zaslon bljeska kada operacije aplikacija u glavnoj niti dugo traju"</string>
<string name="pointer_location" msgid="7516929526199520173">"Mjesto pokazivača"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implementacija WebViewa"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Postavi implementaciju WebViewa"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Taj izbor više nije važeći. Pokušajte ponovo."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView razvojni alati"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView paket nije pronađen."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Nije moguće pokrenuti razvojne alate."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Način boje slike"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Upotrijebi sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Onemogućeno"</string>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 5e97cff03a79..08ae0f870a9e 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Nem sikerült módosítani a környezetet"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktív (csak médiatartalom lejátszása esetén). Akkumulátor töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktív (csak médiatartalom lejátszása esetén). Akkumulátorok töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (bal) és <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (jobb)."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Vendégeszköz. Akkumulátor töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Vendégeszköz. Akkumulátorok töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (bal) és <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (jobb)."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Vendégeszköz (csak médiatartalom lejátszása esetén). Akkumulátor töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Vendégeszköz (csak médiatartalom lejátszása esetén). Akkumulátorok töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (bal) és <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (jobb)."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Csatlakoztatva (támogatja a hang megosztását). Akkumulátor töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Csatlakoztatva (támogatja a hang megosztását). Akkumulátorok töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (bal) és <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (jobb)."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Csatlakoztatva (támogatja a hang megosztását). Akkumulátor töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> (bal)."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Csatlakoztatva (támogatja a hang megosztását). Akkumulátor töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> (jobb)."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Csatlakoztatva (támogatja a hang megosztását)."</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Vendégeszköz (támogatja a hang megosztását). Akkumulátor töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Vendégeszköz (támogatja a hang megosztását). Akkumulátorok töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (bal) és <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (jobb)."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Vendégeszköz (támogatja a hang megosztását)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktív (csak médiatartalom lejátszása)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Vendégeszköz"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Vendégeszköz (csak médiatartalom lejátszása esetén)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Támogatja a hang megosztását"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Vendégeszköz. Támogatja a hang megosztását"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktív (csak médiatartalom lejátszása), csak a bal"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktív (csak médiatartalom lejátszása), csak a jobb"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktív (csak médiatartalom lejátszása), bal és jobb"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardveres gyorsítású megjelenítés"</string>
<string name="media_category" msgid="8122076702526144053">"Média"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Figyelés"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Ablakkezelés"</string>
<string name="strict_mode" msgid="889864762140862437">"Szigorú mód engedélyezve"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Képernyővillogás a fő szál hosszú műveleteinél"</string>
<string name="pointer_location" msgid="7516929526199520173">"Mutató helye"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView-megvalósítás"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView-megvalósítás beállítása"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Ez a választás már nem érvényes. Próbálkozzon újra."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"A WebView-csomag nem található."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Nem sikerült elindítani a DevTools eszközt."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Kép színe mód"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB használata"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Letiltva"</string>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index d3427172c74c..347101354a3b 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Չհաջողվեց թարմացնել շրջակայքի կարգավիճակը"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Ակտիվ է (միայն մեդիա)։ Մարտկոցի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>։"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Ակտիվ է (միայն մեդիա)։ Ձախ ականջակալի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, աջ ականջակալի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>։"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Հյուրի սարք։ Մարտկոցի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>։"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Հյուրի սարք։ Ձախ ականջակալի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, աջ ականջակալի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>։"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Հյուրի սարք (միայն մուլտիմեդիա)։ Մարտկոցի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>։"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Հյուրի սարք (միայն մուլտիմեդիա)։ Ձախ ականջակալի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, աջ ականջակալի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>։"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Միացված է (աջակցում է աուդիոյի փոխանցում)։ Մարտկոցի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>։"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Միացված է (աջակցում է աուդիոյի փոխանցում)։ Ձախ ականջակալի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, աջ ականջակալի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>։"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Միացված է (աջակցում է աուդիոյի փոխանցում)։ Ձախ ականջակալի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>։"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Միացված է (աջակցում է աուդիոյի փոխանցում)։ Աջ ականջակալի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>։"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Միացված է (աջակցում է աուդիոյի փոխանցում)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Հյուրի սարք (աջակցում է աուդիոյի փոխանցում)։ Մարտկոցի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>։"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Հյուրի սարք (աջակցում է աուդիոյի փոխանցում)։ Ձախ ականջակալի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, աջ ականջակալի լիցքը՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>։"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Հյուրի սարք (աջակցում է աուդիոյի փոխանցում)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Ակտիվ է (միայն մեդիա)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Հյուրի սարք"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Հյուրի սարք (միայն մուլտիմեդիա)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Աջակցում է աուդիոյի փոխանցում"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Հյուրի սարք։ Աջակցում է աուդիոյի փոխանցում։"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Սարքաշարի արագացված նյութավորում"</string>
<string name="media_category" msgid="8122076702526144053">"Մեդիա"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Մշտադիտարկում"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Պատուհանների կառավարում"</string>
<string name="strict_mode" msgid="889864762140862437">"Խիստ ռեժիմն ակտիվացված է"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Լուսավորել էկրանը` ծրագրի գլխավոր շղթայի վրա երկար աշխատելիս"</string>
<string name="pointer_location" msgid="7516929526199520173">"Նշորդի տեղադրությունը"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView ծառայություն"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Ընտրեք WebView-ի իրականացումը"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Այս ընտրանքն այլևս վավեր չէ: Փորձեք նորից:"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView-ի ծրագրավորողի գործիքներ"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView փաթեթը չի գտնվել։"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Չհաջողվեց գործարկել ծրագրավորողի գործիքները։"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Նկարի գունային ռեժիմ"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Օգտագործել sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Կասեցված է"</string>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 649ee0bb9f47..85109fcf1677 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Tidak dapat memperbarui suara sekitar"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktif (hanya media). Baterai <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktif (hanya media). Baterai L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Perangkat tamu. Baterai <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Perangkat tamu. Baterai L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Perangkat tamu (hanya media). Baterai <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Perangkat tamu (hanya media). Baterai L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Terhubung (mendukung berbagi audio). Baterai <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Terhubung (mendukung berbagi audio). Baterai L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Terhubung (mendukung berbagi audio). Kiri: Baterai <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Terhubung (mendukung berbagi audio). Kanan: Baterai <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Terhubung (mendukung berbagi audio)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Perangkat tamu (mendukung berbagi audio). Baterai <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Perangkat tamu (mendukung berbagi audio). Baterai L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Perangkat tamu (mendukung berbagi audio)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktif (hanya media)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Perangkat tamu"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Perangkat tamu (hanya media)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Mendukung berbagi audio"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Perangkat tamu. Mendukung berbagi audio"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktif (hanya media), hanya kiri"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktif (hanya media), hanya kanan"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktif (hanya media), kiri dan kanan"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Render yang dipercepat hardware"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Pemantauan"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Pengelolaan Jendela"</string>
<string name="strict_mode" msgid="889864762140862437">"Mode ketat diaktifkan"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Buat layar berkedip saat aplikasi berlama-lama menjalankan operasi di thread utama"</string>
<string name="pointer_location" msgid="7516929526199520173">"Lokasi kursor"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Penerapan WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Setel penerapan WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Pilihan ini tidak valid lagi. Coba lagi."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"DevTools WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Paket WebView tidak ditemukan."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Tidak dapat meluncurkan DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Mode warna gambar"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Gunakan sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Dinonaktifkan"</string>
@@ -679,7 +665,7 @@
<string name="user_need_lock_message" msgid="4311424336209509301">"Sebelum dapat membuat profil yang dibatasi, Anda perlu menyiapkan kunci layar untuk melindungi aplikasi dan data pribadi Anda."</string>
<string name="user_set_lock_button" msgid="1427128184982594856">"Setel kunci"</string>
<string name="user_switch_to_user" msgid="6975428297154968543">"Beralih ke <xliff:g id="USER_NAME">%s</xliff:g>"</string>
- <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"Membuat pengguna baru …"</string>
+ <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"Membuat pengguna baru…"</string>
<string name="creating_new_guest_dialog_message" msgid="1114905602181350690">"Membuat tamu baru…"</string>
<string name="add_user_failed" msgid="4809887794313944872">"Gagal membuat pengguna baru"</string>
<string name="add_guest_failed" msgid="8074548434469843443">"Gagal membuat tamu baru"</string>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index d36115729889..3041151c617e 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Ekki var hægt að uppfæra umhverfi"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Virkt (eingöngu margmiðlunarefni). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> rafhlöðuhleðsla."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Virkt (eingöngu margmiðlunarefni), V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> rafhlöðuhleðsla."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Gestatæki. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> rafhlöðuhleðsla."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Gestatæki. V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> rafhlöðuhleðsla."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Gestatæki (aðeins margmiðlunarefni). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> rafhlöðuhleðsla."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Gestatæki (aðeins margmiðlunarefni). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> rafhlöðuhleðsla."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Tengt (styður hljóðdeilingu), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> rafhlöðuhleðsla."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Tengt (styður hljóðdeilingu), V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> rafhlöðuhleðsla."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Tengt (styður hljóðdeilingu). Vinstri: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> rafhlöðuhleðsla."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Tengt (styður hljóðdeilingu). Hægri: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> rafhlöðuhleðsla."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Tengt (styður hljóðdeilingu)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Gestatæki (styður hljóðdeilingu). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> rafhlöðuhleðsla."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Gestatæki (styður hljóðdeilingu). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> rafhlöðuhleðsla."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Gestatæki (styður hljóðdeilingu)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Virkt (eingöngu margmiðlunarefni)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Gestatæki"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Gestatæki (aðeins margmiðlunarefni)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Styður hljóðdeilingu"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Gestatæki. Styður hljóðdeilingu"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Virkt (eingöngu margmiðlunarefni), eingöngu vinstri"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Virkt (eingöngu margmiðlunarefni), eingöngu hægri"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Virkt (eingöngu margmiðlunarefni), vinstri og hægri"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Myndþýðing með vélbúnaðarhröðun"</string>
<string name="media_category" msgid="8122076702526144053">"Margmiðlun"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Eftirlit"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Gluggastjórnun"</string>
<string name="strict_mode" msgid="889864762140862437">"Kveikt á strangri stillingu"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Blikka skjá ef forrit gera tímafreka hluti á aðalþræði"</string>
<string name="pointer_location" msgid="7516929526199520173">"Staðsetning bendils"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Innleiðing WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Stilla innleiðingu WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Þetta val er ekki lengur gilt. Reyndu aftur."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView-pakki fannst ekki."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Ekki tókst að ræsa DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Litastilling mynda"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Nota sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Óvirkt"</string>
@@ -667,7 +653,7 @@
<string name="user_grant_admin_message" msgid="1673791931033486709">"Stjórnendur hafa tiltekin réttindi sem aðrir notendur hafa ekki. Stjórnandi getur stjórnað öllum notendum, uppfært eða endurstillt þetta tæki, breytt stillingum, séð öll uppsett forrit og veitt eða afturkallað stjórnandaheimildir annarra."</string>
<string name="user_grant_admin_button" msgid="5441486731331725756">"Gera að stjórnanda"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"Setja notanda upp núna?"</string>
- <string name="user_setup_dialog_message" msgid="269931619868102841">"Gakktu úr skugga um að notandinn geti tekið tækið og sett upp sitt svæði"</string>
+ <string name="user_setup_dialog_message" msgid="269931619868102841">"Sjáðu til þess að notandinn geti tekið tækið og sett upp sitt svæði"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Setja upp snið núna?"</string>
<string name="user_setup_button_setup_now" msgid="1708269547187760639">"Setja upp núna"</string>
<string name="user_setup_button_setup_later" msgid="8712980133555493516">"Ekki núna"</string>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index 98e415b7c6ef..c42cab36f30d 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Impossibile aggiornare audio ambientale"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Attivo (solo contenuti multimediali). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> di batteria."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Attivo (solo contenuti multimediali). S: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> di batteria. D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> di batteria."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Dispositivo ospite. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> di batteria."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Dispositivo ospite. S: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> di batteria. D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> di batteria."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Dispositivo ospite (solo contenuti multimediali). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> di batteria."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Dispositivo ospite (solo contenuti multimediali). S: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> di batteria. D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> di batteria."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Connesso (supporta la condivisione audio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> di batteria."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Connesso (supporta la condivisione audio). S: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> di batteria. D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> di batteria."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Connesso (supporta la condivisione audio). Sinistro: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> di batteria."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Connesso (supporta la condivisione audio). Destro: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> di batteria."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Connesso (supporta la condivisione audio)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Dispositivo ospite (supporta la condivisione audio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> di batteria."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Dispositivo ospite (supporta la condivisione audio). S: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> di batteria. D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> di batteria."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Dispositivo ospite (supporta la condivisione audio)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Attivo (solo contenuti multimediali)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Dispositivo ospite"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Dispositivo ospite (solo contenuti multimediali)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Supporta la condivisione audio"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Dispositivo ospite. Supporta la condivisione audio"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Attivo (solo contenuti multimediali), solo sinistro"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Attivo (solo contenuti multimediali), solo destro"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Attivo (solo contenuti multimediali), sinistro e destro"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Rendering con accelerazione hardware"</string>
<string name="media_category" msgid="8122076702526144053">"Contenuti multimediali"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitoraggio"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Gestione delle finestre"</string>
<string name="strict_mode" msgid="889864762140862437">"Attiva StrictMode"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Fai lampeggiare lo schermo per operazioni lunghe sul thread principale"</string>
<string name="pointer_location" msgid="7516929526199520173">"Posizione puntatore"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implementazione di WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Imposta l\'implementazione di WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"La selezione non è più valida. Riprova."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView di DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Pacchetto WebView non trovato."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Impossibile avviare DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Modalità colori immagini"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Usa sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Disattivato"</string>
@@ -521,7 +507,7 @@
<string name="power_discharge_by_only_enhanced" msgid="3268796172652988877">"Ora stimata esaurimento batteria in base al tuo utilizzo: <xliff:g id="TIME">%1$s</xliff:g> circa"</string>
<string name="power_discharge_by" msgid="4113180890060388350">"Ora stimata esaurimento batteria: <xliff:g id="TIME">%1$s</xliff:g> circa (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
<string name="power_discharge_by_only" msgid="92545648425937000">"Ora stimata esaurimento batteria: <xliff:g id="TIME">%1$s</xliff:g> circa"</string>
- <string name="power_discharge_by_only_short" msgid="5883041507426914446">"Fino a: <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_discharge_by_only_short" msgid="5883041507426914446">"Fino alle ore: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_suggestion_battery_run_out" msgid="6332089307827787087">"La batteria potrebbe esaurirsi entro le <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration_only" msgid="8956656616031395152">"Carica residua: meno di <xliff:g id="THRESHOLD">%1$s</xliff:g>"</string>
<string name="power_remaining_less_than_duration" msgid="318215464914990578">"Carica residua: meno di <xliff:g id="THRESHOLD">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index b341c4d199fb..d4c0773ae5f0 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"לא ניתן לעדכן את עוצמת הרעשים בסביבה"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"פעיל (מדיה בלבד). סוללה: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"פעיל (מדיה בלבד). סוללה בצד שמאל: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, סוללה בצד ימין: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"מכשיר אורח. סוללה: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"מכשיר אורח. סוללה בצד שמאל: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. סוללה בצד ימין: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"מכשיר אורח (מדיה בלבד). סוללה: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"מכשיר אורח (מדיה בלבד). סוללה בצד שמאל: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. סוללה בצד ימין: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"מחובר (תמיכה בשיתוף אודיו). סוללה: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"מחובר (תמיכה בשיתוף אודיו). סוללה בצד שמאל: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, סוללה בצד ימין: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"מחובר (תמיכה בשיתוף אודיו). סוללה בצד שמאל: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"מחובר (תמיכה בשיתוף אודיו). סוללה בצד ימין: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"מחובר (תמיכה בשיתוף אודיו)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"מכשיר אורח (תומך בשיתוף אודיו). סוללה: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"מכשיר אורח (תומך בשיתוף אודיו). סוללה בצד שמאל: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. סוללה בצד ימין: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"מכשיר אורח (תומך בשיתוף אודיו)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"פעיל (מדיה בלבד)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"מכשיר אורח"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"מכשיר אורח (מדיה בלבד)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"תמיכה בשיתוף אודיו"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"מכשיר אורח. תומך בשיתוף אודיו."</string>
<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>
@@ -492,12 +482,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"‏יישום WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"‏הגדרת יישום WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"אפשרות זו כבר אינה תקפה. אפשר לנסות שוב."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"‏כלי פיתוח של WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"‏לא נמצאה חבילת WebView."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"לא ניתן היה להפעיל את כלי הפיתוח."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"מצב צבע התמונה"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"‏שימוש ב-sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"מושבת"</string>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 2e36d6a3d291..bb997ff6294d 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"周囲の音を更新できませんでした"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"有効(メディアのみ)。バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"有効(メディアのみ)。左: バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>、右: バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"ゲストデバイス。バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"ゲストデバイス。左: バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>、右: バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"ゲストデバイス(メディアのみ)。バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"ゲストデバイス(メディアのみ)。左: バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>、右: バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"接続済み(音声の共有をサポート)。バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"接続済み(音声の共有をサポート)。左: バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>、右: バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"接続済み(音声の共有をサポート)。左: バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"接続済み(音声の共有をサポート)。右: バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"接続済み(音声の共有をサポート)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"ゲストデバイス(音声の共有をサポート)。バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"ゲストデバイス(音声の共有をサポート)。左: バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>、右: バッテリー残量 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"ゲストデバイス(音声の共有をサポート)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"有効(メディアのみ)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"ゲストデバイス"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"ゲストデバイス(メディアのみ)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"音声の共有をサポートしています"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"ゲストデバイス。音声の共有をサポートしています"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"ハードウェアアクセラレーテッドレンダリング"</string>
<string name="media_category" msgid="8122076702526144053">"メディア"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"モニタリング"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"ウィンドウ管理"</string>
<string name="strict_mode" msgid="889864762140862437">"厳格モードを有効にする"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"メインスレッドの処理が長引く場合は画面を点滅させる"</string>
<string name="pointer_location" msgid="7516929526199520173">"ポインタの位置"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView の実装"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView の実装の設定"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"この選択は無効になりました。もう一度お試しください。"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView の DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView パッケージが見つかりません。"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools を起動できませんでした。"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"画像の色モード"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGBを使用"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"無効"</string>
diff --git a/packages/SettingsLib/res/values-ka/arrays.xml b/packages/SettingsLib/res/values-ka/arrays.xml
index 3ecf9d86e2b3..1e80d4238f50 100644
--- a/packages/SettingsLib/res/values-ka/arrays.xml
+++ b/packages/SettingsLib/res/values-ka/arrays.xml
@@ -297,13 +297,13 @@
<string-array name="shade_display_awareness_summaries">
<item msgid="2964753205732912921">"ჩრდილის ჩვენება მხოლოდ მოწყობილობის ეკრანზე"</item>
<item msgid="1955398604822147783">"ჩრდილის ჩვენება ერთ გარე ეკრანზე"</item>
- <item msgid="391477482416751568">"ეკრანზე ჩრდილის ჩვენება, რომლის სტატუსის ზოლთანაც მოხდა ბოლო ინტერაქცია"</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">"ფოკუსირებული_ეკრანი"</item>
+ <item msgid="4313165186636015195">"focused_display"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index e627b794d9a5..91e8889acfa5 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"გარემოცვის განახლება ვერ მოხერხდა"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"აქტიური (მხოლოდ მედია). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>%% ბატარეა."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"აქტიური (მხოლოდ მედია), მარცხენა: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, მარჯვენა:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ბატარეა."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"სტუმარი მოწყობილობა. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ბატარეა."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"სტუმარი მოწყობილობა. მარცხენა: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, მარჯვენა: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ბატარეა."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"სტუმარი მოწყობილობა (მხოლოდ მედია). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ბატარეა."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"სტუმარი მოწყობილობა (მხოლოდ მედია). მარცხენა: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, მარჯვენა: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ბატარეა."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"დაკავშირებული (აუდიოს გაზიარება მხარდაჭერილია). ბატარეა <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"დაკავშირებული (აუდიოს გაზიარება მხარდაჭერილია). მარცხენა: ბატარეა <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, მარჯვენა: ბატარეა <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"დაკავშირებული (აუდიოს გაზიარება მხარდაჭერილია). მარცხენა: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ბატარეა."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"დაკავშირებული (აუდიოს გაზიარება მხარდაჭერილია). მარჯვენა: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ბატარეა."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"დაკავშირებული (აუდიოს გაზიარება მხარდაჭერილია)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"სტუმარი მოწყობილობა (აუდიოს გაზიარება მხარდაჭერილია). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ბატარეა."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"სტუმარი მოწყობილობა (აუდიოს გაზიარება მხარდაჭერილია). მარცხენა: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, მარჯვენა: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ბატარეა."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"სტუმარი მოწყობილობა (აუდიოს გაზიარება მხარდაჭერილია)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"აქტიური (მხოლოდ მედია)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"სტუმარი მოწყობილობა"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"სტუმარი მოწყობილობა (მხოლოდ მედია)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"აუდიოს გაზიარება მხარდაჭერილია"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"სტუმარი მოწყობილობა. აუდიოს გაზიარება მხარდაჭერილია"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"აპარატურით დაჩქარებული გამოსახულება"</string>
<string name="media_category" msgid="8122076702526144053">"მედია"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"მონიტორინგი"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"ფანჯრების მართვა"</string>
<string name="strict_mode" msgid="889864762140862437">"მკაცრი რეჟიმი ჩართულია"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"ეკრანის აციმციმება, როცა აპები ახორციელებენ ხანგრძლივ ოპერაციებს მთავარ ნაკადზე"</string>
<string name="pointer_location" msgid="7516929526199520173">"მაჩვენებლის მდებარეობა"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView რეალიზაცია"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView რეალიზაციის დაყენება"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"თქვენი არჩევანი აღარ მოქმედებს. ცადეთ ხელახლა."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView-ის პაკეტი ვერ მოიძებნა"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools-ის გაშვება ვერ მოხერხდა"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"გამოსახულების ფერების რეჟიმი"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB-ს გამოყენება"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"გამორთულია"</string>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index a85e6245fa60..25c92de40657 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Айналаны жаңарту мүмкін болмады."</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Істеп тұр (тек мультимедиа). Батарея зарядының деңгейі – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Істеп тұр (тек мультимедиа). Сол жақ: батарея зарядының деңгейі — <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. Оң жақ: батарея зарядының деңгейі — <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Қонақ құрылғы. Батарея зарядының деңгейі – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Қонақ құрылғы. Сол жақ: батарея зарядының деңгейі – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. Оң жақ: батарея зарядының деңгейі — <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Қонақ құрылғы (тек медиафайл). Батарея зарядының деңгейі – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Қонақ құрылғы (тек медиафайл). Сол жақ: батарея зарядының деңгейі – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. Оң жақ: батарея зарядының деңгейі — <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Жалғанып тұр (аудио бөлісу мүмкіндігі бар). Батарея зарядының деңгейі – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Қосылды (аудио бөлісуге мүмкіндік береді). Сол жақ: батарея зарядының деңгейі — <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. Оң жақ: батарея зарядының деңгейі — <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Қосылды (аудио бөлісуге мүмкіндік береді). Сол жақ: батарея зарядының деңгейі – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Қосылды (аудио бөлісуге мүмкіндік береді). Оң жақ: батарея зарядының деңгейі – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Жалғанды (аудио бөлісу мүмкіндігі бар)."</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Қонақ құрылғы (аудио бөлісуге мүмкіндік береді). Батарея зарядының деңгейі – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Қонақ құрылғы (аудио бөлісуге мүмкіндік береді). Сол жақ: батарея зарядының деңгейі – <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. Оң жақ: батарея зарядының деңгейі — <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Қонақ құрылғы (аудио бөлісуге мүмкіндік береді)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Істеп тұр (тек мультимедиа)."</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Қонақ құрылғы"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Қонақ құрылғы (тек медиафайл)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Аудио бөлісуге мүмкіндік береді."</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Қонақ құрылғы. Аудио бөлісуге мүмкіндік береді."</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Бейнелеуді аппаратпен жеделдету"</string>
<string name="media_category" msgid="8122076702526144053">"Mультимeдиа"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Бақылау"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Терезелерді басқару"</string>
<string name="strict_mode" msgid="889864762140862437">"Қатаң режим қосылған"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Қолданбалар ұзақ операцияларды орындағанда экранды жыпылықтату"</string>
<string name="pointer_location" msgid="7516929526199520173">"Меңзер орны"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView қызметі"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView ендіруін орнату"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Бұл таңдау енді жарамды емес. Әрекетті қайталаңыз."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView әзірлеуші құралдары"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView пакеті табылмады."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Әзірлеуші құралдары іске қосылмады."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Сурет түс режимі"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB пайдалану"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Өшірулі"</string>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index d2d5893c969b..9dadee1d34b3 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"មិនអាចប្ដូរមជ្ឈដ្ឋានជុំវិញបានទេ"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"សកម្ម (តែមេឌៀប៉ុណ្ណោះ)។ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>។"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"សកម្ម (តែមេឌៀប៉ុណ្ណោះ)។ ឆ្វេង៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> ស្ដាំ៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>។"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"ឧបករណ៍ភ្ញៀវ។ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>។"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"ឧបករណ៍ភ្ញៀវ។ ឆ្វេង៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> ស្ដាំ៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>។"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"ឧបករណ៍ភ្ញៀវ (មេឌៀតែប៉ុណ្ណោះ)។ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>។"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"ឧបករណ៍ភ្ញៀវ (មេឌៀតែប៉ុណ្ណោះ)។ ឆ្វេង៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> ស្ដាំ៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>។"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"បានភ្ជាប់ (អាចប្រើការស្ដាប់សំឡេងរួមគ្នា)។ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>។"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"បានភ្ជាប់ (អាចប្រើការស្ដាប់សំឡេងរួមគ្នា)។ ឆ្វេង៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> ស្ដាំ៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>។"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"បានភ្ជាប់ (អាចប្រើការស្ដាប់សំឡេងរួមគ្នា)។ ឆ្វេង៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>។"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"បានភ្ជាប់ (អាចប្រើការស្ដាប់សំឡេងរួមគ្នា)។ ស្ដាំ៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>។"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"បានភ្ជាប់ (អាចប្រើការស្ដាប់សំឡេងរួមគ្នា)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"ឧបករណ៍ភ្ញៀវ (អាចប្រើការស្ដាប់សំឡេងរួមគ្នា)។ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>។"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"ឧបករណ៍ភ្ញៀវ (អាចប្រើការស្ដាប់សំឡេងរួមគ្នា)។ ឆ្វេង៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> ស្ដាំ៖ ថ្ម <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>។"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"ឧបករណ៍ភ្ញៀវ (អាចប្រើការស្ដាប់សំឡេងរួមគ្នា)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"សកម្ម (តែមេឌៀប៉ុណ្ណោះ)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"ឧបករណ៍ភ្ញៀវ"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"ឧបករណ៍ភ្ញៀវ (មេឌៀតែប៉ុណ្ណោះ)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"អាចប្រើការស្ដាប់សំឡេងរួមគ្នា"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"ឧបករណ៍ភ្ញៀវ។ អាចប្រើការស្ដាប់សំឡេងរួមគ្នា"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"ការបំប្លែងដែលពន្លឿនដោយប្រើហាតវែរ"</string>
<string name="media_category" msgid="8122076702526144053">"មេឌៀ"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"តាមដាន"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"ការគ្រប់គ្រងវិនដូ"</string>
<string name="strict_mode" msgid="889864762140862437">"បាន​បើក​មុខងារតឹងរ៉ឹង"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"បញ្ចេញ​ពន្លឺ​អេក្រង់​ពេល​កម្មវិធី​ធ្វើ​ប្រតិបត្តិការ​យូរ​លើ​សែស្រឡាយ​​មេ"</string>
<string name="pointer_location" msgid="7516929526199520173">"ទីតាំង​ទ្រនិច"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"ការអនុវត្ត WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"កំណត់ការប្រតិបត្តិ WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"ជម្រើសនេះលែងមានសុពលភាពទៀតហើយ ព្យាយាមម្តងទៀត"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"ឧបករណ៍អ្នកអភិវឌ្ឍន៍ WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"រកមិនឃើញកញ្ចប់ WebView ទេ។"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"មិនអាចបើកឧបករណ៍អ្នកអភិវឌ្ឍន៍បានទេ។"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"របៀបនៃពណ៌រូបភាព"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"ប្រើ sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"បាន​បិទ"</string>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index 87f2cdf9e340..72056bb1ed7d 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"ಆ್ಯಂಬಿಯೆಂಟ್ ಸ್ಥಿತಿಯನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"ಸಕ್ರಿಯವಾಗಿದೆ (ಮೀಡಿಯಾ ಮಾತ್ರ). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ಬ್ಯಾಟರಿ ಮಟ್ಟ."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"ಸಕ್ರಿಯವಾಗಿದೆ (ಮೀಡಿಯಾ ಮಾತ್ರ). ಎಡ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ಬಲ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ಬ್ಯಾಟರಿ ಮಟ್ಟ."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"ಅತಿಥಿ ಸಾಧನ. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ಬ್ಯಾಟರಿ ಮಟ್ಟ."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"ಅತಿಥಿ ಸಾಧನ. ಎಡ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ಬಲ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ಬ್ಯಾಟರಿ ಮಟ್ಟ."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"ಅತಿಥಿ ಸಾಧನ (ಮಾಧ್ಯಮ ಮಾತ್ರ). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ಬ್ಯಾಟರಿ ಮಟ್ಟ."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"ಅತಿಥಿ ಸಾಧನ (ಮಾಧ್ಯಮ ಮಾತ್ರ). ಎಡ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ಬಲ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ಬ್ಯಾಟರಿ ಮಟ್ಟ."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"ಕನೆಕ್ಟ್‌ ಆಗಿದೆ (ಆಡಿಯೋ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ಬ್ಯಾಟರಿ ಮಟ್ಟ."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"ಕನೆಕ್ಟ್‌ ಆಗಿದೆ (ಆಡಿಯೋ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ). ಎಡ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ಬಲ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ಬ್ಯಾಟರಿ ಮಟ್ಟ."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"ಕನೆಕ್ಟ್‌ ಆಗಿದೆ (ಆಡಿಯೋ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ). ಎಡ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ಬ್ಯಾಟರಿ ಮಟ್ಟ."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"ಕನೆಕ್ಟ್‌ ಆಗಿದೆ (ಆಡಿಯೋ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ). ಬಲ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ಬ್ಯಾಟರಿ ಮಟ್ಟ."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"ಕನೆಕ್ಟ್‌ ಆಗಿದೆ (ಆಡಿಯೋ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"ಅತಿಥಿ ಸಾಧನ (ಆಡಿಯೋ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ಬ್ಯಾಟರಿ ಮಟ್ಟ."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"ಅತಿಥಿ ಸಾಧನ (ಆಡಿಯೋ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ). ಎಡ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ಬಲ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ಬ್ಯಾಟರಿ ಮಟ್ಟ."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"ಅತಿಥಿ ಸಾಧನ (ಆಡಿಯೋ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"ಸಕ್ರಿಯವಾಗಿದೆ (ಮೀಡಿಯಾ ಮಾತ್ರ)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"ಅತಿಥಿ ಸಾಧನ"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"ಅತಿಥಿ ಸಾಧನ (ಮಾಧ್ಯಮ ಮಾತ್ರ)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"ಆಡಿಯೋ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"ಅತಿಥಿ ಸಾಧನ. ಆಡಿಯೋ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"ಹಾರ್ಡ್‌ವೇರ್‌ ವೇಗವರ್ಧಿತ ರೆಂಡರಿಂಗ್"</string>
<string name="media_category" msgid="8122076702526144053">"ಮಾಧ್ಯಮ"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"ಪರಿವೀಕ್ಷಣೆ ಮಾಡುವಿಕೆ"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"ವಿಂಡೋ ನಿರ್ವಹಣೆ"</string>
<string name="strict_mode" msgid="889864762140862437">"ಸ್ಟ್ರಿಕ್ಟ್‌‌ ಮೋಡ್ ಸಕ್ರಿಯ"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮುಖ್ಯ ಥ್ರೆಡ್‌ನಲ್ಲಿ ದೀರ್ಘ ಕಾರ್ಯಾಚರಣೆ ನಿರ್ವಹಿಸಿದಾಗ ಪರದೆಯನ್ನು ಫ್ಲ್ಯಾಶ್ ಮಾಡು"</string>
<string name="pointer_location" msgid="7516929526199520173">"ಪಾಯಿಂಟರ್ ಸ್ಥಳ"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView ಹೊಂದಿಸಿ"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView ಅನುಷ್ಠಾನಗೊಳಿಸುವಿಕೆಯನ್ನು ಸೆಟ್ ಮಾಡಿ"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"ಈ ಆಯ್ಕೆಯು ಇನ್ನು ಮುಂದೆ ಮಾನ್ಯವಾಗಿರುವುದಿಲ್ಲ. ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView ಪ್ಯಾಕೇಜ್ ಕಂಡುಬಂದಿಲ್ಲ."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools ಅನ್ನು ಲಾಂಚ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"ಚಿತ್ರ ಬಣ್ಣದ ಮೋಡ್"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB ಬಳಸಿ"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index 669d8ef89655..3b965e54e145 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"주변 소리를 업데이트할 수 없음"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"사용 중입니다(미디어 전용). 배터리는 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>입니다."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"사용 중입니다(미디어 전용). 배터리는 왼쪽 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, 오른쪽 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>입니다."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"게스트 기기입니다. 배터리는 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>입니다."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"게스트 기기입니다. 배터리는 왼쪽 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, 오른쪽 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>입니다."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"게스트 기기(미디어 전용)입니다. 배터리는 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>입니다."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"게스트 기기(미디어 전용)입니다. 배터리는 왼쪽 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, 오른쪽 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>입니다."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"연결되었습니다(오디오 공유 지원). 배터리는 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>입니다."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"연결되었습니다(오디오 공유 지원). 배터리는 왼쪽 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, 오른쪽 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>입니다."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"연결되었습니다(오디오 공유 지원). 왼쪽 배터리는 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>입니다."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"연결되었습니다(오디오 공유 지원). 오른쪽 배터리는 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>입니다."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"연결됨(오디오 공유 지원)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"게스트 기기(오디오 공유 지원)입니다. 배터리는 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>입니다."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"게스트 기기(오디오 공유 지원)입니다. 배터리는 왼쪽 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, 오른쪽 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>입니다."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"게스트 기기(오디오 공유 지원)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"사용 중(미디어 전용)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"게스트 기기"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"게스트 기기(미디어 전용)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"오디오 공유 지원"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"게스트 기기입니다. 오디오 공유를 지원합니다."</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"하드웨어 가속 렌더링"</string>
<string name="media_category" msgid="8122076702526144053">"미디어"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"모니터링"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"창 관리"</string>
<string name="strict_mode" msgid="889864762140862437">"엄격 모드 사용"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"앱이 기본 스레드에서 오래 작업하면 화면 깜박이기"</string>
<string name="pointer_location" msgid="7516929526199520173">"포인터 위치"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView 구현"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView 구현 설정"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"선택이 더 이상 유효하지 않습니다. 다시 시도하세요."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView 패키지를 찾을 수 없습니다."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools를 실행할 수 없습니다."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"사진 색상 모드"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB 사용"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"사용 중지됨"</string>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index c69325b2dc43..3eee360ed220 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Айланадагы абал жаңыртылган жок"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Жигердүү (медиа үчүн гана). Батарея: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Жигердүү (медиа үчүн гана). Батарея: L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Конок түзмөк. Батарея: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Конок түзмөк. Батарея: L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Конок түзмөк (медиа гана). Батарея: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Конок түзмөк (медиа гана). Батарея: L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Туташып турат (чогуу уксаңыз болот). Батарея: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Туташып турат (чогуу уксаңыз болот). Батарея: L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Туташып турат (чогуу уксаңыз болот). Сол кулак – батареянын деңгээли: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Туташып турат (чогуу уксаңыз болот). Оң кулак – батареянын деңгээли: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Туташып турат (чогуу уксаңыз болот)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Конок түзмөк (чогуу угуу колдоого алынат). Батарея: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Конок түзмөк (чогуу угуу колдоого алынат). Батарея: L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Конок түзмөк (чогуу угуу колдоого алынат)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Активдүү (медиа үчүн гана)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Конок түзмөк"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Конок түзмөк (медиа гана)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Чогуу уксаңыз болот"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Конок түзмөк. Чогуу угуу колдоого алынат"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Визуалдаштырууну аппарат менен ылдамдатуу"</string>
<string name="media_category" msgid="8122076702526144053">"Медиа"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Мониторинг"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Терезени тескөө"</string>
<string name="strict_mode" msgid="889864762140862437">"Катаал режим иштетилди"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Узак операцияларда экран күйүп-өчүп турат"</string>
<string name="pointer_location" msgid="7516929526199520173">"Көрсөткүчтүн турган жери"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView кызматы"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView аткарылышын коюу"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Тандалган нерсе жараксыз болуп калган. Кайталап көрүңүз."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView сунуштаган иштеп чыгуучунун куралдары"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView топтому табылган жок."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Иштеп чыгуучунун куралдары иштетилген жок."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Сүрөт түсү режими"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB колдонуңуз"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Өчүк"</string>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index d1f1344fd506..8044cce18edb 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"ບໍ່ສາມາດອັບເດດສຽງແວດລ້ອມໄດ້"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"ນຳໃຊ້ຢູ່ (ມີເດຍເທົ່ານັ້ນ). ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"ນຳໃຊ້ຢູ່ (ມີເດຍເທົ່ານັ້ນ). ຊ: ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ຂ: ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"ອຸປະກອນແຂກ. ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"ອຸປະກອນແຂກ. ແບັດເຕີຣີ L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"ອຸປະກອນແຂກ (ສື່ເທົ່ານັ້ນ). ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"ອຸປະກອນແຂກ (ສື່ເທົ່ານັ້ນ). ແບັດເຕີຣີ L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"ເຊື່ອມຕໍ່ແລ້ວ (ຮອງຮັບການແບ່ງປັນສຽງ). ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"ເຊື່ອມຕໍ່ແລ້ວ (ຮອງຮັບການແບ່ງປັນສຽງ). ຊ: ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ຂ: ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"ເຊື່ອມຕໍ່ແລ້ວ (ຮອງຮັບການແບ່ງປັນສຽງ). ຊ້າຍ: ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"ເຊື່ອມຕໍ່ແລ້ວ (ຮອງຮັບການແບ່ງປັນສຽງ). ຂວາ: ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"ເຊື່ອມຕໍ່ແລ້ວ (ຮອງຮັບການແບ່ງປັນສຽງ)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"ອຸປະກອນແຂກ (ຮອງຮັບການແບ່ງປັນສຽງ). ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"ອຸປະກອນແຂກ (ຮອງຮັບການແບ່ງປັນສຽງ). ແບັດເຕີຣີ L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"ອຸປະກອນແຂກ (ຮອງຮັບການແບ່ງປັນສຽງ)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"ນຳໃຊ້ຢູ່ (ມີເດຍເທົ່ານັ້ນ)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"ອຸປະກອນແຂກ"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"ອຸປະກອນແຂກ (ສື່ເທົ່ານັ້ນ)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"ຮອງຮັບການແບ່ງປັນສຽງ"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"ອຸປະກອນແຂກ. ຮອງຮັບການແບ່ງປັນສຽງ"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"ການສະແດງຜົນໂດຍໃຊ້ຮາດແວຊ່ວຍ"</string>
<string name="media_category" msgid="8122076702526144053">"ມີເດຍ"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"ກຳລັງກວດສອບ"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"ການຈັດການໜ້າຈໍ"</string>
<string name="strict_mode" msgid="889864762140862437">"ເປີດໃຊ້ໂໝດເຄັ່ງຄັດ"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"ກະພິບໜ້າຈໍເມື່ອມີແອັບເຮັດວຽກດົນເກີນໄປໃນເທຣດຫຼັກ"</string>
<string name="pointer_location" msgid="7516929526199520173">"ຕຳແໜ່ງໂຕຊີ້"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"ການຈັດຕັ້ງປະຕິບັດ WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"ຕັ້ງການຈັດຕັ້ງປະຕິບັດ WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"ບໍ່ສາມາດໃຊ້ການເລືອກນີ້ໄດ້ອີກຕໍ່ໄປແລ້ວ. ກະລຸນາລອງໃໝ່."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"ບໍ່ພົບແພັກເກດ WebView."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"ບໍ່ສາມາດເປີດໃຊ້ DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"ໂໝດ​ສີ​ຮູບ"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"ໃຊ້ sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"ປິດນຳໃຊ້ແລ້ວ"</string>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 7f940109e867..aec236a55d41 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Nepavyko atnaujinti aplinkos"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktyvus (tik medija). Akumuliatorius lygis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktyvus (tik medija), akumuliatoriaus lygis kairėje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, dešinėje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Svečio įrenginys. Akumuliatorius lygis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Svečio įrenginys. Akumuliatoriaus lygis kairėje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, dešinėje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Svečio įrenginys (tik medija). Akumuliatorius lygis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Svečio įrenginys (tik medija). Akumuliatoriaus lygis kairėje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, dešinėje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Prijungta (palaikomas garso įrašų bendrinimas). Akumuliatoriaus lygis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Prijungta (palaikomas garso įrašų bendrinimas), akumuliatoriaus lygis kairėje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, dešinėje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Prijungta (palaikomas garso įrašų bendrinimas). Akumuliatoriaus lygis kairėje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Prijungta (palaikomas garso įrašų bendrinimas). Akumuliatoriaus lygis dešinėje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Prijungta (palaikomas garso įrašų bendrinimas)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Svečio įrenginys (palaikomas garso įrašų bendrinimas). Akumuliatorius lygis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Svečio įrenginys (palaikomas garso įrašų bendrinimas). Akumuliatoriaus lygis kairėje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, dešinėje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Svečio įrenginys (palaikomas garso įrašų bendrinimas)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktyvus (tik medija)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Svečio įrenginys"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Svečio įrenginys (tik medija)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Palaikomas garso įrašų bendrinimas"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Svečio įrenginys. Palaikomas garso įrašų bendrinimas"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktyvus (tik medija), tik kairė"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktyvus (tik medija), tik dešinė"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktyvus (tik medija), kairė ir dešinė"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Aparatinės įrangos paspartintas pateikimas"</string>
<string name="media_category" msgid="8122076702526144053">"Medija"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Stebėjimas"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Langų tvarkymas"</string>
<string name="strict_mode" msgid="889864762140862437">"Įgal. griežtas režimas"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Ekr. blyksės, kai pr. atl. ilgus proc. pgr. gijoje"</string>
<string name="pointer_location" msgid="7516929526199520173">"Žymiklio vieta"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"„WebView“ diegimas"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"„WebView“ diegimo nustatymas"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Šios parinkties nebegalima pasirinkti. Bandykite dar kartą."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"„WebView“ kūrėjo įrankiai"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Žiniatinklio rodinio paketas nerastas."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Nepavyko paleisti kūrėjo įrankių."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Nuotraukos spalvos režimas"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Naudoti sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Išjungtas"</string>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index 50a56d4c956f..5716f8f4194c 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Nevarēja atjaunināt apkārtnes skaņas"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktīvs (tikai multividei). Akumulatora uzlādes līmenis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktīvs (tikai multividei). Akumulatora uzlādes līmenis kreisajā austiņā: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, labajā austiņā: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Viesa ierīce. Akumulatora uzlādes līmenis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Viesa ierīce. Akumulatora uzlādes līmenis kreisajā austiņā: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, labajā austiņā: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Viesa ierīce (tikai multividei). Akumulatora uzlādes līmenis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Viesa ierīce (tikai multividei). Akumulatora uzlādes līmenis kreisajā austiņā: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, labajā austiņā: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Izveidots savienojums (atbalsta audio kopīgošanu). Akumulatora uzlādes līmenis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Izveidots savienojums (atbalsta audio kopīgošanu). Akumulatora uzlādes līmenis kreisajā austiņā: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, labajā austiņā: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Izveidots savienojums (atbalsta audio kopīgošanu). Akumulatora uzlādes līmenis kreisajā austiņā: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Izveidots savienojums (atbalsta audio kopīgošanu). Akumulatora uzlādes līmenis labajā austiņā: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Izveidots savienojums (atbalsta audio kopīgošanu)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Viesa ierīce (atbalsta audio kopīgošanu). Akumulatora uzlādes līmenis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Viesa ierīce (atbalsta audio kopīgošanu). Akumulatora uzlādes līmenis kreisajā austiņā: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, labajā austiņā: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Viesa ierīce (atbalsta audio kopīgošanu)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktīvs (tikai multividei)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Viesa ierīce"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Viesa ierīce (tikai multividei)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Atbalsta audio kopīgošanu"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Viesa ierīce. Atbalsta audio kopīgošanu"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktīvs (tikai multivide), tikai kreisās puses aparāts"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktīvs (tikai multivide), tikai labās puses aparāts"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktīvs (tikai multivide), kreisās un labās puses aparāts"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Aparatūras paātrinātā atveidošana"</string>
<string name="media_category" msgid="8122076702526144053">"Multivide"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Pārraudzība"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Logu pārvaldība"</string>
<string name="strict_mode" msgid="889864762140862437">"Precīzais rež. ir iespēj."</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Zibsnīt ekrānu, ja liet. ilgi darbojas galv. pav."</string>
<string name="pointer_location" msgid="7516929526199520173">"Rādītāja atrašanās vieta"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView ieviešana"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Iestatīt WebView ieviešanu"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Šī iespēja vairs nav derīga. Mēģiniet vēlreiz."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView izstrādātāja rīki"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView pakotne netika atrasta."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Nevarēja palaist izstrādātāja rīkus."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Attēla krāsu režīms"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Izmantot sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Atspējota"</string>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index e86a6cee6249..bc6409da8e12 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Не можеше да се ажурира опкружувањето"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Активно (само аудиовизуелни содржини). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерија."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Активно (само аудиовизуелни содржини). Л: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> батерија, Д: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батерија."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Гостински уред. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерија."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Гостински уред. Л: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> батерија, Д: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батерија."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Гостински уред (само аудиовизуелни содржини). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерија."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Гостински уред (само аудиовизуелни содржини). Л: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> батерија, Д: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батерија."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Поврзано (поддржува споделување аудио). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерија."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Поврзано (поддржува споделување аудио). Л: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> батерија, Д: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батерија."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Поврзано (поддржува споделување аудио). Лево: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерија."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Поврзано (поддржува споделување аудио). Десно: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерија."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Поврзано (поддржува споделување аудио)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Гостински уред (поддржува споделување аудио). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерија."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Гостински уред (поддржува споделување аудио). Л: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> батерија, Д: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батерија."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Гостински уред (поддржува споделување аудио)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Активно (само аудиовизуелни содржини)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Гостински уред"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Гостински уред (само аудиовизуелни содржини)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Поддржува споделување аудио"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Гостински уред. Поддржува споделување аудио"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Хардверско забрзување"</string>
<string name="media_category" msgid="8122076702526144053">"Аудиовизуелни содржини"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Следење"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Управување со прозорци"</string>
<string name="strict_mode" msgid="889864762140862437">"Овозможен е строг режим"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Трепкај со екранот при долги операции на главна нишка"</string>
<string name="pointer_location" msgid="7516929526199520173">"Локација на покажувач"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Примена на WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Поставете воведување WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Овој избор веќе не важи. Обидете се повторно."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Пакетот на WebView не е најден."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Не можеше да се стартува DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Режим на боја на слика"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Користи sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Оневозможено"</string>
@@ -666,7 +652,7 @@
<string name="user_grant_admin_title" msgid="5157031020083343984">"Да се постави корисников како администратор?"</string>
<string name="user_grant_admin_message" msgid="1673791931033486709">"Администраторите имаат посебни привилегии што другите корисници ги немаат. Администраторот може да управува со сите корисници, да го ажурира или ресетира уредов, да ги менува поставките, да ги прегледува сите инсталирани апликации и да доделува или одзема администраторски привилегии на другите корисници."</string>
<string name="user_grant_admin_button" msgid="5441486731331725756">"Постави како администратор"</string>
- <string name="user_setup_dialog_title" msgid="8037342066381939995">"Ќе поставите корисник сега?"</string>
+ <string name="user_setup_dialog_title" msgid="8037342066381939995">"Да се постави корисник?"</string>
<string name="user_setup_dialog_message" msgid="269931619868102841">"Проверете дали лицето е достапно да го земе уредот и да го постави својот простор"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"Постави профил сега?"</string>
<string name="user_setup_button_setup_now" msgid="1708269547187760639">"Постави сега"</string>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index f7ab232ff0fe..bcadd7d88059 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"സറൗണ്ടിംഗ്‌സ് അപ്ഡേറ്റ് ചെയ്യാനായില്ല"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"സജീവം (മീഡിയ മാത്രം). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ബാറ്ററി."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"സജീവം (മീഡിയ മാത്രം). ഇടതുവശത്ത്: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> ബാറ്ററി, വലതുവശത്ത്: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ബാറ്ററി."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"അതിഥി ഉപകരണം. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ബാറ്ററി."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"അതിഥി ഉപകരണം. ഇടതുവശത്ത്: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, വലതുവശത്ത്: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ബാറ്ററി."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"അതിഥി ഉപകരണം (മീഡിയ മാത്രം). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ബാറ്ററി."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"അതിഥി ഉപകരണം (മീഡിയ മാത്രം). ഇടതുവശത്ത്: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, വലതുവശത്ത്: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ബാറ്ററി."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"കണക്റ്റ് ചെയ്തു (ഓഡിയോ പങ്കിടൽ പിന്തുണയ്ക്കുന്നു). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ബാറ്ററി."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"കണക്റ്റ് ചെയ്തു (ഓഡിയോ പങ്കിടൽ പിന്തുണയ്ക്കുന്നു). ഇടതുവശത്ത്: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> ബാറ്ററി, വലതുവശത്ത്: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ബാറ്ററി."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"കണക്റ്റ് ചെയ്തു (ഓഡിയോ പങ്കിടൽ പിന്തുണയ്ക്കുന്നു). ഇടത് വശത്ത്: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ബാറ്ററി."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"കണക്റ്റ് ചെയ്തു (ഓഡിയോ പങ്കിടൽ പിന്തുണയ്ക്കുന്നു). വലത് വശത്ത്: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ബാറ്ററി."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"കണക്റ്റ് ചെയ്തു (ഓഡിയോ പങ്കിടൽ പിന്തുണയ്ക്കുന്നു)."</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"അതിഥി ഉപകരണം (ഓഡിയോ പങ്കിടൽ പിന്തുണയ്ക്കുന്നു). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ബാറ്ററി."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"അതിഥി ഉപകരണം (ഓഡിയോ പങ്കിടൽ പിന്തുണയ്ക്കുന്നു). ഇടതുവശത്ത്: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, വലതുവശത്ത്: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ബാറ്ററി."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"അതിഥി ഉപകരണം (ഓഡിയോ പങ്കിടൽ പിന്തുണയ്ക്കുന്നു)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"സജീവം (മീഡിയ മാത്രം)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"അതിഥി ഉപകരണം"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"അതിഥി ഉപകരണം (മീഡിയ മാത്രം)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"ഓഡിയോ പങ്കിടൽ പിന്തുണയ്ക്കുന്നു"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"അതിഥി ഉപകരണം. ഓഡിയോ പങ്കിടൽ പിന്തുണയ്ക്കുന്നു"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"ഹാർഡ്‌വെയർ ത്വരിതപ്പെടുത്തിയ റെൻഡറിംഗ്"</string>
<string name="media_category" msgid="8122076702526144053">"മീഡിയ"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"മോണിറ്ററിംഗ്"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"വിൻഡോ മാനേജ്മെന്റ്"</string>
<string name="strict_mode" msgid="889864762140862437">"ഫോഴ്സ്‌മോഡ് സജീവമാക്കി"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"പ്രധാന ത്രെഡിൽ ആപ്പുകൾ ദൈർഘ്യമേറിയ പ്രവർത്തനങ്ങൾ നടത്തുമ്പോൾ സ്‌ക്രീൻ ഫ്ലാഷ് ചെയ്യുക"</string>
<string name="pointer_location" msgid="7516929526199520173">"പോയിന്റർ ലൊക്കേഷൻ"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView നടപ്പാക്കൽ"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView നടപ്പാക്കൽ സജ്ജമാക്കുക"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"ഈ തിരഞ്ഞെടുപ്പിന് തുടർന്നങ്ങോട്ട് സാധുതയില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView പാക്കേജ് കണ്ടെത്തിയില്ല."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools ലോഞ്ച് ചെയ്യാനായില്ല."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"ചിത്ര വർണ്ണ മോഡ്"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB ഉപയോഗിക്കുക"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"പ്രവർത്തനരഹിതമാക്കി"</string>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index 4dc754e9f378..2b45e85a2995 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Орчин тойрныг шинэчилж чадсангүй"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Идэвхтэй (зөвхөн медиа). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батарей."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Идэвхтэй (зөвхөн медиа). З: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Б: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батарей."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Зочин төхөөрөмж. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батарейн цэнэгтэй."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Зочин төхөөрөмж. З: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Б: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батарейн цэнэгтэй."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Зочин төхөөрөмж (зөвхөн медиа). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батарейн цэнэгтэй."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Зочин төхөөрөмж (зөвхөн медиа). З: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Б: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батарейн цэнэгтэй."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Холбогдсон (аудио хуваалцахыг дэмждэг). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батарей."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Холбогдсон (аудио хуваалцахыг дэмждэг). З: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Б: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батарей."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Холбогдсон (аудио хуваалцахыг дэмждэг). Зүүн: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батарей."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Холбогдсон (аудио хуваалцахыг дэмждэг). Баруун: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батарей."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Холбогдсон (аудио хуваалцахыг дэмждэг)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Зочин төхөөрөмж (аудио хуваалцахыг дэмждэг). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батарейн цэнэгтэй."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Зочин төхөөрөмж (аудио хуваалцахыг дэмждэг). З: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Б: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батарейн цэнэгтэй."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Зочин төхөөрөмж (аудио хуваалцахыг дэмждэг)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Идэвхтэй (зөвхөн медиа)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Зочин төхөөрөмж"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Зочин төхөөрөмж (зөвхөн медиа)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Аудио хуваалцахыг дэмждэг"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Зочин төхөөрөмж. Аудио хуваалцахыг дэмждэг"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Техник хангамжийн хурдасгасан үзүүлэлт"</string>
<string name="media_category" msgid="8122076702526144053">"Медиа"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Мониторинг"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Цонхны удирдлага"</string>
<string name="strict_mode" msgid="889864762140862437">"Хатуу горимыг идэвхжүүлсэн"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Аппууд үндсэн хэлхээс дээр удаан хугацаанд үйлдлүүд хийх үед дэлгэцийг анивчуулах"</string>
<string name="pointer_location" msgid="7516929526199520173">"Чиглүүлэгчийн байршил"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView хэрэгжилт"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView хэрэгжилтийг тохируулах"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Энэ сонголт хүчингүй байна. Дахин оролдоно уу."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView-н DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView-н багц олдсонгүй."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools-г эхлүүлж чадсангүй."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"\"Зургийн өнгө\" горим"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB-г ашиглах"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Идэвхгүй болсон"</string>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index eef39c433d32..826d6015fc49 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"जवळपासचे आवाज अपडेट करता आले नाहीत"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"अ‍ॅक्टिव्ह आहे (फक्त मीडिया). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बॅटरी."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"ॲक्टिव्ह आहे (फक्त मीडिया). डावीकडे: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> बॅटरी, उजवीकडे: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> बॅटरी."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"अतिथी डिव्हाइस. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बॅटरी."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"अतिथी डिव्हाइस. डावीकडे: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, उजवीकडे: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> बॅटरी."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"अतिथी डिव्हाइस (फक्त मीडिया). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बॅटरी."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"अतिथी डिव्हाइस (फक्त मीडिया). डावीकडे: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, उजवीकडे: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> बॅटरी."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"कनेक्ट केले आहे (ऑडिओ शेअरिंगला सपोर्ट करते). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बॅटरी."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"कनेक्ट केले आहे (ऑडिओ शेअरिंगला सपोर्ट करते). डावीकडे: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, उजवीकडे: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> बॅटरी."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"कनेक्ट केले आहे (ऑडिओ शेअरिंगला सपोर्ट करते). डावीकडे: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बॅटरी."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"कनेक्ट केले आहे (ऑडिओ शेअरिंगला सपोर्ट करते). उजवीकडे: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बॅटरी."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"कनेक्ट केले आहे (ऑडिओ शेअरिंगला सपोर्ट करते)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"अतिथी डिव्हाइस (ऑडिओ शेअरिंगला सपोर्ट करते). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> बॅटरी."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"अतिथी डिव्हाइस (ऑडिओ शेअरिंगला सपोर्ट करते). डावीकडे: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, उजवीकडे: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> बॅटरी."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"अतिथी डिव्हाइस (ऑडिओ शेअरिंगला सपोर्ट करते)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"अ‍ॅक्टिव्ह आहे (फक्त मीडिया)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"अतिथी डिव्हाइस"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"अतिथी डिव्हाइस (फक्त मीडिया)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"ऑडिओ शेअरिंगला सपोर्ट करते"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"अतिथी डिव्हाइस. ऑडिओ शेअरिंगला सपोर्ट करते"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"हार्डवेअर अ‍ॅक्सिलरेटेड रेंडरिंग"</string>
<string name="media_category" msgid="8122076702526144053">"मीडिया"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"परीक्षण"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"विंडो व्यवस्थापन"</string>
<string name="strict_mode" msgid="889864762140862437">"कठोर मोड सुरू"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"मुख्य थ्रेडवर अ‍ॅप्स मोठी कार्ये करतात तेव्हा स्क्रीन फ्लॅश करा"</string>
<string name="pointer_location" msgid="7516929526199520173">"पॉइंटर स्थान"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"वेबदृश्य अंमलबजावणी"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"वेबदृश्य अंमलबजावणी सेट करा"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"ही निवड यापुढे वैध असणार नाही. पुन्हा प्रयत्न करा."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView पॅकेज आढळले नाही."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools लाँच करता आले नाही."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"चित्र रंग मोड"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB वापरा"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"बंद केले"</string>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index ca4649ccd888..a2f95628a6a1 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Tidak dapat mengemaskinikan persekitaran"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktif (media sahaja). Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktif (media sahaja), L: Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Peranti tetamu. Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Peranti tetamu. L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Peranti tetamu (media sahaja). Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Peranti tetamu (media sahaja). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Disambungkan (menyokong perkongsian audio). Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Disambungkan (menyokong perkongsian audio). L: Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Disambungkan (menyokong perkongsian audio). Kiri: Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Disambungkan (menyokong perkongsian audio). Kanan: Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Disambungkan (menyokong perkongsian audio)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Peranti tetamu (menyokong perkongsian audio). Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Peranti tetamu (menyokong perkongsian audio). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: Bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Peranti tetamu (menyokong perkongsian audio)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktif (media sahaja)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Peranti tetamu"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Peranti tetamu (media sahaja)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Menyokong perkongsian audio"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Peranti tetamu. Menyokong perkongsian audio"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktif (media sahaja), kiri sahaja"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktif (media sahaja), kanan sahaja"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktif (media sahaja), kiri dan kanan"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Pemaparan dipercepat perkakasan"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Memantau"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Pengurusan Tetingkap"</string>
<string name="strict_mode" msgid="889864762140862437">"Mod tegas didayakan"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Kelip skrin apabila apl beroperasi lama pada urutan utama"</string>
<string name="pointer_location" msgid="7516929526199520173">"Lokasi penuding"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Pelaksanaan WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Tetapkan pelaksanaan WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Pilihan ini tidak lagi sah. Cuba lagi."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Alatan Pembangun Paparan Web"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Pakej Paparan Web tidak ditemukan."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Tidak dapat melancarkan Alatan Pembangun."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Mod warna gambar"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Gunakan sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Dilumpuhkan"</string>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index 1225e4c3e8a3..b0d86afe9a6c 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"ဝန်းကျင်အသံ အပ်ဒိတ်လုပ်၍ မရလိုက်ပါ"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"အသုံးပြုနေသည် (မီဒီယာသီးသန့်)။ ဘက်ထရီ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>။"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"အသုံးပြုနေသည် (မီဒီယာသီးသန့်)။ ဘက်ထရီ L- <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>၊ R- <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>။"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"ဧည့်သည်စက်ပစ္စည်း။ ဘက်ထရီ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>။"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"ဧည့်သည်စက်ပစ္စည်း။ ဘက်ထရီ L- <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>၊ R- <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>။"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"ဧည့်သည်စက်ပစ္စည်း (မီဒီယာသီးသန့်)။ ဘက်ထရီ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>။"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"ဧည့်သည်စက်ပစ္စည်း (မီဒီယာသီးသန့်)။ ဘက်ထရီ L- <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>၊ R- <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>။"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"ချိတ်ဆက်ထားသည် (အော်ဒီယို မျှဝေခြင်း ပံ့ပိုးသည်)။ ဘက်ထရီ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>။"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"ချိတ်ဆက်ထားသည် (အော်ဒီယို မျှဝေခြင်း ပံ့ပိုးသည်)။ ဘက်ထရီ L- <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>၊ R- <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>။"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"ချိတ်ဆက်ထားသည် (အော်ဒီယို မျှဝေခြင်း ပံ့ပိုးသည်)။ ဘယ်- ဘက်ထရီ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>။"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"ချိတ်ဆက်ထားသည် (အော်ဒီယို မျှဝေခြင်း ပံ့ပိုးသည်)။ ညာ- ဘက်ထရီ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>။"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"ချိတ်ဆက်ထားသည် (အော်ဒီယို မျှဝေခြင်း ပံ့ပိုးသည်)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"ဧည့်သည်စက်ပစ္စည်း (အော်ဒီယို မျှဝေခြင်း ပံ့ပိုးသည်)။ ဘက်ထရီ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>။"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"ဧည့်သည်စက်ပစ္စည်း (အော်ဒီယို မျှဝေခြင်း ပံ့ပိုးသည်)။ ဘက်ထရီ L- <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>၊ R- <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>။"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"ဧည့်သည်စက်ပစ္စည်း (အော်ဒီယို မျှဝေခြင်း ပံ့ပိုးသည်)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"သုံးနေသည် (မီဒီယာသီးသန့်)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"ဧည့်သည်စက်ပစ္စည်း"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"ဧည့်သည်စက်ပစ္စည်း (မီဒီယာသီးသန့်)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"အော်ဒီယို မျှဝေခြင်း ပံ့ပိုးသည်"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"ဧည့်သည်စက်ပစ္စည်း။ အော်ဒီယို မျှဝေခြင်း ပံ့ပိုးသည်"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"ဟာ့ဒ်ဝဲ အရှိန်မြှင့် ပုံဖော်ခြင်း"</string>
<string name="media_category" msgid="8122076702526144053">"မီဒီယာ"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"စောင့်ကြည့်စစ်ဆေးခြင်း"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"ဝင်းဒိုး စီမံခန့်ခွဲမှု"</string>
<string name="strict_mode" msgid="889864762140862437">"တင်းကြပ်သောစနစ် ဖွင့်ရန်"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"အက်ပ်လုပ်ဆောင်မှု ရှည်ကြာလျှင် စကရင်ပြန်စသည်"</string>
<string name="pointer_location" msgid="7516929526199520173">"မြား၏တည်နေရာ"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView အကောင်အထည်ဖော်မှု"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView အကောင်အထည်ဖော်မှု သတ်မှတ်ပါ"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"ဤရွေးချယ်မှု မှန်ကန်မှု မရှိတော့ပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"ဝဘ်မြင်ကွင်း ဆောဖ့်ဝဲတူးလ်များ"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"ဝဘ်မြင်ကွင်း ပက်ကေ့ဂျ် မတွေ့ပါ။"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"ဆောဖ့်ဝဲတူးလ်များ စတင်၍ မရလိုက်ပါ။"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"ဓာတ်ပုံအရောင်မုဒ်"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB ကို အသုံးပြုပါ"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"ပိတ်ထားသည်"</string>
@@ -667,7 +653,7 @@
<string name="user_grant_admin_message" msgid="1673791931033486709">"စီမံခန့်ခွဲသူများ၌ အခြားအသုံးပြုသူများတွင်မရှိသော အထူးဆောင်ရွက်ခွင့်များရှိသည်။ စီမံခန့်ခွဲသူက အသုံးပြုသူအားလုံးကို စီမံခြင်း၊ ဤစက်ပစ္စည်းကို အပ်ဒိတ်လုပ်ခြင်း (သို့) ပြင်ဆင်သတ်မှတ်ခြင်း၊ ဆက်တင်များပြင်ဆင်ခြင်း၊ ထည့်သွင်းထားသောအက်ပ်အားလုံးကို ကြည့်ခြင်းနှင့် အခြားသူများအတွက် စီမံခန့်ခွဲသူ ဆောင်ရွက်ခွင့်များပေးခြင်း (သို့) ရုပ်သိမ်းခြင်းတို့ လုပ်နိုင်သည်။"</string>
<string name="user_grant_admin_button" msgid="5441486731331725756">"စီမံခန့်ခွဲသူအဖြစ် သတ်မှတ်ရန်"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"အသုံးပြုသူကို ယခုသတ်မှတ်မလား။"</string>
- <string name="user_setup_dialog_message" msgid="269931619868102841">"ထိုသူသည် ကိရိယာကိုယူ၍ ၎င်းတို့၏နေရာများကို ယခုသတ်မှတ်နိုင်ရမည်"</string>
+ <string name="user_setup_dialog_message" msgid="269931619868102841">"သူသည် ကိရိယာကိုယူ၍ သူ၏နေရာကို ယခုသတ်မှတ်နိုင်ရမည်"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ယခု ကိုယ်ရေးအချက်အလက်ကို အစီအမံလုပ်မည်လား?"</string>
<string name="user_setup_button_setup_now" msgid="1708269547187760639">"ယခု သတ်မှတ်ပါမည်"</string>
<string name="user_setup_button_setup_later" msgid="8712980133555493516">"ယခုမလုပ်ပါ"</string>
@@ -679,7 +665,7 @@
<string name="user_need_lock_message" msgid="4311424336209509301">"ကန့်သတ်ကိုယ်ရေးအချက်အလက်တစ်ခုကို မပြုလုပ်မီ သင်၏ အပလီကေးရှင်းများနှင့် ကိုယ်ပိုင်အချက်အလက်များကို ကာကွယ်ရန် မျက်နှာပြင်သော့ချခြင်းကို စီမံရန် လိုအပ်လိမ့်မည်"</string>
<string name="user_set_lock_button" msgid="1427128184982594856">"သော့ချရန် သတ်မှတ်ပါ"</string>
<string name="user_switch_to_user" msgid="6975428297154968543">"<xliff:g id="USER_NAME">%s</xliff:g> သို့ ပြောင်းရန်"</string>
- <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"အသုံးပြုသူအသစ် ပြုလုပ်နေသည်…"</string>
+ <string name="creating_new_user_dialog_message" msgid="7232880257538970375">"အသုံးပြုသူအသစ်အတွက် ပြင်ဆင်နေသည်…"</string>
<string name="creating_new_guest_dialog_message" msgid="1114905602181350690">"ဧည့်သည်သစ် ပြုလုပ်နေသည်…"</string>
<string name="add_user_failed" msgid="4809887794313944872">"အသုံးပြုသူအသစ် ပြုလုပ်၍မရပါ"</string>
<string name="add_guest_failed" msgid="8074548434469843443">"ဧည့်သည်သစ် ပြုလုပ်၍မရပါ"</string>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 7c9b10f00267..755df5100e5a 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Kunne ikke oppdatere omgivelsene"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktiv (bare medieinnhold) <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktiv (bare medieinnhold). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> batteri, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Gjesteenhet. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Gjesteenhet. V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Gjesteenhet (bare medieinnhold). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Gjesteenhet (bare medieinnhold). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Tilkoblet (støtter lyddeling). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Tilkoblet (støtter lyddeling). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> batteri, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Tilkoblet (støtter lyddeling). Venstre: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Tilkoblet (støtter lyddeling). Høyre: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Tilkoblet (støtter lyddeling)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Gjesteenhet (støtter lyddeling). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Gjesteenhet (støtter lyddeling). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Gjesteenhet (støtter lyddeling)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktiv (bare medieinnhold)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Gjesteenhet"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Gjesteenhet (bare medieinnhold)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Støtter lyddeling"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Gjesteenhet. Støtter lyddeling"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktiv (bare medieinnhold), bare venstre"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktiv (bare medieinnhold), bare høyre"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktiv (bare medieinnhold), høyre og venstre"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Maskinvareakselerert gjengivelse"</string>
<string name="media_category" msgid="8122076702526144053">"Medier"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Overvåking"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Vindusadministrering"</string>
<string name="strict_mode" msgid="889864762140862437">"Slå på streng modus"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Skjermblink ved lange apphandlinger på hovedtråd"</string>
<string name="pointer_location" msgid="7516929526199520173">"Pekerplassering"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView-implementering"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Angi WebView-implementering"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Dette valget er ikke gyldig lenger. Prøv på nytt."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Utviklerverktøy for WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Fant ikke WebView-pakken."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Kunne ikke starte utviklerverktøyene."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Fargemodus for bilder"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Bruk sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Slått av"</string>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index e2e7a8f48c76..0a9ac1770896 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"वरपरका आवाजसम्बन्धी सेटिङ अपडेट गर्न सकिएन"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"सक्रिय छ (मिडिया मात्र)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ब्याट्री।"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"सक्रिय छ (मिडिया मात्र)। बायाँ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, दायाँ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ब्याट्री।"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"अतिथि डिभाइस। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ब्याट्री।"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"अतिथि डिभाइस। बायाँ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, दायाँ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ब्याट्री।"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"अतिथि डिभाइस (मिडिया मात्र)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ब्याट्री।"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"अतिथि डिभाइस (मिडिया मात्र)। बायाँ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, दायाँ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ब्याट्री।"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"कनेक्ट गरिएको छ (अडियो सेयर गर्न मिल्छ)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ब्याट्री।"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"कनेक्ट गरिएको छ (अडियो सेयर गर्न मिल्छ)। बायाँ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, दायाँ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ब्याट्री।"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"कनेक्ट गरिएको छ (अडियो सेयर गर्न मिल्छ)। बायाँ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ब्याट्री।"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"कनेक्ट गरिएको छ (अडियो सेयर गर्न मिल्छ)। दायाँ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ब्याट्री।"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"कनेक्ट गरिएको छ (अडियो सेयर गर्न मिल्छ)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"अतिथि डिभाइस (अडियो सेयर गर्ने सुविधा प्रयोग गर्न मिल्छ)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ब्याट्री।"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"अतिथि डिभाइस (अडियो सेयर गर्ने सुविधा प्रयोग गर्न मिल्छ)। बायाँ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, दायाँ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ब्याट्री।"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"अतिथि डिभाइस (अडियो सेयर गर्ने सुविधा प्रयोग गर्न मिल्छ)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"सक्रिय छ (मिडिया मात्र)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"अतिथि डिभाइस"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"अतिथि डिभाइस (मिडिया मात्र)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"अडियो सेयर गर्न मिल्छ"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"अतिथि डिभाइस। अडियो सेयर गर्ने सुविधा प्रयोग गर्न मिल्छ"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"हार्डवेयरले बढाएको रेन्डरिङ"</string>
<string name="media_category" msgid="8122076702526144053">"मिडिया"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"अनुगमन गरिँदै छ"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"विन्डो व्यवस्थापन"</string>
<string name="strict_mode" msgid="889864762140862437">"स्ट्रिक्ट मोड अन गर्नुहोस्"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"एपले मुख्य थ्रेडमा लामा गतिविधि गर्दा स्क्रिन फ्ल्यास गर्नुहोस्"</string>
<string name="pointer_location" msgid="7516929526199520173">"पोइन्टरको स्थान"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView कार्यान्वयन"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView कार्यान्वयन सेट गर्नुहोस्"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"यो छनोट अब मान्य छैन। फेरि प्रयास गर्नुहोस्।"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView सम्बन्धी विकासकर्ता टुलहरू"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView प्याकेज भेटिएन।"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"विकासकर्ताका टुलहरू लन्च गर्न सकिएन।"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"चित्र रङ्ग मोड"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB प्रयोग गर्नुहोस्"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"अफ गरिएको छ"</string>
@@ -678,7 +664,7 @@
<string name="profile_info_settings_title" msgid="105699672534365099">"प्रोफाइलको जानकारी"</string>
<string name="user_need_lock_message" msgid="4311424336209509301">"निषेधयुक्त प्रोफाइल बनाउनु अघि तपाईँको एप र व्यक्तिगत डेटा सुरक्षा गर्नाका लागि तपाईँले स्क्रिन लक सेटअप गर्नु पर्दछ ।"</string>
<string name="user_set_lock_button" msgid="1427128184982594856">"लक सेट गर्नुहोस्"</string>
- <string name="user_switch_to_user" msgid="6975428297154968543">"प्रयोगकर्ता बदलेर <xliff:g id="USER_NAME">%s</xliff:g> बनाउनुहोस्"</string>
+ <string name="user_switch_to_user" msgid="6975428297154968543">"<xliff:g id="USER_NAME">%s</xliff:g> प्रयोग गर्नुहोस्"</string>
<string name="creating_new_user_dialog_message" msgid="7232880257538970375">"नयाँ प्रयोगकर्ता बनाइँदै छ…"</string>
<string name="creating_new_guest_dialog_message" msgid="1114905602181350690">"नयाँ अतिथि बनाइँदै छ…"</string>
<string name="add_user_failed" msgid="4809887794313944872">"नयाँ प्रयोगकर्ता सिर्जना गर्न सकिएन"</string>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 6dfcc7b0b40c..f71f3abfaf2b 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Kan omgeving niet updaten"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Actief (alleen media). Batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Actief (alleen media), L: batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Gastapparaat. Batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Gastapparaat. L: batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Gastapparaat (alleen media). Batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Gastapparaat (alleen media). L: batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Verbonden (ondersteunt audio delen), batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Verbonden (ondersteunt audio delen), L: batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Verbonden (ondersteunt audio delen). Links: batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Verbonden (ondersteunt audio delen). Rechts: batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Verbonden (ondersteunt audio delen)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Gastapparaat (ondersteunt audio delen). Batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Gastapparaat (ondersteunt audio delen). L: batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: batterijniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Gastapparaat (ondersteunt audio delen)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Actief (alleen media)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Gastapparaat"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Gastapparaat (alleen media)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Ondersteunt audio delen"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Gastapparaat. Ondersteunt audio delen."</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Actief (alleen media), alleen links"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Actief (alleen media), alleen rechts"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Actief (alleen media), links en rechts"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Rendering met hardwareversnelling"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Controle"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Vensterbeheer"</string>
<string name="strict_mode" msgid="889864762140862437">"Strikte modus staat aan"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Knipperend scherm bij lange bewerkingen door apps"</string>
<string name="pointer_location" msgid="7516929526199520173">"Cursorlocatie"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView-implementatie"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView-implementatie instellen"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Deze keuze is niet meer geldig. Probeer het opnieuw."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView-pakket niet gevonden."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Kan DevTools niet starten."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Kleurenmodus voor afbeeldingen"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB gebruiken"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Uitgezet"</string>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index 44c819cbb9b8..f30ae3d94d42 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"ପରିପାର୍ଶ୍ୱକୁ ଅପଡେଟ କରାଯାଇପାରିଲା ନାହିଁ"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"ସକ୍ରିୟ (କେବଳ ମିଡିଆ)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ବେଟେରୀ।"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"ସକ୍ରିୟ (କେବଳ ମିଡିଆ)। ବାମ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ଡାହାଣ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ବେଟେରୀ।"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"ଅତିଥି ଡିଭାଇସ। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ବେଟେରୀ।"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"ଅତିଥି ଡିଭାଇସ। ବାମ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ଡାହାଣ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ବେଟେରୀ।"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"ଅତିଥି ଡିଭାଇସ (କେବଳ ମିଡିଆ)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ବେଟେରୀ।"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"ଅତିଥି ଡିଭାଇସ (କେବଳ ମିଡିଆ)। ବାମ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ଡାହାଣ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ବେଟେରୀ।"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"କନେକ୍ଟ କରାଯାଇଛି (ଅଡିଓ ସେୟାରିଂକୁ ସପୋର୍ଟ କରେ)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ବେଟେରୀ।"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"କନେକ୍ଟ କରାଯାଇଛି (ଅଡିଓ ସେୟାରିଂକୁ ସମର୍ଥନ କରେ)। ବାମ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ଡାହାଣ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ବେଟେରୀ।"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"କନେକ୍ଟ କରାଯାଇଛି (ଅଡିଓ ସେୟାରିଂକୁ ସମର୍ଥନ କରେ)। ବାମ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ବେଟେରୀ।"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"କନେକ୍ଟ କରାଯାଇଛି (ଅଡିଓ ସେୟାରିଂକୁ ସପୋର୍ଟ କରେ)। ଡାହାଣ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ବେଟେରୀ।"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"କନେକ୍ଟ କରାଯାଇଛି (ଅଡିଓ ସେୟାରିଂକୁ ସମର୍ଥନ କରେ)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"ଅତିଥି ଡିଭାଇସ (ଅଡିଓ ସେୟାରିଂକୁ ସପୋର୍ଟ କରେ)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ବେଟେରୀ।"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"ଅତିଥି ଡିଭାଇସ (ଅଡିଓ ସେୟାରିଂକୁ ସପୋର୍ଟ କରେ)। ବାମ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ଡାହାଣ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ବେଟେରୀ।"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"ଅତିଥି ଡିଭାଇସ (ଅଡିଓ ସେୟାରିଂକୁ ସପୋର୍ଟ କରେ)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"ସକ୍ରିୟ (କେବଳ ମିଡିଆ)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"ଅତିଥି ଡିଭାଇସ"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"ଅତିଥି ଡିଭାଇସ (କେବଳ ମିଡିଆ)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"ଅଡିଓ ସେୟାରିଂକୁ ସପୋର୍ଟ କରେ"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"ଅତିଥି ଡିଭାଇସ। ଅଡିଓ ସେୟାରିଂକୁ ସପୋର୍ଟ କରେ"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"ହାର୍ଡୱେର୍‌ ଆକ୍ସଲରେଟେଡ୍ ରେଣ୍ଡରିଙ୍ଗ"</string>
<string name="media_category" msgid="8122076702526144053">"ମିଡିଆ"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"ମନିଟରିଙ୍ଗ"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"ୱିଣ୍ଡୋ ପରିଚାଳନା"</string>
<string name="strict_mode" msgid="889864762140862437">"କଡ଼ା ମୋଡ୍ ସକ୍ଷମ କରାଯାଇଛି"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"ମୁଖ୍ୟ ଥ୍ରେଡ୍‌ରେ ଆପ୍‌ ଦୀର୍ଘ ସମୟ କାର୍ଯ୍ୟ କଲେ ସ୍କ୍ରୀନ୍‌ ଫ୍ଲାଶ୍ କରନ୍ତୁ"</string>
<string name="pointer_location" msgid="7516929526199520173">"ପଏଣ୍ଟର୍‌ ଲୋକେସନ୍‌"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"ୱେବ୍‌ଭ୍ୟୁ ପ୍ରୟୋଗ"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView କାର୍ଯ୍ୟକାରିତାକୁ ସେଟ୍‍ କରନ୍ତୁ"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"ଏହି ପସନ୍ଦ ଆଉ ମାନ୍ୟ ନାହିଁ। ପୁଣିଥରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView ମିଳିଲା ନାହିଁ।"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools ଲଞ୍ଚ କରାଯାଇପାରିଲା ନାହିଁ।"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"ପିକ୍‌ଚର୍‌ ରଙ୍ଗ ମୋଡ୍"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"ଅକ୍ଷମ ହୋଇଛି"</string>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 731c195065af..2c2eab2fa871 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"ਆਲੇ-ਦੁਆਲੇ ਨੂੰ ਅੱਪਡੇਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"ਕਿਰਿਆਸ਼ੀਲ (ਸਿਰਫ਼ ਮੀਡੀਆ)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ਬੈਟਰੀ।"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"ਕਿਰਿਆਸ਼ੀਲ (ਸਿਰਫ਼ ਮੀਡੀਆ)। ਖੱਬੇ ਪਾਸੇ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ਸੱਜੇ ਪਾਸੇ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ਬੈਟਰੀ।"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"ਮਹਿਮਾਨ ਡੀਵਾਈਸ। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ਬੈਟਰੀ।"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"ਮਹਿਮਾਨ ਡੀਵਾਈਸ। ਖੱਬੇ ਪਾਸੇ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ਸੱਜੇ ਪਾਸੇ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ਬੈਟਰੀ।"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"ਮਹਿਮਾਨ ਡੀਵਾਈਸ (ਸਿਰਫ਼ ਮੀਡੀਆ)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ਬੈਟਰੀ।"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"ਮਹਿਮਾਨ ਡੀਵਾਈਸ (ਸਿਰਫ਼ ਮੀਡੀਆ)। ਖੱਬੇ ਪਾਸੇ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ਸੱਜੇ ਪਾਸੇ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ਬੈਟਰੀ।"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"ਕਨੈਕਟ ਕੀਤਾ (ਆਡੀਓ ਸਾਂਝਾਕਰਨ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ਬੈਟਰੀ।"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"ਕਨੈਕਟ ਕੀਤਾ (ਆਡੀਓ ਸਾਂਝਾਕਰਨ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ)। ਖੱਬੇ ਪਾਸੇ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ਸੱਜੇ ਪਾਸੇ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ਬੈਟਰੀ।"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"ਕਨੈਕਟ ਕੀਤਾ (ਆਡੀਓ ਸਾਂਝਾਕਰਨ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ)। ਖੱਬੇ ਪਾਸੇ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ਬੈਟਰੀ।"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"ਕਨੈਕਟ ਕੀਤਾ (ਆਡੀਓ ਸਾਂਝਾਕਰਨ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ)। ਸੱਜੇ ਪਾਸੇ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ਬੈਟਰੀ।"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"ਕਨੈਕਟ ਕੀਤਾ (ਆਡੀਓ ਸਾਂਝਾਕਰਨ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"ਮਹਿਮਾਨ ਡੀਵਾਈਸ (ਆਡੀਓ ਸਾਂਝਾਕਰਨ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ)। <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ਬੈਟਰੀ।"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"ਮਹਿਮਾਨ ਡੀਵਾਈਸ (ਆਡੀਓ ਸਾਂਝਾਕਰਨ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ)। ਖੱਬੇ ਪਾਸੇ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ਸੱਜੇ ਪਾਸੇ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ਬੈਟਰੀ।"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"ਮਹਿਮਾਨ ਡੀਵਾਈਸ (ਆਡੀਓ ਸਾਂਝਾਕਰਨ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"ਕਿਰਿਆਸ਼ੀਲ (ਸਿਰਫ਼ ਮੀਡੀਆ)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"ਮਹਿਮਾਨ ਡੀਵਾਈਸ"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"ਮਹਿਮਾਨ ਡੀਵਾਈਸ (ਸਿਰਫ਼ ਮੀਡੀਆ)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"ਆਡੀਓ ਸਾਂਝਾਕਰਨ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"ਮਹਿਮਾਨ ਡੀਵਾਈਸ। ਆਡੀਓ ਸਾਂਝਾਕਰਨ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"ਹਾਰਡਵੇਅਰ ਐਕਸੈੱਲਰੇਟਿਡ ਰੈਂਡਰਿੰਗ"</string>
<string name="media_category" msgid="8122076702526144053">"ਮੀਡੀਆ"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"ਨਿਰੀਖਣ ਕਰਨਾ"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"ਵਿੰਡੋ ਪ੍ਰਬੰਧਨ"</string>
<string name="strict_mode" msgid="889864762140862437">"ਸਟ੍ਰਿਕਟ ਮੋਡ ਚਾਲੂ ਹੈ"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"ਐਪਾਂ ਵੱਲੋਂ ਮੁੱਖ ਥ੍ਰੈੱਡ \'ਤੇ ਲੰਬੀਆਂ ਕਾਰਵਾਈਆਂ ਕਰਨ \'ਤੇ ਸਕ੍ਰੀਨ ਫਲੈਸ਼ ਕਰੋ"</string>
<string name="pointer_location" msgid="7516929526199520173">"ਪੁਆਇੰਟਰ ਟਿਕਾਣਾ"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView ਅਮਲੀਕਰਨ"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView ਅਮਲੀਕਰਨ ਸੈੱਟ ਕਰੋ"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"ਇਹ ਚੋਣ ਹੁਣ ਵੈਧ ਨਹੀਂ ਹੈ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView ਪੈਕੇਜ ਨਹੀਂ ਮਿਲਿਆ।"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools ਨੂੰ ਲਾਂਚ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"ਤਸਵੀਰ ਰੰਗ ਮੋਡ"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB ਵਰਤੋਂ ਕਰੋ"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"ਬੰਦ ਹੈ"</string>
@@ -666,8 +652,8 @@
<string name="user_grant_admin_title" msgid="5157031020083343984">"ਕੀ ਇਸ ਵਰਤੋਂਕਾਰ ਨੂੰ ਪ੍ਰਸ਼ਾਸਕ ਬਣਾਉਣਾ ਹੈ?"</string>
<string name="user_grant_admin_message" msgid="1673791931033486709">"ਪ੍ਰਸ਼ਾਸਕਾਂ ਕੋਲ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰ ਹੁੰਦੇ ਹਨ ਜੋ ਹੋਰ ਵਰਤੋਂਕਾਰਾਂ ਕੋਲ ਨਹੀਂ ਹੁੰਦੇ। ਇੱਕ ਪ੍ਰਸ਼ਾਸਕ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ, ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਅੱਪਡੇਟ ਜਾਂ ਰੀਸੈੱਟ ਕਰ ਸਕਦਾ ਹੈ, ਸੈਟਿੰਗਾਂ ਨੂੰ ਸੋਧ ਸਕਦਾ ਹੈ, ਸਾਰੀਆਂ ਸਥਾਪਤ ਐਪਾਂ ਨੂੰ ਦੇਖ ਸਕਦਾ ਹੈ, ਅਤੇ ਦੂਜਿਆਂ ਲਈ ਪ੍ਰਸ਼ਾਸਕ ਦੇ ਅਧਿਕਾਰਾਂ ਨੂੰ ਮਨਜ਼ੂਰ ਜਾਂ ਰੱਦ ਕਰ ਸਕਦਾ ਹੈ।"</string>
<string name="user_grant_admin_button" msgid="5441486731331725756">"ਪ੍ਰਸ਼ਾਸਕ ਬਣਾਓ"</string>
- <string name="user_setup_dialog_title" msgid="8037342066381939995">"ਕੀ ਹੁਣ ਵਰਤੋਂਕਾਰ ਸੈੱਟ ਅੱਪ ਕਰਨਾ ਹੈ?"</string>
- <string name="user_setup_dialog_message" msgid="269931619868102841">"ਇਹ ਪੱਕਾ ਕਰੋ ਕਿ ਵਿਅਕਤੀ ਡੀਵਾਈਸ ਵਰਤਣ ਅਤੇ ਆਪਣੀ ਜਗ੍ਹਾ ਦੇ ਸੈੱਟ ਅੱਪ ਲਈ ਉਪਲਬਧ ਹੈ"</string>
+ <string name="user_setup_dialog_title" msgid="8037342066381939995">"ਕੀ ਹੁਣ ਵਰਤੋਂਕਾਰ ਸੈੱਟਅੱਪ ਕਰਨਾ ਹੈ?"</string>
+ <string name="user_setup_dialog_message" msgid="269931619868102841">"ਇਹ ਪੱਕਾ ਕਰੋ ਕਿ ਵਿਅਕਤੀ ਡੀਵਾਈਸ ਵਰਤਣ ਅਤੇ ਆਪਣੀ ਜਗ੍ਹਾ ਦੇ ਸੈੱਟਅੱਪ ਲਈ ਉਪਲਬਧ ਹੈ"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"ਕੀ ਹੁਣ ਪ੍ਰੋਫਾਈਲ ਸੈੱਟ ਅੱਪ ਕਰਨੀ ਹੈ?"</string>
<string name="user_setup_button_setup_now" msgid="1708269547187760639">"ਹੁਣੇ ਸੈੱਟ ਅੱਪ ਕਰੋ"</string>
<string name="user_setup_button_setup_later" msgid="8712980133555493516">"ਅਜੇ ਨਹੀਂ"</string>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index b9adae26df7e..79be6b314ef8 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Nie udało się zaktualizować otoczenia"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktywne (tylko multimedia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktywne (tylko multimedia), lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> naładowania baterii."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Urządzenie gościa. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Urządzenie gościa. Lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> naładowania baterii."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Urządzenie gościa (tylko multimedia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Urządzenie gościa (tylko multimedia). Lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> naładowania baterii."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Połączone (obsługa udostępniania dźwięku), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Połączone (obsługa udostępniania dźwięku), lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> naładowania baterii."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Połączone (obsługa udostępniania dźwięku). Lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Połączone (obsługa udostępniania dźwięku). Prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Połączone (obsługa udostępniania dźwięku)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Urządzenie gościa (obsługuje udostępnianie dźwięku). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> naładowania baterii."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Urządzenie gościa (obsługuje udostępnianie dźwięku). Lewa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, prawa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> naładowania baterii."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Urządzenie gościa (obsługuje udostępnianie dźwięku)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktywne (tylko multimedia)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Urządzenie gościa"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Urządzenie gościa (tylko multimedia)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Obsługa udostępniania dźwięku"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Urządzenie gościa. Obsługuje udostępnianie dźwięku"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktywne (tylko multimedia), tylko lewa"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktywne (tylko multimedia), tylko prawa"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktywne (tylko multimedia), lewa i prawa"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Sprzętowa akceleracja renderowania"</string>
<string name="media_category" msgid="8122076702526144053">"Multimedia"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitorowanie"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Zarządzanie oknami"</string>
<string name="strict_mode" msgid="889864762140862437">"Tryb ścisły włączony"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Miganie ekranu podczas długich operacji w wątku głównym"</string>
<string name="pointer_location" msgid="7516929526199520173">"Lokalizacja wskaźnika"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implementacja WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Ustaw implementację WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Ta opcja nie jest już obsługiwana. Spróbuj ponownie."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Narzędzia deweloperskie WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Nie znaleziono pakietu WebView."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Nie udało się uruchomić Narzędzi deweloperskich."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Tryb kolorów obrazu"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Użyj sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Wyłączone"</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index 5b3bb0600eb9..e16e3557dc38 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Não foi possível atualizar o som ambiente"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Ativo (apenas mídia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Ativo (apenas mídia). Lado esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria. Lado direito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Dispositivo convidado. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Dispositivo convidado. Lado esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria. Lado direito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Dispositivo convidado (somente mídia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Dispositivo convidado (somente mídia). Lado esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria. Lado direito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Conectado (aceita compartilhamento de áudio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Conectado (aceita compartilhamento de áudio). Lado esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria. Lado direito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Conectado (aceita compartilhamento de áudio). Lado esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Conectado (aceita compartilhamento de áudio). Lado direito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Conectado (aceita compartilhamento de áudio)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Dispositivo convidado (aceita compartilhamento de áudio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Dispositivo convidado (aceita compartilhamento de áudio). Lado esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria. Lado direito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Dispositivo convidado (aceita compartilhamento de áudio)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Ativo (apenas mídia)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Dispositivo convidado"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Dispositivo convidado (somente mídia)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Com suporte ao compartilhamento de áudio"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Dispositivo convidado. Aceita compartilhamento de áudio"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Renderização acelerada por hardware"</string>
<string name="media_category" msgid="8122076702526144053">"Mídia"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitoramento"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Gerenciamento de janelas"</string>
<string name="strict_mode" msgid="889864762140862437">"Modo restrito ativado"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Piscar tela se apps demorarem no processo principal"</string>
<string name="pointer_location" msgid="7516929526199520173">"Localização do cursor"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implementação do WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Configurar implementação do WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Esta opção não é mais válida. Tente novamente."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"DevTools do WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"O pacote WebView não foi encontrado."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Não foi possível abrir o DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Modo de cor da imagem"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Usar sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Desativado"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index e6b343ab9457..e4381d6131e7 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Não foi possível atualizar o ambiente"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Ativo (apenas para multimédia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Ativo (apenas para multimédia). E: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria. D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Dispositivo convidado. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Dispositivo convidado. E: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Dispositivo convidado (apenas para multimédia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Dispositivo convidado (apenas para multimédia). E: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Ligado (suporta partilha de áudio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Ligado (suporta partilha de áudio). E: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria. D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Ligado (suporta a partilha de áudio). Esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Ligado (suporta a partilha de áudio). Direito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Ligado (suporta a partilha de áudio)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Dispositivo convidado (compatível com partilha de áudio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Dispositivo convidado (compatível com partilha de áudio). E: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>. D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Dispositivo convidado (compatível com partilha de áudio)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Ativo (apenas para multimédia)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Dispositivo convidado"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Dispositivo convidado (apenas para multimédia)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Suporta partilha de áudio"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Dispositivo convidado. Compatível com partilha de áudio"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Ativo (apenas para multimédia), apenas esquerdo"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Ativo (apenas para multimédia), apenas direito"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Ativo (apenas para multimédia), esquerdo e direito"</string>
@@ -149,7 +139,7 @@
<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">"Acesso a contactos e histórico de chamadas"</string>
- <string name="bluetooth_profile_pbap_summary" msgid="402819589201138227">"As informações são usadas para anúncios por chamadas e outros"</string>
+ <string name="bluetooth_profile_pbap_summary" msgid="402819589201138227">"As informações são usadas para anunciar chamadas e outros"</string>
<string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Partilha da ligação à internet"</string>
<string name="bluetooth_profile_map" msgid="8907204701162107271">"Mensagens de texto"</string>
<string name="bluetooth_profile_sap" msgid="8304170950447934386">"Acesso ao SIM"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Conversão acelerada de hardware"</string>
<string name="media_category" msgid="8122076702526144053">"Multimédia"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitorização"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Gestão de janelas"</string>
<string name="strict_mode" msgid="889864762140862437">"Modo rigoroso ativado"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Piscar ecrã se app fazem oper. prolong. no tópico princ."</string>
<string name="pointer_location" msgid="7516929526199520173">"Localização do ponteiro"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implementação WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Definir implementação WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Esta opção já não é válida. Tente novamente."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"DevTools do WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Pacote WebView não encontrado."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Não foi possível iniciar as DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Modo de cor da imagem"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Usar sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Desativado"</string>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 5b3bb0600eb9..e16e3557dc38 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Não foi possível atualizar o som ambiente"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Ativo (apenas mídia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Ativo (apenas mídia). Lado esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria. Lado direito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Dispositivo convidado. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Dispositivo convidado. Lado esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria. Lado direito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Dispositivo convidado (somente mídia). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Dispositivo convidado (somente mídia). Lado esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria. Lado direito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Conectado (aceita compartilhamento de áudio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Conectado (aceita compartilhamento de áudio). Lado esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria. Lado direito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Conectado (aceita compartilhamento de áudio). Lado esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Conectado (aceita compartilhamento de áudio). Lado direito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Conectado (aceita compartilhamento de áudio)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Dispositivo convidado (aceita compartilhamento de áudio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Dispositivo convidado (aceita compartilhamento de áudio). Lado esquerdo: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> de bateria. Lado direito: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> de bateria."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Dispositivo convidado (aceita compartilhamento de áudio)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Ativo (apenas mídia)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Dispositivo convidado"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Dispositivo convidado (somente mídia)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Com suporte ao compartilhamento de áudio"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Dispositivo convidado. Aceita compartilhamento de áudio"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Renderização acelerada por hardware"</string>
<string name="media_category" msgid="8122076702526144053">"Mídia"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitoramento"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Gerenciamento de janelas"</string>
<string name="strict_mode" msgid="889864762140862437">"Modo restrito ativado"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Piscar tela se apps demorarem no processo principal"</string>
<string name="pointer_location" msgid="7516929526199520173">"Localização do cursor"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implementação do WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Configurar implementação do WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Esta opção não é mais válida. Tente novamente."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"DevTools do WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"O pacote WebView não foi encontrado."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Não foi possível abrir o DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Modo de cor da imagem"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Usar sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Desativado"</string>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index 13c9032603ca..83a6e68b36b4 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Nu s-a putut actualiza zona din jur"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Activ (numai pentru conținut media). Nivelul bateriei <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Activ (numai pentru conținut media): nivelul bateriei din stânga: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, nivelul bateriei din dreapta: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Dispozitiv invitat. Nivelul bateriei: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Dispozitiv invitat. Nivelul bateriei din stânga: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, dreapta: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Dispozitiv invitat (numai pentru conținut media). Nivelul bateriei: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Dispozitiv invitat (numai pentru conținut media). Nivelul bateriei din stânga: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, dreapta: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Conectat (acceptă permiterea accesului la audio). Nivelul bateriei: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Conectat (acceptă permiterea accesului la audio), nivelul bateriei din stânga: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, nivelul bateriei din dreapta: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Conectat (acceptă permiterea accesului la audio). Nivelul bateriei din stânga: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Conectat (acceptă permiterea accesului la audio). Nivelul bateriei din dreapta: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Conectat (acceptă permiterea accesului la audio)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Dispozitiv invitat (acceptă permiterea accesului la audio). Nivelul bateriei: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Dispozitiv invitat (acceptă permiterea accesului la audio). Nivelul bateriei din stânga: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, dreapta: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Dispozitiv invitat (acceptă permiterea accesului la audio)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Activ (numai pentru conținut media)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Dispozitiv invitat"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Dispozitiv invitat (numai pentru conținut media)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Acceptă permiterea accesului la audio"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Dispozitiv invitat. Acceptă permiterea accesului la audio"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Activ (numai pentru conținut media), numai stânga"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Activ (numai pentru conținut media), numai dreapta"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Activ (numai pentru conținut media), stânga și dreapta"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Redare accelerată hardware"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitorizare"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Gestionarea ferestrelor"</string>
<string name="strict_mode" msgid="889864762140862437">"Modul Strict activat"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Iluminare intermitentă la operații lungi pe firul principal"</string>
<string name="pointer_location" msgid="7516929526199520173">"Locația indicatorului"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implementare WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Setează implementarea WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Această opțiune nu mai este validă. Încearcă din nou."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"DevTools WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Pachetul WebView nu a fost găsit."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Nu s-a putut lansa DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Modul de culori pentru imagini"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Folosește sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Dezactivat"</string>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 831623d6c80b..1ed7c3623acc 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Не удалось отрегулировать окружающие звуки."</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Используется (только для медиа), заряд: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Используется (только для медиа), заряд: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (Л), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (П)."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Гостевое устройство. Заряд батареи: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Гостевое устройство. Заряд батареи: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (Л), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (П)."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Гостевое устройство (только медиафайлы). Заряд батареи: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Гостевое устройство (только медиафайлы). Заряд батареи: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (Л), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (П)."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Подключено (поддерживается отправка аудио), заряд: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Подключено (поддерживается отправка аудио), заряд: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (Л), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (П)."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Подключено (поддерживается отправка аудио), заряд: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> (Л)."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Подключено (поддерживается отправка аудио), заряд: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> (П)."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Подключено (поддерживается отправка аудио)."</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Гостевое устройство (поддерживает передачу аудио). Заряд батареи: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Гостевое устройство (поддерживает передачу аудио). Заряд батареи: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (Л), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (П)."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Гостевое устройство (поддерживает передачу аудио)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Используется (только для медиа)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Гостевое устройство"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Гостевое устройство (только медиафайлы)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Поддерживается отправка аудио"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Гостевое устройство. Поддерживает передачу аудио."</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Аппаратное ускорение отрисовки"</string>
<string name="media_category" msgid="8122076702526144053">"Мультимедиа"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Мониторинг"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Управление окнами"</string>
<string name="strict_mode" msgid="889864762140862437">"Строгий режим"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Подсвечивать экран во время длительных операций"</string>
<string name="pointer_location" msgid="7516929526199520173">"Место касания"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Сервис WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Настройки сервиса WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Вариант недействителен. Повторите попытку."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Инструменты разработчика от поставщика WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Пакет WebView не найден."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Не удалось запустить инструменты разработчика."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Цветовой режим"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Использовать sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Отключено"</string>
@@ -508,7 +494,7 @@
<string name="accessibility_display_daltonizer_preference_title" msgid="1810693571332381974">"Коррекция цвета"</string>
<string name="accessibility_display_daltonizer_preference_subtitle" msgid="1522101114585266455">"Используйте коррекцию цвета, чтобы:&lt;br/&gt; &lt;ol&gt; &lt;li&gt; Добиться нужной цветопередачи.&lt;/li&gt; &lt;li&gt; Убрать цвета, которые мешают сосредоточиться.&lt;/li&gt; &lt;/ol&gt;"</string>
<string name="daltonizer_type_overridden" msgid="4509604753672535721">"Новая настройка: <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_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>, зарядка приостановлена для защиты батареи"</string>
<string name="power_incompatible_charging_settings_home_page" msgid="1322050766135126880">"<xliff:g id="LEVEL">%1$s</xliff:g>, проверьте зарядное устройство"</string>
<string name="power_remaining_duration_only" msgid="8264199158671531431">"Заряда хватит примерно на <xliff:g id="TIME_REMAINING">%1$s</xliff:g>"</string>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index dcfb914b6c86..dffa392c7947 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"වටපිටාව යාවත්කාලීන කළ නොහැකි විය"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"ක්‍රියාත්මකයි (මාධ්‍ය පමණයි). බැටරිය <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"ක්‍රියාත්මකයි (මාධ්‍ය පමණයි), බැටරිය ව: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ද: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"ආගන්තුක උපාංගය. බැටරිය <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"ආගන්තුක උපාංගය. බැටරිය ව: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ද: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"ආගන්තුක උපාංගය (මාධ්‍ය පමණි). බැටරිය <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"ආගන්තුක උපාංගය (මාධ්‍ය පමණි). බැටරිය ව: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ද: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"සම්බන්‍ධයි (ශ්‍රව්‍ය බෙදා ගැනීමට සහය දක්වයි). බැටරිය <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"සම්බන්‍ධයි (ශ්‍රව්‍ය බෙදා ගැනීමට සහය දක්වයි). බැටරිය ව: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ද: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"සම්බන්‍ධයි (ශ්‍රව්‍ය බෙදා ගැනීමට සහය දක්වයි). වම: බැටරිය <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"සම්බන්‍ධයි (ශ්‍රව්‍ය බෙදා ගැනීමට සහය දක්වයි). දකුණ: බැටරිය <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"සම්බන්‍ධයි (ශ්‍රව්‍ය බෙදා ගැනීමට සහය දක්වයි)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"ආගන්තුක උපාංගය (ශ්‍රව්‍ය බෙදා ගැනීම සඳහා සහය දක්වයි). බැටරිය <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"ආගන්තුක උපාංගය (ශ්‍රව්‍ය බෙදා ගැනීම සඳහා සහය දක්වයි). බැටරිය ව: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ද: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"ආගන්තුක උපාංගය (ශ්‍රව්‍ය බෙදා ගැනීම සඳහා සහය දක්වයි)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"සක්‍රිය (මාධ්‍ය පමණි)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"ආගන්තුක උපාංගය"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"ආගන්තුක උපාංගය (මාධ්‍ය පමණි)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"ශ්‍රව්‍ය බෙදා ගැනීම සහය දක්වයි"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"ආගන්තුක උපාංගය. ශ්‍රව්‍ය බෙදා ගැනීම සහය දක්වයි"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"දෘඩාංග වේගය වැඩි කළ පිරිනැමීම"</string>
<string name="media_category" msgid="8122076702526144053">"මාධ්‍ය"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"නිරීක්ෂණය"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"කවුළු කළමනාකරණය"</string>
<string name="strict_mode" msgid="889864762140862437">"තදබල ආකාරය සබල කිරීම"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"මූලික පොටේ යෙදුම්, දිගු මෙහෙයුම් කරන විට තිරය ෆ්ලෑෂ් කරන්න"</string>
<string name="pointer_location" msgid="7516929526199520173">"සූචක පිහිටීම"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView ක්‍රියාත්මක කිරීම"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView ක්‍රියාත්මක කිරීම සකසන්න"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"මෙම තෝරා ගැනීම තව දුරටත් වලංගු නැත. නැවත උත්සාහ කරන්න."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView පැකේජය හමු නොවුණි."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools දියත් කිරීමට නොහැකි විය."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"පින්තූර වර්ණ ප්‍රකාරය"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB භාවිතා කරන්න"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"අබලයි"</string>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 86e827438e79..0f4297aec6ad 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Okolie sa nepodarilo aktualizovať"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktívne (iba médiá). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batérie."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktívne (iba médiá). Ľ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> batérie, P: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batérie."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Zariadenie hosťa. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batérie."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Zariadenie hosťa. Ľ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batérie."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Zariadenie hosťa (iba médiá). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batérie."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Zariadenie hosťa (iba médiá). Ľ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batérie."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Pripojené (podporuje zdieľanie zvuku). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batérie."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Pripojené (podporuje zdieľanie zvuku). Ľ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batérie."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Pripojené (podporuje zdieľanie zvuku). Ľavá strana: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batérie."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Pripojené (podporuje zdieľanie zvuku). Pravá strana: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batérie."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Pripojené (podporuje zdieľanie zvuku)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Zariadenie hosťa (podporuje zdieľanie zvuku). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batérie."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Zariadenie hosťa (podporuje zdieľanie zvuku). Ľ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, P: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batérie."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Zariadenie hosťa (podporuje zdieľanie zvuku)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktívne (iba médiá)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Zariadenie hosťa"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Zariadenie hosťa (iba médiá)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Podporuje zdieľanie zvuku"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Zariadenie hosťa. Podporuje zdieľanie zvuku."</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktívne (iba médiá), iba ľavá strana"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktívne (iba médiá), iba pravá strana"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktívne (iba médiá), ľavá aj pravá strana"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hardvérom zrýchlené vykresľovanie"</string>
<string name="media_category" msgid="8122076702526144053">"Médiá"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitorovanie"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Správa okien"</string>
<string name="strict_mode" msgid="889864762140862437">"Povoliť prísny režim"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Blikať pri dlhých operáciách hlavného vlákna"</string>
<string name="pointer_location" msgid="7516929526199520173">"Umiestnenie kurzora"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Implementácia WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Nastaviť implementáciu WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Táto voľba už nie je platná. Skúste to znova."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Nástroje pre vývojárov prvku WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Balík WebView sa nenašiel."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Nástroje pre vývojárov sa nepodarilo spustiť."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Farebný režim obrázka"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Použije sa sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Vypnuté"</string>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index 28ae8e14472d..744b4da576ed 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Okolice ni bilo mogoče posodobiti"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktivno (samo predstavnost). Baterija: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktivno (samo predstavnost), baterija – L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Naprava gosta. Baterija: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Naprava gosta. Baterija – L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Naprava gosta (samo predstavnost). Baterija: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Naprava gosta (samo predstavnost). Baterija – L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Povezano (podpira deljenje zvoka), baterija: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Povezano (podpira deljenje zvoka), baterija – L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Povezano (podpira deljenje zvoka). Levo – baterija: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Povezano (podpira deljenje zvoka). Desno – baterija: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Povezano (podpira deljenje zvoka)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Naprava gosta (podpira deljenje zvoka). Baterija: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Naprava gosta (podpira deljenje zvoka). Baterija – L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, D: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Naprava gosta (podpira deljenje zvoka)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktivno (samo predstavnost)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Naprava gosta"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Naprava gosta (samo predstavnost)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Podpira deljenje zvoka"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Naprava gosta. Podpira deljenje zvoka."</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktivno (samo predstavnost), samo levo"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktivno (samo predstavnost), samo desno"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktivno (samo predstavnost), levo in desno"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Upodabljanje s strojnim pospeševanjem"</string>
<string name="media_category" msgid="8122076702526144053">"Predstavnost"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Spremljanje"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Upravljanje oken"</string>
<string name="strict_mode" msgid="889864762140862437">"Strog način je omogočen"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Osveži zaslon pri dolgih postopkih v glavni niti."</string>
<string name="pointer_location" msgid="7516929526199520173">"Mesto kazalca"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Izvedba spletnega pogleda"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Nastavitev izvedbe spletnega pogleda"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Ta izbira ni več veljavna. Poskusite znova."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Orodja za razvijalce za WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Paketa WebView ni bilo mogoče najti."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Orodij za razvijalce ni bilo mogoče zagnati."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Način barv slike"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Uporaba sRGB-ja"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Onemogočeno"</string>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index 4e6ec9f96284..3d9622e063de 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Ambienti rrethues nuk mund të përditësohej"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktiv (vetëm për media). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> bateri."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktiv (vetëm për media). Majtas: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> bateri, djathtas: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> bateri."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Pajisja vizitore. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> bateri."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Pajisja vizitore. Majtas: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> bateri, djathtas: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> bateri."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Pajisja vizitore (vetëm media). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> bateri."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Pajisja vizitore (vetëm media). Majtas: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> bateri, djathtas: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> bateri."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Lidhur (mbështet ndarjen e audios). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> bateri."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Lidhur (mbështet ndarjen e audios). Majtas: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> bateri, djathtas: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> bateri."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Lidhur (mbështet ndarjen e audios). Majtas: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> bateri."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Lidhur (mbështet ndarjen e audios). Djathtas: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> bateri."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Lidhur (mbështet ndarjen e audios)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Pajisja vizitore (mbështet ndarjen e audios). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> bateri."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Pajisja vizitore (mbështet ndarjen e audios). Majtas: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> bateri, djathtas: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> bateri."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Pajisja vizitore (mbështet ndarjen e audios)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktiv (vetëm për media)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Pajisja vizitore"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Pajisja vizitore (vetëm media)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Mbështet ndarjen e audios"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Pajisja vizitore. Mbështet ndarjen e audios"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktiv (vetëm për media), vetëm majtas"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktiv (vetëm për media), vetëm djathtas"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktiv (vetëm për media), majtas dhe djathtas"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Interpretimi i përshpejtuar i harduerit"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitorimi"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Menaxhimi i dritareve"</string>
<string name="strict_mode" msgid="889864762140862437">"Aktivizo modalitetin e rreptë"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Ndriço ekranin kur aplikacionet kryejnë operacione të gjata teksa bashkëveprojnë"</string>
<string name="pointer_location" msgid="7516929526199520173">"Vendndodhja e treguesit"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Zbatimi i WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Cakto zbatimin e WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Kjo zgjedhje nuk është më e vlefshme. Provo përsëri."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"DevTools e WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Paketa e WebView nuk u gjet."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools nuk mund të nisej."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Modalitti i ngjyrave të figurës"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Përdor sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Çaktivizuar"</string>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 96924b9e3cee..32ec5000bfd0 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Ажурирање окружења није успело"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Активно (само за медије). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерије."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Активно (само за медије). Лево: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, десно: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батерије."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Уређај госта. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерије."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Уређај госта. Лево: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, десно: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батерије."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Уређај госта (само за медије). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерије."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Уређај госта (само за медије). Лево: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, десно: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батерије."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Повезано (подржава дељење звука), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерије."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Повезано (подржава дељење звука), лево: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, десно: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батерије."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Повезано (подржава дељење звука). Лево: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерије"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Повезано (подржава дељење звука). Десно: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерије."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Повезано (подржава дељење звука)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Уређај госта (подржава дељење звука). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> батерије."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Уређај госта (подржава дељење звука). Лево: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, десно: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> батерије."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Уређај госта (подржава дељење звука)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Активан (само за медије)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Уређај госта"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Уређај госта (само за медије)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Подржава дељење звука"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Уређај госта. Подржава дељење звука"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Хардверски убрзано приказивање"</string>
<string name="media_category" msgid="8122076702526144053">"Медији"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Надгледање"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Управљање прозорима"</string>
<string name="strict_mode" msgid="889864762140862437">"Омогућен је строги режим"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Екран трепери када апликације обављају дуге операције на главној нити"</string>
<string name="pointer_location" msgid="7516929526199520173">"Локација показивача"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Примена WebView-а"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Подесите примену WebView-а"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Овај избор више није важећи. Пробајте поново."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView алатке за програмере"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Пакет за WebView није пронађен."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Покретање алатки за програмере није успело."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Режим боја слика"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Користи sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Онемогућено је"</string>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index 3c7aff69fd73..cf223f5b7bdb 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Det gick inte att uppdatera omgivningsläget"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktiv (endast media). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktiv (endast media). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Gästenhet. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Gästenhet. V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Gästenhet (endast media). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Gästenhet (endast media). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Ansluten (ljuddelning stöds). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Ansluten (ljuddelning stöds). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Ansluten (ljuddelning stöds). Vänster: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Ansluten (ljuddelning stöds). Höger: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Ansluten (ljuddelning stöds)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Gästenhet (ljuddelning stöds). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Gästenhet (ljuddelning stöds). V: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, H: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> batteri."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Gästenhet (ljuddelning stöds)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktiv (endast media)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Gästenhet"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Gästenhet (endast media)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Ljuddelning stöds"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Gästenhet. Ljuddelning stöds"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktiv (endast media), endast vänster"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktiv (endast media), endast höger"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktiv (endast media), vänster och höger"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Hårdvaruaccelererad rendering"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Övervakning"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Fönsterhantering"</string>
<string name="strict_mode" msgid="889864762140862437">"Strikt läge aktiverat"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Tänd skärm när app gör omfattande åtgärd på huvudtråd"</string>
<string name="pointer_location" msgid="7516929526199520173">"Pekarens plats"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView-implementering"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Ange WebView-implementering"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Det här alternativet är inte längre giltigt. Försök igen."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Verktyg för programmerare för WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView-paketet hittades inte."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Verktyg för programmerare kunde inte startas."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Färgläge för bilder"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Använd sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Inaktiverad"</string>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 4f520b499b85..26e0412b2893 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Imeshindwa kusasisha mazingira"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Inatumika (maudhui pekee). Chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Inatumika (maudhui pekee), Kushoto: chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Kulia: chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Kifaa kingeni. Chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Kifaa kingeni. Kushoto: chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Kulia: chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Kifaa kingeni (sauti/video/picha pekee). Chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Kifaa kingeni (sauti/video/picha pekee). Kushoto: chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Kulia: chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Imeunganishwa (inaweza kutumia kipengele cha kusikiliza pamoja). Chaji imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Imeunganishwa (inaweza kutumia kipengele cha kusikiliza pamoja). Kushoto: chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Kulia: chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Imeunganishwa (inaweza kutumia kipengele cha kusikiliza pamoja). Kushoto: chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Imeunganishwa (inaweza kutumia kipengele cha kusikiliza pamoja). Kulia: chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Imeunganishwa (inaweza kusikiliza pamoja)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Kifaa kingeni (kinatumia kipengele cha kusikiliza pamoja). Chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Kifaa kingeni (kinatumia kipengele cha kusikiliza pamoja). Kushoto: chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Kulia: chaji ya betri imefika <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Kifaa kingeni (kinatumia kipengele cha kusikiliza pamoja)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Inatumika (maudhui pekee)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Kifaa kingeni"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Kifaa kingeni (sauti/video/picha pekee)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Inaweza kutumia kipengele cha kusikiliza pamoja"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Kifaa kingeni. Kinatumia kipengele cha kusikiliza pamoja"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Inatumika (maudhui pekee), kushoto pekee"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Inatumika (maudhui pekee), kulia pekee"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Inatumika (maudhui pekee), kushoto na kulia"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Utekelezaji wa maunzi ulioharakishwa"</string>
<string name="media_category" msgid="8122076702526144053">"Maudhui"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Ufuatiliaji"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Udhibiti wa Dirisha"</string>
<string name="strict_mode" msgid="889864762140862437">"Hali makinifu imewashwa"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Fanya skrini imemeteke programu zinapoendeleza shughuli ndefu kwenye skrini kuu"</string>
<string name="pointer_location" msgid="7516929526199520173">"Mahali pa kiashiria"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Utekelezaji wa WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Weka utekelezaji wa WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Chaguo hili halipo tena. Jaribu tena."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Zana za Wasanidi Programu za Mwonekano wa Wavuti"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Haijapata kifurushi cha Mwonekano wa Wavuti."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Imeshindwa kuwasha Zana za Wasanidi Programu."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Hali ya rangi ya picha"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Tumia sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Imezimwa"</string>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index aa345842779c..c2e762f417e7 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"சுற்றுப்புறங்களைப் புதுப்பிக்க முடியவில்லை"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"செயலிலுள்ளது (மீடியா மட்டும்). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> பேட்டரி."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"செயலிலுள்ளது (மீடியா மட்டும்). இடது பேட்டரி: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, வலது பேட்டரி: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"விருந்தினர் சாதனம். <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> பேட்டரி."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"விருந்தினர் சாதனம். இடது பேட்டரி: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, வலது பேட்டரி: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"விருந்தினர் சாதனம் (மீடியா மட்டும்). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> பேட்டரி."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"விருந்தினர் சாதனம் (மீடியா மட்டும்). இடது பேட்டரி: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, வலது பேட்டரி: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"இணைக்கப்பட்டுள்ளது (ஆடியோ பகிர்வை ஆதரிக்கிறது). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> பேட்டரி."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"இணைக்கப்பட்டுள்ளது (ஆடியோ பகிர்வை ஆதரிக்கிறது). இடது பேட்டரி: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, வலது பேட்டரி: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"இணைக்கப்பட்டுள்ளது (ஆடியோ பகிர்வை ஆதரிக்கிறது). இடது: - <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> பேட்டரி."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"இணைக்கப்பட்டுள்ளது (ஆடியோ பகிர்வை ஆதரிக்கிறது). வலது: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> பேட்டரி."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"இணைக்கப்பட்டுள்ளது (ஆடியோ பகிர்வை ஆதரிக்கிறது)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"விருந்தினர் சாதனம் (ஆடியோ பகிர்வை ஆதரிக்கிறது). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> பேட்டரி."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"விருந்தினர் சாதனம் (ஆடியோ பகிர்வை ஆதரிக்கிறது). இடது பேட்டரி: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, வலது பேட்டரி: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"விருந்தினர் சாதனம் (ஆடியோ பகிர்வை ஆதரிக்கிறது)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"செயலிலுள்ளது (மீடியா மட்டும்)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"விருந்தினர் சாதனம்"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"விருந்தினர் சாதனம் (மீடியா மட்டும்)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"ஆடியோ பகிர்வை ஆதரிக்கிறது"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"விருந்தினர் சாதனம். ஆடியோ பகிர்வை ஆதரிக்கிறது."</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"வன்பொருள் முடுக்கத்துடன் கூடிய காட்சியாக்கம்"</string>
<string name="media_category" msgid="8122076702526144053">"மீடியா"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"கண்காணித்தல்"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"சாளர நிர்வாகம்"</string>
<string name="strict_mode" msgid="889864762140862437">"நிலையான பயன்முறை இயக்கப்பட்டது"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"முக்கியத் தொடரிழையில் நீண்ட நேரம் செயல்படும்போது திரையைக் காட்சிப்படுத்தும்"</string>
<string name="pointer_location" msgid="7516929526199520173">"குறிப்பான் இடம்"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView செயல்படுத்தல்"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView செயல்படுத்தலை அமை"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"இனி இந்தத் தேர்வைப் பயன்படுத்த முடியாது. மீண்டும் முயலவும்."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView டெவெலப்பர் கருவிகள்"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView தொகுப்பு இல்லை."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"டெவெலப்பர் கருவிகளை இயக்க முடியவில்லை."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"படத்தின் வண்ணப் பயன்முறை"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGBஐப் பயன்படுத்தும்"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"முடக்கப்பட்டது"</string>
@@ -667,7 +653,7 @@
<string name="user_grant_admin_message" msgid="1673791931033486709">"மற்ற பயனர்களுக்கு இல்லாத சிறப்புரிமைகள் நிர்வாகிகளுக்கு உண்டு. நிர்வாகி அனைத்துப் பயனர்களையும் நிர்வகிக்கலாம், இந்தச் சாதனத்தைப் புதுப்பிக்கலாம் அல்லது ரீசெட் செய்யலாம், அமைப்புகளை மாற்றலாம், நிறுவப்பட்ட அனைத்து ஆப்ஸையும் பார்க்கலாம், பிறருக்கு நிர்வாகி சிறப்புரிமைகளை வழங்கலாம் அல்லது அகற்றலாம்."</string>
<string name="user_grant_admin_button" msgid="5441486731331725756">"நிர்வாகியாக்கு"</string>
<string name="user_setup_dialog_title" msgid="8037342066381939995">"இப்போது பயனரை அமைக்கவா?"</string>
- <string name="user_setup_dialog_message" msgid="269931619868102841">"இந்தச் சாதனத்தை இவர் பயன்படுத்தும் நிலையிலும், அவருக்கான அமைப்புகளை அவரே செய்து கொள்பவராகவும் இருக்க வேண்டும்."</string>
+ <string name="user_setup_dialog_message" msgid="269931619868102841">"பயனர் இந்தச் சாதனத்தில் அவருக்கான அமைப்புகளை அமைக்கும் நிலையில் இப்போது இருக்க வேண்டும்"</string>
<string name="user_setup_profile_dialog_message" msgid="4788197052296962620">"இப்போது சுயவிவரத்தை அமைக்கவா?"</string>
<string name="user_setup_button_setup_now" msgid="1708269547187760639">"இப்போது அமை"</string>
<string name="user_setup_button_setup_later" msgid="8712980133555493516">"இப்போது இல்லை"</string>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index cded034d5ab3..f4678f3d0dd5 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"పరిసరాలను అప్‌డేట్ చేయడం సాధ్యం కాలేదు"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"యాక్టివ్ (మీడియా మాత్రమే). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> బ్యాటరీ."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"యాక్టివ్ (మీడియా మాత్రమే). ఎడమ వైపు: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> బ్యాటరీ, కుడివైపు: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> బ్యాటరీ."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"గెస్ట్ పరికరం. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> బ్యాటరీ."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"గెస్ట్ పరికరం. ఎడమ వైపు: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, కుడివైపు: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> బ్యాటరీ."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"గెస్ట్ పరికరం (మీడియాకు మాత్రమే). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> బ్యాటరీ."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"గెస్ట్ పరికరం (మీడియాకు మాత్రమే). ఎడమ వైపు: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, కుడివైపు: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> బ్యాటరీ."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"కనెక్ట్ చేయబడింది (ఆడియో షేరింగ్‌కు సపోర్ట్ చేస్తుంది). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> బ్యాటరీ."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"కనెక్ట్ చేయబడింది (ఆడియో షేరింగ్‌కు సపోర్ట్ చేస్తుంది). ఎడమ వైపు: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> బ్యాటరీ, కుడివైపు: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> బ్యాటరీ."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"కనెక్ట్ చేయబడింది (ఆడియో షేరింగ్‌కు సపోర్ట్ చేస్తుంది). ఎడమ వైపు: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> బ్యాటరీ."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"కనెక్ట్ అయింది (ఆడియో షేరింగ్‌కు సపోర్ట్ చేస్తుంది). కుడివైపు: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> బ్యాటరీ."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"కనెక్ట్ చేయబడింది (ఆడియో షేరింగ్‌కు సపోర్ట్ చేస్తుంది)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"గెస్ట్ పరికరం (ఆడియో షేరింగ్‌కు సపోర్ట్ చేస్తుంది). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> బ్యాటరీ."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"గెస్ట్ పరికరం (ఆడియో షేరింగ్‌కు సపోర్ట్ చేస్తుంది). ఎడమ వైపు: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, కుడివైపు: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> బ్యాటరీ."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"గెస్ట్ పరికరం (ఆడియో షేరింగ్‌కు సపోర్ట్ చేస్తుంది)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"యాక్టివ్ (మీడియా మాత్రమే)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"గెస్ట్ పరికరం"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"గెస్ట్ పరికరం (మీడియాకు మాత్రమే)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"ఆడియో షేరింగ్‌కు సపోర్ట్ చేస్తుంది"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"గెస్ట్ పరికరం. ఆడియో షేరింగ్‌కు సపోర్ట్ చేస్తుంది"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"హార్డ్‌వేర్ యాగ్జిలరేషన్ ఆధారిత రెండరింగ్"</string>
<string name="media_category" msgid="8122076702526144053">"మీడియా"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"పర్యవేక్షణ"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"విండో మేనేజ్‌మెంట్"</string>
<string name="strict_mode" msgid="889864762140862437">"స్ట్రిక్ట్ మోడ్ ఎనేబుల్డ్"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"యాప్‌లు ప్రధాన థ్రెడ్‌లో సుదీర్ఘ చర్యలు చేసేటప్పుడు స్క్రీన్‌ను ఫ్లాష్ చేయండి"</string>
<string name="pointer_location" msgid="7516929526199520173">"పాయింటర్ లొకేషన్"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"వెబ్ వీక్షణ అమలు"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"వెబ్ వీక్షణ అమలుని సెట్ చేయండి"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"ఈ ఎంపిక ఇప్పుడు లేదు. మళ్లీ ట్రై చేయండి."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"వెబ్ వీక్షణ DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"వెబ్ వీక్షణ ప్యాకేజీ కనుగొనబడలేదు."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevToolsను లాంచ్ చేయడం సాధ్యపడలేదు."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"చిత్రం రంగు మోడ్"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB ఉపయోగిస్తుంది"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"డిజేబుల్ చేయబడింది"</string>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index eaf256d520df..e360ae6d5278 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"อัปเดตเสียงแวดล้อมไม่ได้"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"ใช้งานอยู่ (สื่อเท่านั้น) แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"ใช้งานอยู่ (สื่อเท่านั้น) แบตเตอรี่ข้างซ้าย: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ข้างขวา: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"อุปกรณ์ของผู้มาเยือน แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"อุปกรณ์ของผู้มาเยือน L: แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"อุปกรณ์ของผู้มาเยือน (สื่อเท่านั้น) แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"อุปกรณ์ของผู้มาเยือน (สื่อเท่านั้น) L: แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"เชื่อมต่อแล้ว (รองรับการแชร์เสียง) แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"เชื่อมต่อแล้ว (รองรับการแชร์เสียง) แบตเตอรี่ข้างซ้าย: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, ข้างขวา: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"เชื่อมต่อแล้ว (รองรับการแชร์เสียง) ซ้าย: แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"เชื่อมต่อแล้ว (รองรับการแชร์เสียง) ขวา: แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"เชื่อมต่อแล้ว (รองรับการแชร์เสียง)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"อุปกรณ์ของผู้มาเยือน (รองรับการแชร์เสียง) แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"อุปกรณ์ของผู้มาเยือน (รองรับการแชร์เสียง) L: แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"อุปกรณ์ของผู้มาเยือน (รองรับการแชร์เสียง)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"ใช้งานอยู่ (สื่อเท่านั้น)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"อุปกรณ์ของผู้มาเยือน"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"อุปกรณ์ของผู้มาเยือน (สื่อเท่านั้น)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"รองรับการแชร์เสียง"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"อุปกรณ์ของผู้มาเยือน รองรับการแชร์เสียง"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"การแสดงผลที่มีการเร่งด้วยฮาร์ดแวร์"</string>
<string name="media_category" msgid="8122076702526144053">"สื่อ"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"การตรวจสอบ"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"การจัดการหน้าต่าง"</string>
<string name="strict_mode" msgid="889864762140862437">"เปิดใช้งานโหมดเข้มงวด"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"กะพริบหน้าจอเมื่อแอปทำงานในเทรดหลักนาน"</string>
<string name="pointer_location" msgid="7516929526199520173">"ตำแหน่งของตัวชี้"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"การใช้งาน WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"ตั้งค่าการใช้งาน WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"ตัวเลือกนี้ใช้ไม่ได้อีกต่อไป โปรดลองอีกครั้ง"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"เครื่องมือสำหรับนักพัฒนาเว็บของ WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"ไม่พบแพ็กเกจ WebView"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"เปิดเครื่องมือสำหรับนักพัฒนาเว็บไม่ได้"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"โหมดสีของรูปภาพ"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"ใช้ sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"ปิดใช้"</string>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index b6d8d190d1ca..09f40c761fda 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Hindi ma-update ang paligid"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Aktibo (media lang). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterya."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Aktibo (media lang). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterya."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Device ng bisita. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterya."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Device ng bisita. L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterya."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Device ng bisita (media lang). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterya."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Device ng bisita (media lang). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterya."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Nakakonekta (sinusuportahan ang pag-share ng audio), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterya."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Nakakonekta (sinusuportahan ang pag-share ng audio). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterya."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Nakakonekta (sinusuportahan ang pag-share ng audio). Kaliwa: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterya."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Nakakonekta (sinusuportahan ang pag-share ng audio). Kanan: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterya."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Nakakonekta (sinusuportahan ang pag-share ng audio)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Device ng bisita (sinusuportahan ang pag-share ng audio). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> baterya."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Device ng bisita (sinusuportahan ang pag-share ng audio). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> baterya."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Device ng bisita (sinusuportahan ang pag-share ng audio)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Aktibo (media lang)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Device ng bisita"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Device ng bisita (media lang)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Sinusuportahan ang pag-share ng audio"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Device ng bisita. Sinusuportahan ang pag-share ng audio"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Aktibo (media lang), kaliwa lang"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Aktibo (media lang), kanan lang"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Aktibo (media lang), kaliwa at kanan"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Pag-render na pinapabilis ng hardware"</string>
<string name="media_category" msgid="8122076702526144053">"Media"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Pagsubaybay"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Pamamahala sa Window"</string>
<string name="strict_mode" msgid="889864762140862437">"Enabled ang strict mode"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"I-flash ang screen pag may long ops ang app sa main thread"</string>
<string name="pointer_location" msgid="7516929526199520173">"Lokasyon ng pointer"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Pagpapatupad sa WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Itakda ang pagpapatupad sa WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Wala nang bisa ang napiling ito. Subukang muli."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"DevTools ng WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Hindi nakita ang WebView package."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Hindi mailunsad ang DevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Mode ng kulay ng larawan"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Gamitin ang sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Naka-disable"</string>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index c4cbaf69b5a9..19b3baf6c82d 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Çevredeki sesler güncellenemedi"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Etkin (yalnızca medya). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pil seviyesi."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Etkin (yalnızca medya). Sol: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Sağ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> pil seviyesi."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Misafir cihaz. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pil seviyesi."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Misafir cihaz. Sol: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Sağ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> pil seviyesi."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Misafir cihaz (yalnızca medya). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pil seviyesi."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Misafir cihaz (yalnızca medya). Sol: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Sağ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> pil seviyesi."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Bağlı (ses paylaşımını destekler). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pil seviyesi."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Bağlı (ses paylaşımını destekler). Sol: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Sağ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> pil seviyesi."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Bağlı (ses paylaşımını destekler). Sol: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pil seviyesi."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Bağlı (ses paylaşımını destekler). Sağ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pil seviyesi."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Bağlı (ses paylaşımını destekler)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Misafir cihaz (ses paylaşımını destekler). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pil seviyesi."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Misafir cihaz (ses paylaşımını destekler). Sol: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, Sağ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> pil seviyesi."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Misafir cihaz (ses paylaşımını destekler)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Etkin (yalnızca medya)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Misafir cihaz"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Misafir cihaz (yalnızca medya)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Ses paylaşımını destekler"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Misafir cihaz. Ses paylaşımını destekler"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Etkin (yalnızca medya), yalnızca sol"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Etkin (yalnızca medya), yalnızca sağ"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Etkin (yalnızca medya), sol ve sağ"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Donanım hızlandırmalı oluşturma"</string>
<string name="media_category" msgid="8122076702526144053">"Medya"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"İzleme"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Pencere Yönetimi"</string>
<string name="strict_mode" msgid="889864762140862437">"Yüksek düzey modu etkin"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Uygulamalar ana iş parçacığında uzun işlem yaparken ekranı yanıp söndür"</string>
<string name="pointer_location" msgid="7516929526199520173">"İşaretçi konumu"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Web Görünümü kullanımı"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Web Görünümü kullanımını ayarla"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Bu seçenek artık geçerli değil. Tekrar deneyin."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView Geliştirici Araçları"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView paketi bulunamadı."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Geliştirici Araçları başlatılamadı."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Resim renk modu"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB\'yi kullan"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Devre dışı"</string>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index ecff5722472c..ff18f5cf10a4 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Не вдалось оновити стан оточення"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Активне з’єднання (лише для мультимедіа). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> заряду акумулятора."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Активне з’єднання (лише для мультимедіа). Рівень заряду: лівий <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, правий: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Гостьовий пристрій. <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> заряду акумулятора."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Гостьовий пристрій. Лівий: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, правий: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> заряду акумулятора."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Гостьовий пристрій (лише для мультимедіа). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> заряду акумулятора."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Гостьовий пристрій (лише для мультимедіа). Лівий: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, правий: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> заряду акумулятора."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Підключено (підтримує надсилання аудіо). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> заряду акумулятора."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Підключено (підтримує надсилання аудіо). Лівий: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, правий: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> заряду акумулятора."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Підключено (підтримує надсилання аудіо). Лівий: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> заряду акумулятора."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Підключено (підтримує надсилання аудіо). Правий: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> заряду акумулятора."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Підключено (підтримує надсилання аудіо)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Гостьовий пристрій (підтримує надсилання аудіо). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> заряду акумулятора."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Гостьовий пристрій (підтримує надсилання аудіо). Лівий: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, правий: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> заряду акумулятора."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Гостьовий пристрій (підтримує надсилання аудіо)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Активно (лише для мультимедіа)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Гостьовий пристрій"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Гостьовий пристрій (лише для мультимедіа)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Підтримує надсилання аудіо"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Гостьовий пристрій. Підтримує надсилання аудіо."</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Апаратне прискорення"</string>
<string name="media_category" msgid="8122076702526144053">"Медіа"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Моніторинг"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Керування вікнами"</string>
<string name="strict_mode" msgid="889864762140862437">"Строгий режим увімкнено"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Підсвічувати екран під час довгострокових операцій"</string>
<string name="pointer_location" msgid="7516929526199520173">"Розташування курсора"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Застосування WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Налаштувати застосування WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Ця опція більше не дійсна. Повторіть спробу."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Інструменти розробника WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Пакет WebView не знайдено."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Не вдалося запустити Інструменти розробника."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Режим кольору"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Використовувати sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Вимкнено"</string>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index 34071147f5d9..a07a341fd956 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"اطراف کو اپ ڈیٹ نہیں کیا جا سکا"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"فعال (صرف میڈیا)۔ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> بیٹری۔"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"‏فعال (صرف میڈیا)۔ L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، ‏R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> بیٹری۔"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"مہمان آلہ۔ ‫<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> بیٹری۔"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"مہمان آلہ۔ بایاں: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، دایاں: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> بیٹری۔"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"مہمان آلہ (صرف میڈیا)۔ ‫<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> بیٹری۔"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"مہمان آلہ (صرف میڈیا)۔ بایاں: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، دایاں: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> بیٹری۔"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"‏منسلک ہے (آڈیو کے اشتراک کو سپورٹ کرتا ہے)۔ ‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> بیٹری۔"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"‏منسلک ہے (آڈیو کے اشتراک کو سپورٹ کرتا ہے)۔ L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، ‏R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> بیٹری۔"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"منسلک ہے (آڈیو کے اشتراک کو سپورٹ کرتا ہے)۔ بائيں: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> بیٹری۔"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"منسلک ہے (آڈیو کے اشتراک کو سپورٹ کرتا ہے)۔ دائيں: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> بیٹری۔"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"منسلک ہے (آڈیو کے اشتراک کو سپورٹ کرتا ہے)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"مہمان آلہ (آڈیو کے اشتراک کو سپورٹ کرتا ہے)۔ ‫<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> بیٹری۔"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"مہمان آلہ (آڈیو کے اشتراک کو سپورٹ کرتا ہے)۔ بایاں: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>، دایاں: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> بیٹری۔"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"مہمان آلہ (آڈیو کے اشتراک کو سپورٹ کرتا ہے)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"فعال (صرف میڈیا)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"مہمان آلہ"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"مہمان آلہ (صرف میڈیا)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"آڈیو کے اشتراک کو سپورٹ کرتا ہے"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"مہمان آلہ۔ آڈیو کے اشتراک کو سپورٹ کرتا ہے"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"ہارڈ ویئر کے ذریعے تیز کردہ رینڈرنگ"</string>
<string name="media_category" msgid="8122076702526144053">"میڈیا"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"مانیٹر کرنا"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"ونڈو کا نظم و نسق"</string>
<string name="strict_mode" msgid="889864762140862437">"سخت وضع فعال ہے"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"ایپس کے اصل تھریڈ پر طویل اعمال انجام دیتے وقت اسکرین کو فلیش کریں"</string>
<string name="pointer_location" msgid="7516929526199520173">"پوائنٹر مقام"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"‏WebView کا نفاذ"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"‏WebView کا نفاذ سیٹ کریں"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"یہ انتخاب اب درست نہیں رہا۔ دوبارہ کوشش کریں۔"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"‏‫WebView پیکیج نہیں ملا۔"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"‏‫DevTools کو شروع نہیں کیا جا سکا۔"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"تصویری رنگ موڈ"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"‏sRGB استعمال کریں"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"غیر فعال"</string>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index bff79933c10c..3a10aa801797 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Atrof-muhit yangilanmadi"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Faol (faqat media uchun) Quvvat: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Faol (faqat media uchun), quvvat: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (L), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (R)"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Mehmon qurilma. Quvvat: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Mehmon qurilma. Quvvat: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (L), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (R)."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Mehmon qurilma (faqat multimedia). Quvvat: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Mehmon qurilma (faqat multimedia). Quvvat: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (L), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (R)."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Ulangan (audio yuborish mumkin), quvvat: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Ulangan (audio yuborish mumkin), quvvat: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (L), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (R)"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Ulangan (audio yuborish mumkin). Quvvat: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> (chap)."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Ulangan (audio yuborish mumkin). Quvvat: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> (oʻng)."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Ulangan (audio yuborish mumkin)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Mehmon qurilma (audio ulashuvni dastaklaydi). Quvvat: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Mehmon qurilma (audio ulashuvni dastaklaydi). Quvvat: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> (L), <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> (R)."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Mehmon qurilma (audio ulashuvni dastaklaydi)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Faol (faqat media uchun)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Mehmon qurilma"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Mehmon qurilma (faqat multimedia)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Audio yuborishi mumkin"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Mehmon qurilma. Audio ulashishi mumkin"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Faol (faqat media uchun), faqat chap"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Faol (faqat media uchun), faqat oʻng"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Faol (faqat media uchun), chap va oʻng"</string>
@@ -148,7 +138,7 @@
<string name="bluetooth_profile_opp" msgid="6692618568149493430">"Fayl uzatish"</string>
<string name="bluetooth_profile_hid" msgid="2969922922664315866">"Kiritish qurilmasi"</string>
<string name="bluetooth_profile_pan" msgid="1006235139308318188">"Internetga ulanish"</string>
- <string name="bluetooth_profile_pbap" msgid="2103406516858653017">"Chaqiruv va kontaktlarga ruxsat berilsinmi?"</string>
+ <string name="bluetooth_profile_pbap" msgid="2103406516858653017">"Kontaktlar va chaqiruv tarixiga ruxsat berish"</string>
<string name="bluetooth_profile_pbap_summary" msgid="402819589201138227">"Maʼlumotlar chaqiruvlar haqida xabar berish uchun ishlatiladi"</string>
<string name="bluetooth_profile_pan_nap" msgid="7871974753822470050">"Internet aloqasi ulashmasi"</string>
<string name="bluetooth_profile_map" msgid="8907204701162107271">"SMS xabarlari"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Vizualizatsiyani apparatli tezlatish"</string>
<string name="media_category" msgid="8122076702526144053">"Multimedia"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Monitoring"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Oyna boshqaruvi"</string>
<string name="strict_mode" msgid="889864762140862437">"Qat’iy rejim yoqilgan"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Uzun amallar vaqtida ekranni miltillatish"</string>
<string name="pointer_location" msgid="7516929526199520173">"Kursor joylashuvi"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView ta’minotchisi"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"WebView ta’minotchisini sozlash"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Bu variant endi yaroqsiz. Qaytadan urining."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"WebView paketi topilmadi."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"DevTools ishga tushirilmadi."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Rang rejimi"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"sRGB ranglaridan foydalanish"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Oʻchiq"</string>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index cb0a875a8d7a..6095e8c2af4c 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Không cập nhật được âm lượng xung quanh"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Đang hoạt động (chỉ phát nội dung đa phương tiện). Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pin."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Đang hoạt động (chỉ phát nội dung đa phương tiện). Bên trái: Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> pin. Bên phải: Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> pin."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Thiết bị khách. Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pin."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Thiết bị khách. Bên trái: Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> pin. Bên phải: Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> pin."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Thiết bị khách (chỉ dành cho nội dung nghe nhìn). Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pin."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Thiết bị khách (chỉ dành cho nội dung nghe nhìn). Bên trái: Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> pin. Bên phải: Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> pin."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Đã kết nối (có hỗ trợ tính năng chia sẻ âm thanh). Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pin."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Đã kết nối (có hỗ trợ tính năng chia sẻ âm thanh). Bên trái: Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> pin. Bên phải: Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> pin."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Đã kết nối (có hỗ trợ tính năng chia sẻ âm thanh). Bên trái: Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pin."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Đã kết nối (có hỗ trợ tính năng chia sẻ âm thanh). Bên phải: Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pin."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Đã kết nối (có hỗ trợ tính năng chia sẻ âm thanh)."</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Thiết bị khách (hỗ trợ tính năng chia sẻ âm thanh). Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> pin."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Thiết bị khách (hỗ trợ tính năng chia sẻ âm thanh). Bên trái: Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> pin. Bên phải: Còn <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> pin."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Thiết bị khách (hỗ trợ tính năng chia sẻ âm thanh)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Đang hoạt động (chỉ phát nội dung đa phương tiện)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Thiết bị khách"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Thiết bị khách (chỉ dành cho nội dung nghe nhìn)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Hỗ trợ tính năng chia sẻ âm thanh"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Thiết bị khách. Hỗ trợ tính năng chia sẻ âm thanh"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Đang hoạt động (chỉ phát nội dung đa phương tiện), chỉ dùng tai nghe bên trái"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Đang hoạt động (chỉ phát nội dung đa phương tiện), chỉ dùng tai nghe bên phải"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Đang hoạt động (chỉ phát nội dung đa phương tiện), đang dùng cả tai nghe bên trái và phải"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Kết xuất có tăng tốc phần cứng"</string>
<string name="media_category" msgid="8122076702526144053">"Phương tiện"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Giám sát"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Quản lý cửa sổ"</string>
<string name="strict_mode" msgid="889864762140862437">"Luôn bật chế độ nghiêm ngặt"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Màn hình nháy khi ứng dụng thực hiện các hoạt động dài trên luồng chính"</string>
<string name="pointer_location" msgid="7516929526199520173">"Vị trí con trỏ"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Triển khai WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Đặt triển khai WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Lựa chọn này không còn hợp lệ nữa. Hãy thử lại."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"Công cụ cho nhà phát triển WebView"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Không tìm thấy gói WebView."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Không khởi chạy được Công cụ cho nhà phát triển."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Chế độ màu của ảnh"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Sử dụng sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Đã tắt"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index f13f7d91bd71..06379e1c254f 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -107,39 +107,29 @@
<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>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"使用中(仅限媒体)。电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"使用中(仅限媒体)。左侧电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>,右侧电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"访客设备。电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"访客设备。左侧电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>,右侧电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"访客设备(仅限媒体)。电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"访客设备(仅限媒体)。左侧电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>,右侧电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"已连接(支持音频分享)。电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"已连接(支持音频分享)。左侧电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>,右侧电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"已连接(支持音频分享)。左侧电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"已连接(支持音频分享)。右侧电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"已连接(支持音频分享)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"访客设备(支持音频分享)。电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"访客设备(支持音频分享)。左侧电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>,右侧电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"访客设备(支持音频分享)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"使用中(仅限媒体)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"访客设备"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"访客设备(仅限媒体)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"支持音频分享"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"访客设备。支持音频分享"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"硬件加速渲染"</string>
<string name="media_category" msgid="8122076702526144053">"媒体"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"监控"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"窗口管理"</string>
<string name="strict_mode" msgid="889864762140862437">"启用严格模式"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"应用在主线程上执行长时间操作时闪烁屏幕"</string>
<string name="pointer_location" msgid="7516929526199520173">"指针位置"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView 实现"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"设置 WebView 实现"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"此选项已失效,请重试。"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView 开发者工具"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"未找到 WebView 软件包。"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"无法启动开发者工具。"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"图片颜色模式"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"使用 sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"已停用"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index 14976e098efa..a3ae971b07c4 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"無法更新環境聲音"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"啟用 (只限媒體)。<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> 電量。"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"啟用 (只限媒體),左側:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> 電量,右側:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> 電量。"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"訪客裝置。<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> 電量。"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"訪客裝置。左側:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>,右側:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> 電量。"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"訪客裝置 (僅限媒體)。<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> 電量。"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"訪客裝置 (僅限媒體)。左側:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>,右側:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> 電量。"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"已連線 (支援音訊分享功能),<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> 電量。"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"已連線 (支援音訊分享功能),左側:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g> 電量,右側:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> 電量。"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"已連線 (支援音訊分享功能)。左側:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> 電量。"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"已連線 (支援音訊分享功能)。右側:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> 電量。"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"已連線 (支援音訊分享功能)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"訪客裝置 (支援音訊分享功能)。<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> 電量。"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"訪客裝置 (支援音訊分享功能)。左側:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>,右側:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> 電量。"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"訪客裝置 (支援音訊分享功能)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"啟用 (只限媒體)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"訪客裝置"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"訪客裝置 (僅限媒體)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"支援音訊分享功能"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"訪客裝置。支援音訊分享功能"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"硬件加速轉譯"</string>
<string name="media_category" msgid="8122076702526144053">"媒體"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"監控"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"視窗管理"</string>
<string name="strict_mode" msgid="889864762140862437">"嚴格模式已啟用"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"當應用程式在主執行緒中進行長時間作業時,讓螢幕閃爍"</string>
<string name="pointer_location" msgid="7516929526199520173">"指標位置"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView 設置"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"設定 WebView 設置"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"此選擇已失效,請再試一次。"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView 開發人員工具"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"找不到 WebView 套件。"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"無法啟動開發人員工具。"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"相片顏色模式"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"使用 sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"已停用"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index b65cb4f5ecbe..f670088de16b 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"無法更新環境狀態"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"已啟用 (僅限媒體)。電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"已啟用 (僅限媒體)。左側電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>,右側電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"訪客裝置。電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"訪客裝置。左側電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>,右側電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"訪客裝置 (僅限媒體)。電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"訪客裝置 (僅限媒體)。左側電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>,右側電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"已連線 (支援音訊分享)。電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"已連線 (支援音訊分享)。左側電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>,右側電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"已連線 (支援音訊分享)。左側電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"已連線 (支援音訊分享)。右側電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"已連線 (支援音訊分享)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"訪客裝置 (支援音訊分享)。電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"訪客裝置 (支援音訊分享)。左側電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>,右側電量:<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g>。"</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"訪客裝置 (支援音訊分享)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"啟用 (僅限媒體)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"訪客裝置"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"訪客裝置 (僅限媒體)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"支援音訊分享"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"訪客裝置。支援音訊分享"</string>
<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>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"硬體加速轉譯"</string>
<string name="media_category" msgid="8122076702526144053">"媒體"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"監控"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"視窗管理"</string>
<string name="strict_mode" msgid="889864762140862437">"嚴格模式已啟用"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"當應用程式在主執行緒中進行長時間作業時,讓螢幕閃爍"</string>
<string name="pointer_location" msgid="7516929526199520173">"指標位置"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"WebView 實作"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"設定 WebView 實作"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"這個選項已失效,請再試一次。"</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"WebView 開發人員工具"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"找不到 WebView 套件。"</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"無法啟動開發人員工具。"</string>
<string name="picture_color_mode" msgid="1013807330552931903">"螢幕色彩模式"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"使用 sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"已停用"</string>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index 859c153dd59d..1d792a0a2864 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -113,33 +113,23 @@
<string name="bluetooth_hearing_device_ambient_error" msgid="6035857289108813878">"Ayikwazanga ukubuyekeza izindawo ezizungezile"</string>
<string name="bluetooth_active_media_only_battery_level" msgid="7772517511061834073">"Iyasebenza (imidiya kuphela). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ibhethri."</string>
<string name="bluetooth_active_media_only_battery_level_untethered" msgid="7444753133664620926">"Iyasebenza (imidiya kuphela). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ibhethri."</string>
- <!-- no translation found for bluetooth_guest_battery_level (2820003593899467676) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered (5404013822067644960) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level (7928347900623812299) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_battery_level_untethered (4458143141394300892) -->
- <skip />
+ <string name="bluetooth_guest_battery_level" msgid="2820003593899467676">"Idivayisi yesivakashi. Ibhethri engu-<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered" msgid="5404013822067644960">"Idivayisi yesivakashi. L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ibhethri."</string>
+ <string name="bluetooth_guest_media_only_battery_level" msgid="7928347900623812299">"Idivayisi yomsindo (imidiya kuphela). Ibhethri engu-<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_media_only_battery_level_untethered" msgid="4458143141394300892">"Idivayisi yomsindo (imidiya kuphela). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ibhethri."</string>
<string name="bluetooth_battery_level_lea_support" msgid="5968584103507988820">"Ixhunyiwe (isekela ukwabelana ngokuqoshiwe). <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ibhethri."</string>
<string name="bluetooth_battery_level_untethered_lea_support" msgid="803110681688633362">"Ixhunyiwe (isekela ukwabelana ngokuqoshiwe). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ibhethri."</string>
<string name="bluetooth_battery_level_untethered_left_lea_support" msgid="7707464334346454950">"Ixhunyiwe (isekela ukwabelana ngokuqoshiwe). Kwesokudla: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ibhethri."</string>
<string name="bluetooth_battery_level_untethered_right_lea_support" msgid="8941549024377771038">"Ixhunyiwe (isekela ukwabelana ngokuqoshiwe). Kwesokudla: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> ibhethri."</string>
<string name="bluetooth_no_battery_level_lea_support" msgid="5721725041048434075">"Ixhunyiwe (isekela ukwabelana ngokuqoshiwe)"</string>
- <!-- no translation found for bluetooth_guest_battery_level_lea_support (8098327939585013928) -->
- <skip />
- <!-- no translation found for bluetooth_guest_battery_level_untethered_lea_support (3701035025565668360) -->
- <skip />
- <!-- no translation found for bluetooth_guest_no_battery_level_lea_support (2977038548753103470) -->
- <skip />
+ <string name="bluetooth_guest_battery_level_lea_support" msgid="8098327939585013928">"Idivayisi yesivakashi (isekela ukwabelana ngomsindo). Ibhethri engu-<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>."</string>
+ <string name="bluetooth_guest_battery_level_untethered_lea_support" msgid="3701035025565668360">"Idivayisi yesivakashi (isekela ukwabelana ngomsindo). L: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_0">%1$s</xliff:g>, R: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE_1">%2$s</xliff:g> ibhethri."</string>
+ <string name="bluetooth_guest_no_battery_level_lea_support" msgid="2977038548753103470">"Idivayisi yesivakashi (isekela ukwabelana ngomsindo)"</string>
<string name="bluetooth_active_media_only_no_battery_level" msgid="71106861912593126">"Kuyasebenza (imidiya kuphela)"</string>
- <!-- no translation found for bluetooth_guest_no_battery_level (9122974160381136920) -->
- <skip />
- <!-- no translation found for bluetooth_guest_media_only_no_battery_level (7666347601796705721) -->
- <skip />
+ <string name="bluetooth_guest_no_battery_level" msgid="9122974160381136920">"Idivayisi yesivakashi"</string>
+ <string name="bluetooth_guest_media_only_no_battery_level" msgid="7666347601796705721">"Idivayisi yesivakashi (imidiya kuphela)"</string>
<string name="bluetooth_saved_device_lea_support" msgid="7231323139968285768">"Isekela ukwabelana ngokuqoshiwe"</string>
- <!-- no translation found for bluetooth_guest_saved_device_lea_support (5621291599518569876) -->
- <skip />
+ <string name="bluetooth_guest_saved_device_lea_support" msgid="5621291599518569876">"Idivayisi yesivakashi. Isekela ukwabelana ngomsindo"</string>
<string name="bluetooth_hearing_aid_media_only_left_active" msgid="1632152540901488645">"Iyasebenza (imidiya kuphela), ngakwesokunxele kuphela"</string>
<string name="bluetooth_hearing_aid_media_only_right_active" msgid="3854140683042617230">"Kuyasebenza (imidiya kuphela), ngakwesokudla kuphela"</string>
<string name="bluetooth_hearing_aid_media_only_left_and_right_active" msgid="1299913413062528417">"Kuyasebenza (imidiya kuphela), ngakwesokunxele nakwesokudla"</string>
@@ -396,8 +386,7 @@
<string name="debug_hw_drawing_category" msgid="5830815169336975162">"Ukunikezelwa okusheshisiwe kwezingxenyekazi zekhompyutha"</string>
<string name="media_category" msgid="8122076702526144053">"Imidiya"</string>
<string name="debug_monitoring_category" msgid="1597387133765424994">"Ukwengamela"</string>
- <!-- no translation found for window_management_category (2015535427098365170) -->
- <skip />
+ <string name="window_management_category" msgid="2015535427098365170">"Ukuphathwa Kwewindi"</string>
<string name="strict_mode" msgid="889864762140862437">"Imodi eqinile ivumelwe"</string>
<string name="strict_mode_summary" msgid="1838248687233554654">"Ukuphazimisa isikrini uma izinhlelo zokusebenza ziyenza umsebenzi ngesikhathi eside kuchungechunge olukhulu"</string>
<string name="pointer_location" msgid="7516929526199520173">"Isikhombi sendawo"</string>
@@ -492,12 +481,9 @@
<string name="select_webview_provider_title" msgid="3917815648099445503">"Ukufakwa ke-WebView"</string>
<string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Sesba ukufakwa kwe-WebView"</string>
<string name="select_webview_provider_toast_text" msgid="8512254949169359848">"Lokhu kukhetha akusavumelekile. Zama futhi."</string>
- <!-- no translation found for webview_launch_devtools_title (8009687433555367112) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_package (3182544553665113721) -->
- <skip />
- <!-- no translation found for webview_launch_devtools_no_activity (4066006313619617140) -->
- <skip />
+ <string name="webview_launch_devtools_title" msgid="8009687433555367112">"IWebView DevTools"</string>
+ <string name="webview_launch_devtools_no_package" msgid="3182544553665113721">"Iphakheji yeWebView ayitholwanga."</string>
+ <string name="webview_launch_devtools_no_activity" msgid="4066006313619617140">"Ayikwazanga ukuqalisa iDevTools."</string>
<string name="picture_color_mode" msgid="1013807330552931903">"Imodi yombala wesithombe"</string>
<string name="picture_color_mode_desc" msgid="151780973768136200">"Sebenzisa i-sRGB"</string>
<string name="daltonizer_mode_disabled" msgid="403424372812399228">"Kukhutshaziwe"</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
index 522a436b0732..31948e49b4ce 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
@@ -23,6 +23,7 @@ import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
+import android.hardware.input.InputManager;
import android.media.AudioDeviceAttributes;
import android.media.AudioDeviceInfo;
import android.media.AudioManager;
@@ -34,6 +35,7 @@ import android.sysprop.BluetoothProperties;
import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
+import android.view.InputDevice;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
@@ -1054,7 +1056,7 @@ public class BluetoothUtils {
/** Get develop option value for audio sharing preview. */
@WorkerThread
- private static boolean getAudioSharingPreviewValue(@Nullable ContentResolver contentResolver) {
+ public static boolean getAudioSharingPreviewValue(@Nullable ContentResolver contentResolver) {
if (contentResolver == null) return false;
return Settings.Global.getInt(
contentResolver,
@@ -1193,4 +1195,53 @@ public class BluetoothUtils {
}
device.setMetadata(METADATA_FAST_PAIR_CUSTOMIZED_FIELDS, fastPairCustomizedMeta.getBytes());
}
+
+ /**
+ * Returns the {@link InputDevice} of the given bluetooth address if the device is a input
+ * device.
+ *
+ * @param address The address of the bluetooth device
+ * @return The {@link InputDevice} of the given address if applicable
+ */
+ @Nullable
+ public static InputDevice getInputDevice(Context context, String address) {
+ InputManager im = context.getSystemService(InputManager.class);
+
+ if (im != null) {
+ for (int deviceId : im.getInputDeviceIds()) {
+ String btAddress = im.getInputDeviceBluetoothAddress(deviceId);
+
+ if (btAddress != null && btAddress.equals(address)) {
+ return im.getInputDevice(deviceId);
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Identifies whether a device is a stylus using the associated {@link InputDevice} or
+ * {@link CachedBluetoothDevice}.
+ * InputDevices are only available when the device is USI or Bluetooth-connected, whereas
+ * CachedBluetoothDevices are available for Bluetooth devices when connected or paired,
+ * so to handle all cases, both are needed.
+ *
+ * @param inputDevice The associated input device of the stylus
+ * @param cachedBluetoothDevice The associated bluetooth device of the stylus
+ */
+ public static boolean isDeviceStylus(@Nullable InputDevice inputDevice,
+ @Nullable CachedBluetoothDevice cachedBluetoothDevice) {
+ if (inputDevice != null && inputDevice.supportsSource(InputDevice.SOURCE_STYLUS)) {
+ return true;
+ }
+
+ if (cachedBluetoothDevice != null) {
+ BluetoothDevice bluetoothDevice = cachedBluetoothDevice.getDevice();
+ String deviceType = BluetoothUtils.getStringMetaData(bluetoothDevice,
+ BluetoothDevice.METADATA_DEVICE_TYPE);
+ return TextUtils.equals(deviceType, BluetoothDevice.DEVICE_TYPE_STYLUS);
+ }
+
+ return false;
+ }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java
index 367e38ed779d..f18a2da27a70 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java
@@ -149,8 +149,8 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile {
private ContentResolver mContentResolver;
private ContentObserver mSettingsObserver;
// Cached broadcast callbacks being register before service is connected.
- private Map<BluetoothLeBroadcast.Callback, Executor> mCachedBroadcastCallbackExecutorMap =
- new ConcurrentHashMap<>();
+ private ConcurrentHashMap<BluetoothLeBroadcast.Callback, Executor>
+ mCachedBroadcastCallbackExecutorMap = new ConcurrentHashMap<>();
private final ServiceListener mServiceListener =
new ServiceListener() {
@@ -880,7 +880,7 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile {
@NonNull @CallbackExecutor Executor executor,
@NonNull BluetoothLeBroadcast.Callback callback) {
if (mServiceBroadcast == null) {
- Log.d(TAG, "registerServiceCallBack failed, the BluetoothLeBroadcast is null.");
+ Log.d(TAG, "registerServiceCallBack failed, proxy not attached.");
mCachedBroadcastCallbackExecutorMap.putIfAbsent(callback, executor);
return;
}
@@ -902,10 +902,7 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile {
@NonNull @CallbackExecutor Executor executor,
@NonNull BluetoothLeBroadcastAssistant.Callback callback) {
if (mServiceBroadcastAssistant == null) {
- Log.d(
- TAG,
- "registerBroadcastAssistantCallback failed, "
- + "the BluetoothLeBroadcastAssistant is null.");
+ Log.d(TAG, "registerBroadcastAssistantCallback failed, proxy not attached.");
return;
}
@@ -920,7 +917,7 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile {
public void unregisterServiceCallBack(@NonNull BluetoothLeBroadcast.Callback callback) {
mCachedBroadcastCallbackExecutorMap.remove(callback);
if (mServiceBroadcast == null) {
- Log.d(TAG, "unregisterServiceCallBack failed, the BluetoothLeBroadcast is null.");
+ Log.d(TAG, "unregisterServiceCallBack failed, proxy not attached.");
return;
}
@@ -939,10 +936,7 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile {
private void unregisterBroadcastAssistantCallback(
@NonNull BluetoothLeBroadcastAssistant.Callback callback) {
if (mServiceBroadcastAssistant == null) {
- Log.d(
- TAG,
- "unregisterBroadcastAssistantCallback, "
- + "the BluetoothLeBroadcastAssistant is null.");
+ Log.d(TAG, "unregisterBroadcastAssistantCallback, proxy not attched.");
return;
}
@@ -1140,7 +1134,9 @@ public class LocalBluetoothLeBroadcast implements LocalBluetoothProfile {
/** Update fallback active device if needed. */
public void updateFallbackActiveDeviceIfNeeded() {
- if (Flags.disableAudioSharingAutoPickFallbackInUi()) {
+ if (Flags.disableAudioSharingAutoPickFallbackInUi() || (mContext != null
+ && Flags.audioSharingDeveloperOption()
+ && BluetoothUtils.getAudioSharingPreviewValue(mContext.getContentResolver()))) {
Log.d(TAG, "Skip updateFallbackActiveDeviceIfNeeded, disable flag is on");
return;
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/connectivity/OWNERS b/packages/SettingsLib/src/com/android/settingslib/connectivity/OWNERS
index 9f15c1bb5081..b676d8daad52 100644
--- a/packages/SettingsLib/src/com/android/settingslib/connectivity/OWNERS
+++ b/packages/SettingsLib/src/com/android/settingslib/connectivity/OWNERS
@@ -1,6 +1,5 @@
# Default reviewers for this and subdirectories.
andychou@google.com
-arcwang@google.com
changbetty@google.com
qal@google.com
wengsu@google.com
diff --git a/packages/SettingsLib/src/com/android/settingslib/qrcode/OWNERS b/packages/SettingsLib/src/com/android/settingslib/qrcode/OWNERS
index 372eb81fdee2..921ffedb337c 100644
--- a/packages/SettingsLib/src/com/android/settingslib/qrcode/OWNERS
+++ b/packages/SettingsLib/src/com/android/settingslib/qrcode/OWNERS
@@ -1,5 +1,4 @@
# Default reviewers for this and subdirectories.
-bonianchen@google.com
changbetty@google.com
wengsu@google.com
zoeychen@google.com
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/AmbientVolumeControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/AmbientVolumeControllerTest.java
index abc1d226972b..e4381ae0a663 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/AmbientVolumeControllerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/AmbientVolumeControllerTest.java
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.when;
import android.bluetooth.AudioInputControl;
import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothProfile;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
@@ -67,6 +68,9 @@ public class AmbientVolumeControllerTest {
@Before
public void setUp() {
when(mProfileManager.getVolumeControlProfile()).thenReturn(mVolumeControlProfile);
+ when(mVolumeControlProfile.isProfileReady()).thenReturn(true);
+ when(mVolumeControlProfile.getConnectionStatus(mDevice)).thenReturn(
+ BluetoothProfile.STATE_CONNECTED);
when(mDevice.getAddress()).thenReturn(TEST_ADDRESS);
when(mDevice.isConnected()).thenReturn(true);
mVolumeController = new AmbientVolumeController(mProfileManager, mCallback);
@@ -74,8 +78,6 @@ public class AmbientVolumeControllerTest {
@Test
public void onServiceConnected_notifyCallback() {
- when(mVolumeControlProfile.isProfileReady()).thenReturn(true);
-
mVolumeController.onServiceConnected();
verify(mCallback).onVolumeControlServiceConnected();
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java
index ebe6128e5582..0325c0ec7915 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/BluetoothUtilsTest.java
@@ -15,7 +15,9 @@
*/
package com.android.settingslib.bluetooth;
+import static com.android.settingslib.bluetooth.BluetoothUtils.getInputDevice;
import static com.android.settingslib.bluetooth.BluetoothUtils.isAvailableAudioSharingMediaBluetoothDevice;
+import static com.android.settingslib.bluetooth.BluetoothUtils.isDeviceStylus;
import static com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast.UNKNOWN_VALUE_PLACEHOLDER;
import static com.android.settingslib.flags.Flags.FLAG_ENABLE_DETERMINING_ADVANCED_DETAILS_HEADER_WITH_METADATA;
@@ -42,6 +44,7 @@ import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
+import android.hardware.input.InputManager;
import android.media.AudioDeviceAttributes;
import android.media.AudioDeviceInfo;
import android.media.AudioManager;
@@ -51,6 +54,7 @@ import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
import android.util.Pair;
+import android.view.InputDevice;
import com.android.internal.R;
import com.android.settingslib.flags.Flags;
@@ -97,14 +101,18 @@ public class BluetoothUtilsTest {
@Mock private LocalBluetoothLeBroadcastAssistant mAssistant;
@Mock private CachedBluetoothDeviceManager mDeviceManager;
@Mock private BluetoothLeBroadcastReceiveState mLeBroadcastReceiveState;
+ @Mock
+ private InputManager mInputManager;
private Context mContext;
private ShadowBluetoothAdapter mShadowBluetoothAdapter;
+ private final InputDevice mInputDevice = mock(InputDevice.class);
private static final String STRING_METADATA = "string_metadata";
private static final String LE_AUDIO_SHARING_METADATA = "le_audio_sharing";
private static final String BOOL_METADATA = "true";
private static final String INT_METADATA = "25";
private static final int METADATA_FAST_PAIR_CUSTOMIZED_FIELDS = 25;
+ private static final int TEST_DEVICE_ID = 123;
private static final String KEY_HEARABLE_CONTROL_SLICE = "HEARABLE_CONTROL_SLICE_WITH_WIDTH";
private static final String CONTROL_METADATA =
"<HEARABLE_CONTROL_SLICE_WITH_WIDTH>"
@@ -115,6 +123,7 @@ public class BluetoothUtilsTest {
private static final String FAKE_TEMP_BOND_METADATA = "<TEMP_BOND_TYPE>fake</TEMP_BOND_TYPE>";
private static final String TEST_EXCLUSIVE_MANAGER_PACKAGE = "com.test.manager";
private static final String TEST_EXCLUSIVE_MANAGER_COMPONENT = "com.test.manager/.component";
+ private static final String TEST_ADDRESS = "11:22:33:44:55:66";
private static final int TEST_BROADCAST_ID = 25;
@Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@@ -134,6 +143,10 @@ public class BluetoothUtilsTest {
when(mA2dpProfile.getProfileId()).thenReturn(BluetoothProfile.A2DP);
when(mLeAudioProfile.getProfileId()).thenReturn(BluetoothProfile.LE_AUDIO);
when(mHearingAid.getProfileId()).thenReturn(BluetoothProfile.HEARING_AID);
+ when(mContext.getSystemService(InputManager.class)).thenReturn(mInputManager);
+ when(mInputManager.getInputDeviceIds()).thenReturn(new int[]{TEST_DEVICE_ID});
+ when(mInputManager.getInputDeviceBluetoothAddress(TEST_DEVICE_ID)).thenReturn(TEST_ADDRESS);
+ when(mInputManager.getInputDevice(TEST_DEVICE_ID)).thenReturn(mInputDevice);
}
@Test
@@ -1097,9 +1110,8 @@ public class BluetoothUtilsTest {
@Test
public void getAudioDeviceAttributesForSpatialAudio_bleHeadset() {
- String address = "11:22:33:44:55:66";
when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice);
- when(mCachedBluetoothDevice.getAddress()).thenReturn(address);
+ when(mCachedBluetoothDevice.getAddress()).thenReturn(TEST_ADDRESS);
when(mCachedBluetoothDevice.getProfiles()).thenReturn(List.of(mLeAudioProfile));
when(mLeAudioProfile.isEnabled(mBluetoothDevice)).thenReturn(true);
@@ -1112,14 +1124,13 @@ public class BluetoothUtilsTest {
new AudioDeviceAttributes(
AudioDeviceAttributes.ROLE_OUTPUT,
AudioDeviceInfo.TYPE_BLE_HEADSET,
- address));
+ TEST_ADDRESS));
}
@Test
public void getAudioDeviceAttributesForSpatialAudio_bleSpeaker() {
- String address = "11:22:33:44:55:66";
when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice);
- when(mCachedBluetoothDevice.getAddress()).thenReturn(address);
+ when(mCachedBluetoothDevice.getAddress()).thenReturn(TEST_ADDRESS);
when(mCachedBluetoothDevice.getProfiles()).thenReturn(List.of(mLeAudioProfile));
when(mLeAudioProfile.isEnabled(mBluetoothDevice)).thenReturn(true);
@@ -1132,14 +1143,14 @@ public class BluetoothUtilsTest {
new AudioDeviceAttributes(
AudioDeviceAttributes.ROLE_OUTPUT,
AudioDeviceInfo.TYPE_BLE_SPEAKER,
- address));
+ TEST_ADDRESS));
}
@Test
public void getAudioDeviceAttributesForSpatialAudio_a2dp() {
- String address = "11:22:33:44:55:66";
+
when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice);
- when(mCachedBluetoothDevice.getAddress()).thenReturn(address);
+ when(mCachedBluetoothDevice.getAddress()).thenReturn(TEST_ADDRESS);
when(mCachedBluetoothDevice.getProfiles()).thenReturn(List.of(mA2dpProfile));
when(mA2dpProfile.isEnabled(mBluetoothDevice)).thenReturn(true);
@@ -1152,14 +1163,13 @@ public class BluetoothUtilsTest {
new AudioDeviceAttributes(
AudioDeviceAttributes.ROLE_OUTPUT,
AudioDeviceInfo.TYPE_BLUETOOTH_A2DP,
- address));
+ TEST_ADDRESS));
}
@Test
public void getAudioDeviceAttributesForSpatialAudio_hearingAid() {
- String address = "11:22:33:44:55:66";
when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice);
- when(mCachedBluetoothDevice.getAddress()).thenReturn(address);
+ when(mCachedBluetoothDevice.getAddress()).thenReturn(TEST_ADDRESS);
when(mCachedBluetoothDevice.getProfiles()).thenReturn(List.of(mHearingAid));
when(mHearingAid.isEnabled(mBluetoothDevice)).thenReturn(true);
@@ -1172,7 +1182,7 @@ public class BluetoothUtilsTest {
new AudioDeviceAttributes(
AudioDeviceAttributes.ROLE_OUTPUT,
AudioDeviceInfo.TYPE_HEARING_AID,
- address));
+ TEST_ADDRESS));
}
@Test
@@ -1375,4 +1385,54 @@ public class BluetoothUtilsTest {
verify(mBluetoothDevice).setMetadata(METADATA_FAST_PAIR_CUSTOMIZED_FIELDS,
TEMP_BOND_METADATA.getBytes());
}
+
+ @Test
+ public void getInputDevice_addressNotMatched_returnsNull() {
+ assertThat(getInputDevice(mContext, "123")).isNull();
+ }
+
+ @Test
+ public void getInputDevice_isInputDevice_returnsInputDevice() {
+ assertThat(getInputDevice(mContext, TEST_ADDRESS)).isEqualTo(mInputDevice);
+ }
+
+ @Test
+ public void isDeviceStylus_noDevices_false() {
+ assertThat(isDeviceStylus(null, null)).isFalse();
+ }
+
+ @Test
+ public void isDeviceStylus_nonStylusInputDevice_false() {
+ InputDevice inputDevice = new InputDevice.Builder()
+ .setSources(InputDevice.SOURCE_DPAD)
+ .build();
+
+ assertThat(isDeviceStylus(inputDevice, null)).isFalse();
+ }
+
+ @Test
+ public void isDeviceStylus_stylusInputDevice_true() {
+ InputDevice inputDevice = new InputDevice.Builder()
+ .setSources(InputDevice.SOURCE_STYLUS)
+ .build();
+
+ assertThat(isDeviceStylus(inputDevice, null)).isTrue();
+ }
+
+ @Test
+ public void isDeviceStylus_nonStylusBluetoothDevice_false() {
+ when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn(
+ BluetoothDevice.DEVICE_TYPE_WATCH.getBytes());
+
+ assertThat(isDeviceStylus(null, mCachedBluetoothDevice)).isFalse();
+ }
+
+ @Test
+ public void isDeviceStylus_stylusBluetoothDevice_true() {
+ when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn(
+ BluetoothDevice.DEVICE_TYPE_STYLUS.getBytes());
+ when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice);
+
+ assertThat(isDeviceStylus(null, mCachedBluetoothDevice)).isTrue();
+ }
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java
index 69e99c616910..94199df4b9f8 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceManagerTest.java
@@ -662,10 +662,10 @@ public class CachedBluetoothDeviceManagerTest {
@Test
@RequiresFlagsEnabled(
com.android.settingslib.flags.Flags.FLAG_HEARING_DEVICE_SET_CONNECTION_STATUS_REPORT)
- public void onDeviceUnpaired_hearingDevice_callReportConnectionStatus() {
+ public void onDeviceUnpaired_containsHearingAidInfo_callReportConnectionStatus() {
when(mDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
- when(mCachedDevice1.getProfiles()).thenReturn(
- ImmutableList.of(mHapClientProfile, mHearingAidProfile));
+ mCachedDevice1.setHearingAidInfo(
+ new HearingAidInfo.Builder().setHiSyncId(HISYNCID1).build());
mCachedDeviceManager.onDeviceUnpaired(mCachedDevice1);
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index 49cdec11e104..b53cb27dd73b 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -461,9 +461,9 @@ android_library {
resource_dirs: [],
static_libs: [
"//frameworks/libs/systemui:compilelib",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/dagger:api",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/util/settings:api",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail:impl",
+ "com.android.systemui.dagger-api",
+ "com.android.systemui.util.settings-api",
+ "com.android.systemui.retail-impl",
"SystemUI-res",
"WifiTrackerLib",
"WindowManager-Shell",
@@ -751,9 +751,9 @@ android_library {
],
static_libs: [
"//frameworks/libs/systemui:compilelib",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/dagger:api",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/util/settings:api",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail:impl",
+ "com.android.systemui.dagger-api",
+ "com.android.systemui.util.settings-api",
+ "com.android.systemui.retail-impl",
"SystemUI-tests-base",
"androidx.test.uiautomator_uiautomator",
"androidx.core_core-animation-testing",
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig
index eb5b22f6c82c..f2c76ba25079 100644
--- a/packages/SystemUI/aconfig/systemui.aconfig
+++ b/packages/SystemUI/aconfig/systemui.aconfig
@@ -1939,6 +1939,16 @@ flag {
}
flag {
+ name: "notification_appear_nonlinear"
+ namespace: "systemui"
+ description: "Fix linear usage of notification appear"
+ bug: "397658189"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "disable_shade_trackpad_two_finger_swipe"
namespace: "systemui"
description: "Disables expansion of the shade via two finger swipe on a trackpad"
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/FontInterpolator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/FontInterpolator.kt
index f8bcb81dc073..bc75b1dad40c 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/FontInterpolator.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/FontInterpolator.kt
@@ -22,19 +22,8 @@ import android.util.Log
import android.util.LruCache
import android.util.MathUtils
import androidx.annotation.VisibleForTesting
-import java.lang.Float.max
-import java.lang.Float.min
import kotlin.math.roundToInt
-private const val TAG_WGHT = "wght"
-private const val TAG_ITAL = "ital"
-
-private const val FONT_WEIGHT_DEFAULT_VALUE = 400f
-private const val FONT_ITALIC_MAX = 1f
-private const val FONT_ITALIC_MIN = 0f
-private const val FONT_ITALIC_ANIMATION_STEP = 0.1f
-private const val FONT_ITALIC_DEFAULT_VALUE = 0f
-
/** Caches for font interpolation */
interface FontCache {
val animationFrameCount: Int
@@ -91,11 +80,8 @@ class FontCacheImpl(override val animationFrameCount: Int = DEFAULT_FONT_CACHE_M
class FontInterpolator(val fontCache: FontCache = FontCacheImpl()) {
/** Linear interpolate the font variation settings. */
fun lerp(start: Font, end: Font, progress: Float, linearProgress: Float): Font {
- if (progress == 0f) {
- return start
- } else if (progress == 1f) {
- return end
- }
+ if (progress <= 0f) return start
+ if (progress >= 1f) return end
val startAxes = start.axes ?: EMPTY_AXES
val endAxes = end.axes ?: EMPTY_AXES
@@ -110,7 +96,7 @@ class FontInterpolator(val fontCache: FontCache = FontCacheImpl()) {
InterpKey(start, end, (linearProgress * fontCache.animationFrameCount).roundToInt())
fontCache.get(iKey)?.let {
if (DEBUG) {
- Log.d(LOG_TAG, "[$progress] Interp. cache hit for $iKey")
+ Log.d(LOG_TAG, "[$progress, $linearProgress] Interp. cache hit for $iKey")
}
return it
}
@@ -121,37 +107,16 @@ class FontInterpolator(val fontCache: FontCache = FontCacheImpl()) {
// and also pre-fill the missing axes value with default value from 'fvar' table.
val newAxes =
lerp(startAxes, endAxes) { tag, startValue, endValue ->
- when (tag) {
- TAG_WGHT ->
- MathUtils.lerp(
- startValue ?: FONT_WEIGHT_DEFAULT_VALUE,
- endValue ?: FONT_WEIGHT_DEFAULT_VALUE,
- progress,
- )
- TAG_ITAL ->
- adjustItalic(
- MathUtils.lerp(
- startValue ?: FONT_ITALIC_DEFAULT_VALUE,
- endValue ?: FONT_ITALIC_DEFAULT_VALUE,
- progress,
- )
- )
- else -> {
- require(startValue != null && endValue != null) {
- "Unable to interpolate due to unknown default axes value : $tag"
- }
- MathUtils.lerp(startValue, endValue, progress)
- }
- }
+ MathUtils.lerp(startValue, endValue, progress)
}
// Check if we already make font for this axes. This is typically happens if the animation
- // happens backward.
+ // happens backward and is being linearly interpolated.
val vKey = VarFontKey(start, newAxes)
fontCache.get(vKey)?.let {
fontCache.put(iKey, it)
if (DEBUG) {
- Log.d(LOG_TAG, "[$progress] Axis cache hit for $vKey")
+ Log.d(LOG_TAG, "[$progress, $linearProgress] Axis cache hit for $vKey")
}
return it
}
@@ -164,14 +129,14 @@ class FontInterpolator(val fontCache: FontCache = FontCacheImpl()) {
fontCache.put(vKey, newFont)
// Cache misses are likely to create memory leaks, so this is logged at error level.
- Log.e(LOG_TAG, "[$progress] Cache MISS for $iKey / $vKey")
+ Log.e(LOG_TAG, "[$progress, $linearProgress] Cache MISS for $iKey / $vKey")
return newFont
}
private fun lerp(
start: Array<FontVariationAxis>,
end: Array<FontVariationAxis>,
- filter: (tag: String, left: Float?, right: Float?) -> Float,
+ filter: (tag: String, left: Float, right: Float) -> Float,
): List<FontVariationAxis> {
// Safe to modify result of Font#getAxes since it returns cloned object.
start.sortBy { axis -> axis.tag }
@@ -191,39 +156,37 @@ class FontInterpolator(val fontCache: FontCache = FontCacheImpl()) {
else -> tagA.compareTo(tagB)
}
- val axis =
+ val tag =
+ when {
+ comp == 0 -> tagA!!
+ comp < 0 -> tagA!!
+ else -> tagB!!
+ }
+
+ val axisDefinition = GSFAxes.getAxis(tag)
+ require(comp == 0 || axisDefinition != null) {
+ "Unable to interpolate due to unknown default axes value: $tag"
+ }
+
+ val axisValue =
when {
- comp == 0 -> {
- val v = filter(tagA!!, start[i++].styleValue, end[j++].styleValue)
- FontVariationAxis(tagA, v)
- }
- comp < 0 -> {
- val v = filter(tagA!!, start[i++].styleValue, null)
- FontVariationAxis(tagA, v)
- }
- else -> { // comp > 0
- val v = filter(tagB!!, null, end[j++].styleValue)
- FontVariationAxis(tagB, v)
- }
+ comp == 0 -> filter(tag, start[i++].styleValue, end[j++].styleValue)
+ comp < 0 -> filter(tag, start[i++].styleValue, axisDefinition!!.defaultValue)
+ else -> filter(tag, axisDefinition!!.defaultValue, end[j++].styleValue)
}
- result.add(axis)
+ // Round axis value to valid intermediate steps. This improves the cache hit rate.
+ val step = axisDefinition?.animationStep ?: DEFAULT_ANIMATION_STEP
+ result.add(FontVariationAxis(tag, (axisValue / step).roundToInt() * step))
}
return result
}
- // For the performance reasons, we animate italic with FONT_ITALIC_ANIMATION_STEP. This helps
- // Cache hit ratio in the Skia glyph cache.
- private fun adjustItalic(value: Float) =
- coerceInWithStep(value, FONT_ITALIC_MIN, FONT_ITALIC_MAX, FONT_ITALIC_ANIMATION_STEP)
-
- private fun coerceInWithStep(v: Float, min: Float, max: Float, step: Float) =
- (v.coerceIn(min, max) / step).toInt() * step
-
companion object {
private const val LOG_TAG = "FontInterpolator"
private val DEBUG = Log.isLoggable(LOG_TAG, Log.DEBUG)
private val EMPTY_AXES = arrayOf<FontVariationAxis>()
+ private const val DEFAULT_ANIMATION_STEP = 1f
// Returns true if given two font instance can be interpolated.
fun canInterpolate(start: Font, end: Font) =
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/FontVariationUtils.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/FontVariationUtils.kt
index 9545bda80b2d..9a746870c6ff 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/FontVariationUtils.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/FontVariationUtils.kt
@@ -1,12 +1,20 @@
-package com.android.systemui.animation
+/*
+ * 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.
+ */
-object GSFAxes {
- const val WEIGHT = "wght"
- const val WIDTH = "wdth"
- const val SLANT = "slnt"
- const val ROUND = "ROND"
- const val OPTICAL_SIZE = "opsz"
-}
+package com.android.systemui.animation
class FontVariationUtils {
private var mWeight = -1
@@ -46,20 +54,20 @@ class FontVariationUtils {
}
var resultString = ""
if (mWeight >= 0) {
- resultString += "'${GSFAxes.WEIGHT}' $mWeight"
+ resultString += "'${GSFAxes.WEIGHT.tag}' $mWeight"
}
if (mWidth >= 0) {
resultString +=
- (if (resultString.isBlank()) "" else ", ") + "'${GSFAxes.WIDTH}' $mWidth"
+ (if (resultString.isBlank()) "" else ", ") + "'${GSFAxes.WIDTH.tag}' $mWidth"
}
if (mOpticalSize >= 0) {
resultString +=
(if (resultString.isBlank()) "" else ", ") +
- "'${GSFAxes.OPTICAL_SIZE}' $mOpticalSize"
+ "'${GSFAxes.OPTICAL_SIZE.tag}' $mOpticalSize"
}
if (mRoundness >= 0) {
resultString +=
- (if (resultString.isBlank()) "" else ", ") + "'${GSFAxes.ROUND}' $mRoundness"
+ (if (resultString.isBlank()) "" else ", ") + "'${GSFAxes.ROUND.tag}' $mRoundness"
}
return if (isUpdated) resultString else ""
}
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/GSFAxes.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/GSFAxes.kt
new file mode 100644
index 000000000000..f4e03613169a
--- /dev/null
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/GSFAxes.kt
@@ -0,0 +1,98 @@
+/*
+ * 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.animation
+
+data class AxisDefinition(
+ val tag: String,
+ val minValue: Float,
+ val defaultValue: Float,
+ val maxValue: Float,
+ val animationStep: Float,
+)
+
+object GSFAxes {
+ val WEIGHT =
+ AxisDefinition(
+ tag = "wght",
+ minValue = 1f,
+ defaultValue = 400f,
+ maxValue = 1000f,
+ animationStep = 10f,
+ )
+
+ val WIDTH =
+ AxisDefinition(
+ tag = "wdth",
+ minValue = 25f,
+ defaultValue = 100f,
+ maxValue = 151f,
+ animationStep = 1f,
+ )
+
+ val SLANT =
+ AxisDefinition(
+ tag = "slnt",
+ minValue = 0f,
+ defaultValue = 0f,
+ maxValue = -10f,
+ animationStep = 0.1f,
+ )
+
+ val ROUND =
+ AxisDefinition(
+ tag = "ROND",
+ minValue = 0f,
+ defaultValue = 0f,
+ maxValue = 100f,
+ animationStep = 1f,
+ )
+
+ val GRADE =
+ AxisDefinition(
+ tag = "GRAD",
+ minValue = 0f,
+ defaultValue = 0f,
+ maxValue = 100f,
+ animationStep = 1f,
+ )
+
+ val OPTICAL_SIZE =
+ AxisDefinition(
+ tag = "opsz",
+ minValue = 6f,
+ defaultValue = 18f,
+ maxValue = 144f,
+ animationStep = 1f,
+ )
+
+ // Not a GSF Axis, but present for FontInterpolator compatibility
+ val ITALIC =
+ AxisDefinition(
+ tag = "ITAL",
+ minValue = 0f,
+ defaultValue = 0f,
+ maxValue = 1f,
+ animationStep = 0.1f,
+ )
+
+ private val AXIS_MAP =
+ listOf(WEIGHT, WIDTH, SLANT, ROUND, GRADE, OPTICAL_SIZE, ITALIC)
+ .map { def -> def.tag.toLowerCase() to def }
+ .toMap()
+
+ fun getAxis(axis: String): AxisDefinition? = AXIS_MAP[axis.toLowerCase()]
+}
diff --git a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/BouncerSceneModule.kt b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/BouncerOverlayModule.kt
index 5b368df9d0ef..426942439391 100644
--- a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/BouncerSceneModule.kt
+++ b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/scene/BouncerOverlayModule.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2023 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.
@@ -16,14 +16,13 @@
package com.android.systemui.scene
-import com.android.systemui.bouncer.ui.composable.BouncerScene
-import com.android.systemui.scene.ui.composable.Scene
+import com.android.systemui.bouncer.ui.composable.BouncerOverlay
+import com.android.systemui.scene.ui.composable.Overlay
import dagger.Binds
import dagger.Module
import dagger.multibindings.IntoSet
@Module
-interface BouncerSceneModule {
-
- @Binds @IntoSet fun bouncerScene(scene: BouncerScene): Scene
+interface BouncerOverlayModule {
+ @Binds @IntoSet fun bouncer(overlay: BouncerOverlay): Overlay
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerContent.kt b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerContent.kt
index 456edaf1012e..48e52d6c5fb2 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerContent.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerContent.kt
@@ -98,7 +98,7 @@ import com.android.systemui.bouncer.shared.model.BouncerActionButtonModel
import com.android.systemui.bouncer.ui.BouncerDialogFactory
import com.android.systemui.bouncer.ui.viewmodel.AuthMethodBouncerViewModel
import com.android.systemui.bouncer.ui.viewmodel.BouncerMessageViewModel
-import com.android.systemui.bouncer.ui.viewmodel.BouncerSceneContentViewModel
+import com.android.systemui.bouncer.ui.viewmodel.BouncerOverlayContentViewModel
import com.android.systemui.bouncer.ui.viewmodel.MessageViewModel
import com.android.systemui.bouncer.ui.viewmodel.PasswordBouncerViewModel
import com.android.systemui.bouncer.ui.viewmodel.PatternBouncerViewModel
@@ -118,7 +118,7 @@ import platform.test.motion.compose.values.motionTestValues
@Composable
fun BouncerContent(
- viewModel: BouncerSceneContentViewModel,
+ viewModel: BouncerOverlayContentViewModel,
dialogFactory: BouncerDialogFactory,
modifier: Modifier = Modifier,
) {
@@ -131,8 +131,8 @@ fun BouncerContent(
@Composable
@VisibleForTesting
fun BouncerContent(
- layout: BouncerSceneLayout,
- viewModel: BouncerSceneContentViewModel,
+ layout: BouncerOverlayLayout,
+ viewModel: BouncerOverlayContentViewModel,
dialogFactory: BouncerDialogFactory,
modifier: Modifier,
) {
@@ -147,11 +147,12 @@ fun BouncerContent(
modifier = modifier.imePadding().onKeyEvent(viewModel::onKeyEvent).scale(scale)
) {
when (layout) {
- BouncerSceneLayout.STANDARD_BOUNCER -> StandardLayout(viewModel = viewModel)
- BouncerSceneLayout.BESIDE_USER_SWITCHER ->
+ BouncerOverlayLayout.STANDARD_BOUNCER -> StandardLayout(viewModel = viewModel)
+ BouncerOverlayLayout.BESIDE_USER_SWITCHER ->
BesideUserSwitcherLayout(viewModel = viewModel)
- BouncerSceneLayout.BELOW_USER_SWITCHER -> BelowUserSwitcherLayout(viewModel = viewModel)
- BouncerSceneLayout.SPLIT_BOUNCER -> SplitLayout(viewModel = viewModel)
+ BouncerOverlayLayout.BELOW_USER_SWITCHER ->
+ BelowUserSwitcherLayout(viewModel = viewModel)
+ BouncerOverlayLayout.SPLIT_BOUNCER -> SplitLayout(viewModel = viewModel)
}
Dialog(bouncerViewModel = viewModel, dialogFactory = dialogFactory)
@@ -163,7 +164,10 @@ fun BouncerContent(
* authentication attempt, including all messaging UI (directives, reasoning, errors, etc.).
*/
@Composable
-private fun StandardLayout(viewModel: BouncerSceneContentViewModel, modifier: Modifier = Modifier) {
+private fun StandardLayout(
+ viewModel: BouncerOverlayContentViewModel,
+ modifier: Modifier = Modifier,
+) {
val isHeightExpanded =
LocalWindowSizeClass.current.heightSizeClass == WindowHeightSizeClass.Expanded
@@ -208,7 +212,7 @@ private fun StandardLayout(viewModel: BouncerSceneContentViewModel, modifier: Mo
* by double-tapping on the side.
*/
@Composable
-private fun SplitLayout(viewModel: BouncerSceneContentViewModel, modifier: Modifier = Modifier) {
+private fun SplitLayout(viewModel: BouncerOverlayContentViewModel, modifier: Modifier = Modifier) {
val authMethod by viewModel.authMethodViewModel.collectAsStateWithLifecycle()
Row(
@@ -297,7 +301,7 @@ private fun SplitLayout(viewModel: BouncerSceneContentViewModel, modifier: Modif
*/
@Composable
private fun BesideUserSwitcherLayout(
- viewModel: BouncerSceneContentViewModel,
+ viewModel: BouncerOverlayContentViewModel,
modifier: Modifier = Modifier,
) {
val isLeftToRight = LocalLayoutDirection.current == LayoutDirection.Ltr
@@ -452,7 +456,7 @@ private fun BesideUserSwitcherLayout(
/** Arranges the bouncer contents and user switcher contents one on top of the other, vertically. */
@Composable
private fun BelowUserSwitcherLayout(
- viewModel: BouncerSceneContentViewModel,
+ viewModel: BouncerOverlayContentViewModel,
modifier: Modifier = Modifier,
) {
Column(modifier = modifier.padding(vertical = 128.dp)) {
@@ -483,7 +487,7 @@ private fun BelowUserSwitcherLayout(
@Composable
private fun FoldAware(
- viewModel: BouncerSceneContentViewModel,
+ viewModel: BouncerOverlayContentViewModel,
aboveFold: @Composable BoxScope.() -> Unit,
belowFold: @Composable BoxScope.() -> Unit,
modifier: Modifier = Modifier,
@@ -606,7 +610,7 @@ private fun StatusMessage(viewModel: BouncerMessageViewModel, modifier: Modifier
* For example, this can be the PIN shapes or password text field.
*/
@Composable
-private fun OutputArea(viewModel: BouncerSceneContentViewModel, modifier: Modifier = Modifier) {
+private fun OutputArea(viewModel: BouncerOverlayContentViewModel, modifier: Modifier = Modifier) {
val authMethodViewModel: AuthMethodBouncerViewModel? by
viewModel.authMethodViewModel.collectAsStateWithLifecycle()
when (val nonNullViewModel = authMethodViewModel) {
@@ -631,7 +635,7 @@ private fun OutputArea(viewModel: BouncerSceneContentViewModel, modifier: Modifi
*/
@Composable
private fun InputArea(
- viewModel: BouncerSceneContentViewModel,
+ viewModel: BouncerOverlayContentViewModel,
pinButtonRowVerticalSpacing: Dp,
centerPatternDotsVertically: Boolean,
modifier: Modifier = Modifier,
@@ -659,7 +663,7 @@ private fun InputArea(
}
@Composable
-private fun ActionArea(viewModel: BouncerSceneContentViewModel, modifier: Modifier = Modifier) {
+private fun ActionArea(viewModel: BouncerOverlayContentViewModel, modifier: Modifier = Modifier) {
val actionButton: BouncerActionButtonModel? by
viewModel.actionButton.collectAsStateWithLifecycle()
val appearFadeInAnimatable = remember { Animatable(0f) }
@@ -723,7 +727,7 @@ private fun ActionArea(viewModel: BouncerSceneContentViewModel, modifier: Modifi
@Composable
private fun Dialog(
- bouncerViewModel: BouncerSceneContentViewModel,
+ bouncerViewModel: BouncerOverlayContentViewModel,
dialogFactory: BouncerDialogFactory,
) {
val dialogViewModel by bouncerViewModel.dialogViewModel.collectAsStateWithLifecycle()
@@ -751,7 +755,7 @@ private fun Dialog(
/** Renders the UI of the user switcher that's displayed on large screens next to the bouncer UI. */
@Composable
-private fun UserSwitcher(viewModel: BouncerSceneContentViewModel, modifier: Modifier = Modifier) {
+private fun UserSwitcher(viewModel: BouncerOverlayContentViewModel, modifier: Modifier = Modifier) {
val isUserSwitcherVisible by viewModel.isUserSwitcherVisible.collectAsStateWithLifecycle()
if (!isUserSwitcherVisible) {
// Take up the same space as the user switcher normally would, but with nothing inside it.
@@ -829,7 +833,7 @@ private fun UserSwitcher(viewModel: BouncerSceneContentViewModel, modifier: Modi
@Composable
private fun UserSwitcherDropdownMenu(
isExpanded: Boolean,
- items: List<BouncerSceneContentViewModel.UserSwitcherDropdownItemViewModel>,
+ items: List<BouncerOverlayContentViewModel.UserSwitcherDropdownItemViewModel>,
onDismissed: () -> Unit,
) {
val context = LocalContext.current
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerOverlay.kt
index fad8ae7e3ba2..48dee240a1df 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerScene.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerOverlay.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2023 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.
@@ -29,19 +29,19 @@ import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.systemui.bouncer.ui.BouncerDialogFactory
-import com.android.systemui.bouncer.ui.viewmodel.BouncerSceneContentViewModel
+import com.android.systemui.bouncer.ui.viewmodel.BouncerOverlayContentViewModel
import com.android.systemui.bouncer.ui.viewmodel.BouncerUserActionsViewModel
import com.android.systemui.compose.modifiers.sysuiResTag
import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.lifecycle.rememberViewModel
-import com.android.systemui.scene.shared.model.Scenes
-import com.android.systemui.scene.ui.composable.Scene
+import com.android.systemui.scene.shared.model.Overlays
+import com.android.systemui.scene.ui.composable.Overlay
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
object Bouncer {
object Elements {
+ val Root = ElementKey("BouncerRoot")
val Background = ElementKey("BouncerBackground")
val Content = ElementKey("BouncerContent")
}
@@ -51,16 +51,16 @@ object Bouncer {
}
}
-/** The bouncer scene displays authentication challenges like PIN, password, or pattern. */
+/** The bouncer overlay displays authentication challenges like PIN, password, or pattern. */
@SysUISingleton
-class BouncerScene
+class BouncerOverlay
@Inject
constructor(
private val actionsViewModelFactory: BouncerUserActionsViewModel.Factory,
- private val contentViewModelFactory: BouncerSceneContentViewModel.Factory,
+ private val contentViewModelFactory: BouncerOverlayContentViewModel.Factory,
private val dialogFactory: BouncerDialogFactory,
-) : ExclusiveActivatable(), Scene {
- override val key = Scenes.Bouncer
+) : Overlay {
+ override val key = Overlays.Bouncer
private val actionsViewModel: BouncerUserActionsViewModel by lazy {
actionsViewModelFactory.create()
@@ -68,22 +68,22 @@ constructor(
override val userActions: Flow<Map<UserAction, UserActionResult>> = actionsViewModel.actions
- override suspend fun onActivated(): Nothing {
+ override suspend fun activate(): Nothing {
actionsViewModel.activate()
}
@Composable
override fun ContentScope.Content(modifier: Modifier) =
- BouncerScene(
- viewModel = rememberViewModel("BouncerScene") { contentViewModelFactory.create() },
+ BouncerOverlay(
+ viewModel = rememberViewModel("BouncerOverlay") { contentViewModelFactory.create() },
dialogFactory = dialogFactory,
- modifier = modifier,
+ modifier = modifier.element(Bouncer.Elements.Root),
)
}
@Composable
-private fun ContentScope.BouncerScene(
- viewModel: BouncerSceneContentViewModel,
+private fun ContentScope.BouncerOverlay(
+ viewModel: BouncerOverlayContentViewModel,
dialogFactory: BouncerDialogFactory,
modifier: Modifier = Modifier,
) {
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerSceneLayout.kt b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerOverlayLayout.kt
index 328fec591b41..8651859dd556 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerSceneLayout.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/bouncer/ui/composable/BouncerOverlayLayout.kt
@@ -23,12 +23,12 @@ import androidx.compose.runtime.Composable
import com.android.compose.windowsizeclass.LocalWindowSizeClass
/**
- * Returns the [BouncerSceneLayout] that should be used by the bouncer scene. If
- * [isOneHandedModeSupported] is `false`, then [BouncerSceneLayout.BESIDE_USER_SWITCHER] is replaced
- * by [BouncerSceneLayout.STANDARD_BOUNCER].
+ * Returns the [BouncerOverlayLayout] that should be used by the bouncer scene. If
+ * [isOneHandedModeSupported] is `false`, then [BouncerOverlayLayout.BESIDE_USER_SWITCHER] is
+ * replaced by [BouncerOverlayLayout.STANDARD_BOUNCER].
*/
@Composable
-fun calculateLayout(isOneHandedModeSupported: Boolean): BouncerSceneLayout {
+fun calculateLayout(isOneHandedModeSupported: Boolean): BouncerOverlayLayout {
val windowSizeClass = LocalWindowSizeClass.current
return calculateLayoutInternal(
@@ -57,7 +57,7 @@ private fun WindowHeightSizeClass.toEnum(): SizeClass {
}
/** Enumerates all known adaptive layout configurations. */
-enum class BouncerSceneLayout {
+enum class BouncerOverlayLayout {
/** The default UI with the bouncer laid out normally. */
STANDARD_BOUNCER,
/** The bouncer is displayed vertically stacked with the user switcher. */
@@ -84,21 +84,21 @@ fun calculateLayoutInternal(
width: SizeClass,
height: SizeClass,
isOneHandedModeSupported: Boolean,
-): BouncerSceneLayout {
+): BouncerOverlayLayout {
return when (height) {
- SizeClass.COMPACT -> BouncerSceneLayout.SPLIT_BOUNCER
+ SizeClass.COMPACT -> BouncerOverlayLayout.SPLIT_BOUNCER
SizeClass.MEDIUM ->
when (width) {
- SizeClass.COMPACT -> BouncerSceneLayout.STANDARD_BOUNCER
- SizeClass.MEDIUM -> BouncerSceneLayout.STANDARD_BOUNCER
- SizeClass.EXPANDED -> BouncerSceneLayout.BESIDE_USER_SWITCHER
+ SizeClass.COMPACT -> BouncerOverlayLayout.STANDARD_BOUNCER
+ SizeClass.MEDIUM -> BouncerOverlayLayout.STANDARD_BOUNCER
+ SizeClass.EXPANDED -> BouncerOverlayLayout.BESIDE_USER_SWITCHER
}
SizeClass.EXPANDED ->
when (width) {
- SizeClass.COMPACT -> BouncerSceneLayout.STANDARD_BOUNCER
- SizeClass.MEDIUM -> BouncerSceneLayout.BELOW_USER_SWITCHER
- SizeClass.EXPANDED -> BouncerSceneLayout.BESIDE_USER_SWITCHER
+ SizeClass.COMPACT -> BouncerOverlayLayout.STANDARD_BOUNCER
+ SizeClass.MEDIUM -> BouncerOverlayLayout.BELOW_USER_SWITCHER
+ SizeClass.EXPANDED -> BouncerOverlayLayout.BESIDE_USER_SWITCHER
}
- }.takeIf { it != BouncerSceneLayout.BESIDE_USER_SWITCHER || isOneHandedModeSupported }
- ?: BouncerSceneLayout.STANDARD_BOUNCER
+ }.takeIf { it != BouncerOverlayLayout.BESIDE_USER_SWITCHER || isOneHandedModeSupported }
+ ?: BouncerOverlayLayout.STANDARD_BOUNCER
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationLockscreenScrim.kt b/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationLockscreenScrim.kt
index ef8911dae566..624c56099e25 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationLockscreenScrim.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationLockscreenScrim.kt
@@ -31,6 +31,7 @@ import androidx.compose.ui.graphics.graphicsLayer
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.android.compose.animation.scene.ContentScope
import com.android.compose.animation.scene.content.state.TransitionState
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.shared.model.ShadeMode
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationLockscreenScrimViewModel
@@ -100,7 +101,7 @@ fun ContentScope.NotificationLockscreenScrim(
val isBouncerToLockscreen =
layoutState.currentTransition?.isTransitioning(
- from = Scenes.Bouncer,
+ from = Overlays.Bouncer,
to = Scenes.Lockscreen,
) ?: false
@@ -120,5 +121,5 @@ private fun shouldShowScrimFadeOut(
return shadeMode != ShadeMode.Dual &&
currentTransition.isInitiatedByUserInput &&
(currentTransition.isTransitioning(from = Scenes.Shade, to = Scenes.Lockscreen) ||
- currentTransition.isTransitioning(from = Scenes.Bouncer, to = Scenes.Lockscreen))
+ currentTransition.isTransitioning(from = Overlays.Bouncer, to = Scenes.Lockscreen))
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettings.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettings.kt
index b826187578e0..fe5c72f930fa 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettings.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettings.kt
@@ -135,7 +135,8 @@ private fun ContentScope.stateForQuickSettingsContent(
}
}
is TransitionState.Transition.OverlayTransition ->
- error("Bad transition for QuickSettings scene: overlays not supported")
+ // Currently, no overlays use this QS impl, so we should make sure it's closed.
+ QSSceneAdapter.State.CLOSED
}
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerInterruptionHandler.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerInterruptionHandler.kt
index 7e99847a7200..4ff7f4815e7c 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerInterruptionHandler.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerInterruptionHandler.kt
@@ -20,9 +20,11 @@ import com.android.compose.animation.scene.InterruptionHandler
import com.android.compose.animation.scene.InterruptionResult
import com.android.compose.animation.scene.SceneKey
import com.android.compose.animation.scene.content.state.TransitionState
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.ui.composable.transitions.TO_BOUNCER_FADE_FRACTION
+// TODO(b/394632609) update this class to handle Bouncer as an Overlay
object SceneContainerInterruptionHandler : InterruptionHandler {
override fun onInterruption(
interrupted: TransitionState.Transition.ChangeScene,
@@ -39,7 +41,7 @@ object SceneContainerInterruptionHandler : InterruptionHandler {
transition: TransitionState.Transition.ChangeScene,
targetScene: SceneKey,
): InterruptionResult? {
- if (targetScene != Scenes.Gone || !transition.isTransitioningFromOrTo(Scenes.Bouncer)) {
+ if (targetScene != Scenes.Gone || !transition.isTransitioningFromOrTo(Overlays.Bouncer)) {
return null
}
@@ -48,7 +50,7 @@ object SceneContainerInterruptionHandler : InterruptionHandler {
// usually the Lockscreen scene).
val otherScene: SceneKey
val animatesFromBouncer =
- if (transition.isTransitioning(to = Scenes.Bouncer)) {
+ if (transition.isTransitioning(to = Overlays.Bouncer)) {
otherScene = transition.fromScene
transition.progress >= TO_BOUNCER_FADE_FRACTION
} else {
@@ -58,7 +60,7 @@ object SceneContainerInterruptionHandler : InterruptionHandler {
return if (animatesFromBouncer) {
InterruptionResult(
- animateFrom = Scenes.Bouncer,
+ animateFrom = Scenes.Lockscreen,
// We don't want the content of the lockscreen to be shown during the Bouncer =>
// Launcher transition. We disable chaining of the transitions so that only the
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerTransitions.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerTransitions.kt
index 2ad9b7a10ad1..7fe19fe70a25 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerTransitions.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainerTransitions.kt
@@ -1,5 +1,6 @@
package com.android.systemui.scene.ui.composable
+import com.android.compose.animation.scene.DefaultInterruptionHandler
import com.android.compose.animation.scene.SceneTransitions
import com.android.compose.animation.scene.TransitionKey
import com.android.compose.animation.scene.reveal.ContainerRevealHaptics
@@ -29,6 +30,7 @@ import com.android.systemui.scene.ui.composable.transitions.lockscreenToQuickSet
import com.android.systemui.scene.ui.composable.transitions.lockscreenToShadeTransition
import com.android.systemui.scene.ui.composable.transitions.lockscreenToSplitShadeTransition
import com.android.systemui.scene.ui.composable.transitions.shadeToQuickSettingsTransition
+import com.android.systemui.scene.ui.composable.transitions.toBouncerTransition
import com.android.systemui.scene.ui.composable.transitions.toNotificationsShadeTransition
import com.android.systemui.scene.ui.composable.transitions.toQuickSettingsShadeTransition
import com.android.systemui.shade.ui.composable.Shade
@@ -48,12 +50,10 @@ import com.android.systemui.shade.ui.composable.Shade
class SceneContainerTransitions : SceneContainerTransitionsBuilder {
override fun build(revealHaptics: ContainerRevealHaptics): SceneTransitions {
return transitions {
- interruptionHandler = SceneContainerInterruptionHandler
+ interruptionHandler = DefaultInterruptionHandler
// Scene transitions
- from(Scenes.Bouncer, to = Scenes.Gone) { bouncerToGoneTransition() }
- from(Scenes.Dream, to = Scenes.Bouncer) { dreamToBouncerTransition() }
from(Scenes.Dream, to = Scenes.Communal) { dreamToCommunalTransition() }
from(Scenes.Dream, to = Scenes.Gone) { dreamToGoneTransition() }
from(
@@ -102,15 +102,6 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
goneToQuickSettingsTransition(durationScale = 0.9)
}
- from(Scenes.Lockscreen, to = Scenes.Bouncer) { lockscreenToBouncerTransition() }
- from(
- Scenes.Lockscreen,
- to = Scenes.Bouncer,
- key = TransitionKey.PredictiveBack,
- reversePreview = { bouncerToLockscreenPreview() },
- ) {
- lockscreenToBouncerTransition()
- }
from(Scenes.Lockscreen, to = Scenes.Communal) { lockscreenToCommunalTransition() }
from(Scenes.Lockscreen, to = Scenes.Dream) { lockscreenToDreamTransition() }
from(
@@ -190,10 +181,22 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
) {
communalToShadeTransition()
}
- from(Scenes.Communal, to = Scenes.Bouncer) { communalToBouncerTransition() }
// Overlay transitions
+ to(Overlays.Bouncer) { toBouncerTransition() }
+ from(Overlays.Bouncer, to = Scenes.Gone) { bouncerToGoneTransition() }
+ from(Scenes.Dream, to = Overlays.Bouncer) { dreamToBouncerTransition() }
+ from(Scenes.Lockscreen, to = Overlays.Bouncer) { lockscreenToBouncerTransition() }
+ from(
+ Scenes.Lockscreen,
+ to = Overlays.Bouncer,
+ key = TransitionKey.PredictiveBack,
+ reversePreview = { bouncerToLockscreenPreview() },
+ ) {
+ lockscreenToBouncerTransition()
+ }
+ from(Scenes.Communal, to = Overlays.Bouncer) { communalToBouncerTransition() }
to(
Overlays.NotificationsShade,
cuj = Cuj.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, // NOTYPO
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromBouncerToGoneTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromBouncerToGoneTransition.kt
index 5eefe490ab5b..27cdf21f0697 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromBouncerToGoneTransition.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromBouncerToGoneTransition.kt
@@ -2,10 +2,10 @@ package com.android.systemui.scene.ui.composable.transitions
import androidx.compose.animation.core.tween
import com.android.compose.animation.scene.TransitionBuilder
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.bouncer.ui.composable.Bouncer
fun TransitionBuilder.bouncerToGoneTransition() {
spec = tween(durationMillis = 500)
- fade(Scenes.Bouncer.rootElementKey)
+ fade(Bouncer.Elements.Root)
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/OverlayShade.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/OverlayShade.kt
index cdb1e2e53b09..7e7b6297406e 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/OverlayShade.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/OverlayShade.kt
@@ -54,6 +54,7 @@ import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.LowestZIndexContentPicker
import com.android.compose.windowsizeclass.LocalWindowSizeClass
import com.android.systemui.res.R
+import androidx.compose.ui.unit.Dp
/** Renders a lightweight shade UI container, as an overlay. */
@Composable
@@ -202,10 +203,15 @@ object OverlayShade {
}
object Dimensions {
- val PanelCornerRadius = 46.dp
+ val PanelCornerRadius: Dp
+ @Composable
+ @ReadOnlyComposable get() =
+ dimensionResource(R.dimen.overlay_shade_panel_shape_radius)
}
object Shapes {
- val RoundedCornerPanel = RoundedCornerShape(Dimensions.PanelCornerRadius)
+ val RoundedCornerPanel: RoundedCornerShape
+ @Composable
+ @ReadOnlyComposable get() = RoundedCornerShape(Dimensions.PanelCornerRadius)
}
}
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/ObservableTransitionState.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/ObservableTransitionState.kt
index 5bf77ae9b23c..f7f0bf19dda6 100644
--- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/ObservableTransitionState.kt
+++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/ObservableTransitionState.kt
@@ -220,13 +220,70 @@ sealed interface ObservableTransitionState {
isInPreviewStage,
)
}
+
+ fun showOverlay(
+ overlay: OverlayKey,
+ fromScene: SceneKey,
+ currentOverlays: Flow<Set<OverlayKey>>,
+ progress: Flow<Float>,
+ isInitiatedByUserInput: Boolean,
+ isUserInputOngoing: Flow<Boolean>,
+ previewProgress: Flow<Float> = flowOf(0f),
+ isInPreviewStage: Flow<Boolean> = flowOf(false),
+ ): ShowOrHideOverlay {
+ return ShowOrHideOverlay(
+ overlay = overlay,
+ fromContent = fromScene,
+ toContent = overlay,
+ currentScene = fromScene,
+ currentOverlays = currentOverlays,
+ progress = progress,
+ isInitiatedByUserInput = isInitiatedByUserInput,
+ isUserInputOngoing = isUserInputOngoing,
+ previewProgress = previewProgress,
+ isInPreviewStage = isInPreviewStage,
+ )
+ }
+
+ fun hideOverlay(
+ overlay: OverlayKey,
+ toScene: SceneKey,
+ currentOverlays: Flow<Set<OverlayKey>>,
+ progress: Flow<Float>,
+ isInitiatedByUserInput: Boolean,
+ isUserInputOngoing: Flow<Boolean>,
+ previewProgress: Flow<Float> = flowOf(0f),
+ isInPreviewStage: Flow<Boolean> = flowOf(false),
+ ): ShowOrHideOverlay {
+ return ShowOrHideOverlay(
+ overlay = overlay,
+ fromContent = overlay,
+ toContent = toScene,
+ currentScene = toScene,
+ currentOverlays = currentOverlays,
+ progress = progress,
+ isInitiatedByUserInput = isInitiatedByUserInput,
+ isUserInputOngoing = isUserInputOngoing,
+ previewProgress = previewProgress,
+ isInPreviewStage = isInPreviewStage,
+ )
+ }
}
}
- fun isIdle(scene: SceneKey? = null): Boolean {
- return this is Idle && (scene == null || this.currentScene == scene)
+ fun isIdle(scene: SceneKey? = null, overlay: OverlayKey? = null): Boolean {
+ return this is Idle &&
+ (scene == null || this.currentScene == scene) &&
+ (overlay == null || overlay in this.currentOverlays)
}
+ fun isIdle(content: ContentKey?): Boolean =
+ when (content) {
+ is SceneKey -> isIdle(scene = content)
+ is OverlayKey -> isIdle(overlay = content)
+ null -> this is Idle
+ }
+
fun isTransitioning(from: ContentKey? = null, to: ContentKey? = null): Boolean {
return this is Transition &&
(from == null || this.fromContent == from) &&
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayout.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayout.kt
index 72bb82bd41bb..f423bab5381f 100644
--- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayout.kt
+++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayout.kt
@@ -447,7 +447,7 @@ sealed class UserAction {
}
infix fun to(overlay: OverlayKey): Pair<UserAction, UserActionResult> {
- return this to UserActionResult(toOverlay = overlay)
+ return this to UserActionResult.ShowOverlay(overlay)
}
/** Resolve this into a [Resolved] user action given [layoutDirection]. */
@@ -677,22 +677,6 @@ sealed class UserActionResult(
*/
requiresFullDistanceSwipe: Boolean = false,
): UserActionResult = ChangeScene(toScene, transitionKey, requiresFullDistanceSwipe)
-
- /** A [UserActionResult] that shows [toOverlay]. */
- operator fun invoke(
- /** The overlay we should be transitioning to during the [UserAction]. */
- toOverlay: OverlayKey,
-
- /** The key of the transition that should be used. */
- transitionKey: TransitionKey? = null,
-
- /**
- * If `true`, the swipe will be committed if only if the user swiped at least the swipe
- * distance, i.e. the transition progress was already equal to or bigger than 100% when
- * the user released their finger.
- */
- requiresFullDistanceSwipe: Boolean = false,
- ): UserActionResult = ShowOverlay(toOverlay, transitionKey, requiresFullDistanceSwipe)
}
}
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockController.kt
index 004d1aa1fe93..ac1c5a8dfaf3 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockController.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockController.kt
@@ -130,39 +130,25 @@ class FlexClockController(private val clockCtx: ClockContext) : ClockController
private val FONT_AXES =
listOf(
- ClockFontAxis(
- key = GSFAxes.WEIGHT,
+ GSFAxes.WEIGHT.toClockAxis(
type = AxisType.Float,
- minValue = 25f,
currentValue = 400f,
- maxValue = 1000f,
name = "Weight",
description = "Glyph Weight",
),
- ClockFontAxis(
- key = GSFAxes.WIDTH,
+ GSFAxes.WIDTH.toClockAxis(
type = AxisType.Float,
- minValue = 25f,
currentValue = 85f,
- maxValue = 151f,
name = "Width",
description = "Glyph Width",
),
- ClockFontAxis(
- key = GSFAxes.ROUND,
+ GSFAxes.ROUND.toClockAxis(
type = AxisType.Boolean,
- minValue = 0f,
- currentValue = 0f,
- maxValue = 100f,
name = "Round",
description = "Glyph Roundness",
),
- ClockFontAxis(
- key = GSFAxes.SLANT,
+ GSFAxes.SLANT.toClockAxis(
type = AxisType.Boolean,
- minValue = 0f,
- currentValue = 0f,
- maxValue = -10f,
name = "Slant",
description = "Glyph Slant",
),
@@ -170,10 +156,10 @@ class FlexClockController(private val clockCtx: ClockContext) : ClockController
private val LEGACY_FLEX_SETTINGS =
listOf(
- ClockFontAxisSetting(GSFAxes.WEIGHT, 600f),
- ClockFontAxisSetting(GSFAxes.WIDTH, 100f),
- ClockFontAxisSetting(GSFAxes.ROUND, 100f),
- ClockFontAxisSetting(GSFAxes.SLANT, 0f),
+ GSFAxes.WEIGHT.toClockAxisSetting(600f),
+ GSFAxes.WIDTH.toClockAxisSetting(100f),
+ GSFAxes.ROUND.toClockAxisSetting(100f),
+ GSFAxes.SLANT.toClockAxisSetting(0f),
)
}
}
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockFaceController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockFaceController.kt
index b2dbd6552955..b4c2f5de290f 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockFaceController.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FlexClockFaceController.kt
@@ -132,7 +132,7 @@ class FlexClockFaceController(clockCtx: ClockContext, private val isLargeClock:
if (!isLargeClock) {
axes =
axes.map { axis ->
- if (axis.key == GSFAxes.WIDTH && axis.value > SMALL_CLOCK_MAX_WDTH) {
+ if (axis.key == GSFAxes.WIDTH.tag && axis.value > SMALL_CLOCK_MAX_WDTH) {
axis.copy(value = SMALL_CLOCK_MAX_WDTH)
} else {
axis
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FontUtils.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FontUtils.kt
new file mode 100644
index 000000000000..212b1e29d1b8
--- /dev/null
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/FontUtils.kt
@@ -0,0 +1,43 @@
+/*
+ * 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.shared.clocks
+
+import com.android.systemui.animation.AxisDefinition
+import com.android.systemui.plugins.clocks.AxisType
+import com.android.systemui.plugins.clocks.ClockFontAxis
+import com.android.systemui.plugins.clocks.ClockFontAxisSetting
+
+fun AxisDefinition.toClockAxis(
+ type: AxisType,
+ currentValue: Float? = null,
+ name: String,
+ description: String,
+): ClockFontAxis {
+ return ClockFontAxis(
+ key = this.tag,
+ type = type,
+ maxValue = this.maxValue,
+ minValue = this.minValue,
+ currentValue = currentValue ?: this.defaultValue,
+ name = name,
+ description = description,
+ )
+}
+
+fun AxisDefinition.toClockAxisSetting(value: Float? = null): ClockFontAxisSetting {
+ return ClockFontAxisSetting(this.tag, value ?: this.defaultValue)
+}
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 54be4d81ea06..b7ce20ec32d1 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
@@ -49,6 +49,7 @@ import com.android.systemui.shared.clocks.DigitTranslateAnimator
import com.android.systemui.shared.clocks.DimensionParser
import com.android.systemui.shared.clocks.FLEX_CLOCK_ID
import com.android.systemui.shared.clocks.FontTextStyle
+import com.android.systemui.shared.clocks.toClockAxisSetting
import java.lang.Thread
import kotlin.math.max
import kotlin.math.min
@@ -585,25 +586,25 @@ open class SimpleDigitalClockTextView(
val FIDGET_INTERPOLATOR = PathInterpolator(0.26873f, 0f, 0.45042f, 1f)
val FIDGET_DISTS =
mapOf(
- GSFAxes.WEIGHT to Pair(200f, 500f),
- GSFAxes.WIDTH to Pair(30f, 75f),
- GSFAxes.ROUND to Pair(0f, 50f),
- GSFAxes.SLANT to Pair(0f, -5f),
+ GSFAxes.WEIGHT.tag to Pair(200f, 500f),
+ GSFAxes.WIDTH.tag to Pair(30f, 75f),
+ GSFAxes.ROUND.tag to Pair(0f, 50f),
+ GSFAxes.SLANT.tag to Pair(0f, -5f),
)
val AOD_COLOR = Color.WHITE
- val LS_WEIGHT_AXIS = ClockFontAxisSetting(GSFAxes.WEIGHT, 400f)
- val AOD_WEIGHT_AXIS = ClockFontAxisSetting(GSFAxes.WEIGHT, 200f)
- val WIDTH_AXIS = ClockFontAxisSetting(GSFAxes.WIDTH, 85f)
- val ROUND_AXIS = ClockFontAxisSetting(GSFAxes.ROUND, 0f)
- val SLANT_AXIS = ClockFontAxisSetting(GSFAxes.SLANT, 0f)
+ val LS_WEIGHT_AXIS = GSFAxes.WEIGHT.toClockAxisSetting(400f)
+ val AOD_WEIGHT_AXIS = GSFAxes.WEIGHT.toClockAxisSetting(200f)
+ val WIDTH_AXIS = GSFAxes.WIDTH.toClockAxisSetting(85f)
+ val ROUND_AXIS = GSFAxes.ROUND.toClockAxisSetting(0f)
+ val SLANT_AXIS = GSFAxes.SLANT.toClockAxisSetting(0f)
// Axes for Legacy version of the Flex Clock
- val FLEX_LS_WEIGHT_AXIS = ClockFontAxisSetting(GSFAxes.WEIGHT, 600f)
- val FLEX_AOD_LARGE_WEIGHT_AXIS = ClockFontAxisSetting(GSFAxes.WEIGHT, 74f)
- val FLEX_AOD_SMALL_WEIGHT_AXIS = ClockFontAxisSetting(GSFAxes.WEIGHT, 133f)
- val FLEX_LS_WIDTH_AXIS = ClockFontAxisSetting(GSFAxes.WIDTH, 100f)
- val FLEX_AOD_WIDTH_AXIS = ClockFontAxisSetting(GSFAxes.WIDTH, 43f)
- val FLEX_ROUND_AXIS = ClockFontAxisSetting(GSFAxes.ROUND, 100f)
+ val FLEX_LS_WEIGHT_AXIS = GSFAxes.WEIGHT.toClockAxisSetting(600f)
+ val FLEX_AOD_LARGE_WEIGHT_AXIS = GSFAxes.WEIGHT.toClockAxisSetting(74f)
+ val FLEX_AOD_SMALL_WEIGHT_AXIS = GSFAxes.WEIGHT.toClockAxisSetting(133f)
+ val FLEX_LS_WIDTH_AXIS = GSFAxes.WIDTH.toClockAxisSetting(100f)
+ val FLEX_AOD_WIDTH_AXIS = GSFAxes.WIDTH.toClockAxisSetting(43f)
+ val FLEX_ROUND_AXIS = GSFAxes.ROUND.toClockAxisSetting(100f)
}
}
diff --git a/packages/SystemUI/lint.xml b/packages/SystemUI/lint.xml
index 59a71099bb3f..bef2edd436e2 100644
--- a/packages/SystemUI/lint.xml
+++ b/packages/SystemUI/lint.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<lint>
+<!-- TODO(397519800): Remove hard coded once ASfP is capable of configuring this automatically -->
+<lint lintJars="../../../../out/soong/.intermediates/frameworks/base/packages/SystemUI/checks/SystemUILintChecker/linux_glibc_common/combined/SystemUILintChecker.jar">
<issue id="PrivateResource" severity="ignore" />
-</lint> \ No newline at end of file
+</lint>
diff --git a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt
index 24b9e847d621..189d554415d0 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.kt
@@ -43,6 +43,7 @@ import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants
import com.android.systemui.classifier.FalsingA11yDelegate
import com.android.systemui.classifier.FalsingCollector
+import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryFaceAuthInteractor
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
@@ -65,6 +66,7 @@ import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.FakeSceneDataSource
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.fakeSceneDataSource
import com.android.systemui.statusbar.policy.ConfigurationController
@@ -797,6 +799,9 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() {
@EnableSceneContainer
fun dismissesKeyguard_whenSceneChangesToGone() =
kosmos.testScope.runTest {
+ // Collect sceneInteractor.currentOverlays so that show/hideOverlay receive updated
+ // overlay state during validation
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
// Upon init, we have never dismisses the keyguard.
underTest.onInit()
runCurrent()
@@ -807,19 +812,24 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() {
// is not enough to trigger a dismissal of the keyguard.
underTest.onViewAttached()
fakeSceneDataSource.pause()
- sceneInteractor.changeScene(Scenes.Bouncer, "reason")
+ sceneInteractor.changeScene(Scenes.Lockscreen, "reason")
+ sceneInteractor.showOverlay(Overlays.Bouncer, "reason")
sceneTransitionStateFlow.value =
- ObservableTransitionState.Transition(
- Scenes.Lockscreen,
- Scenes.Bouncer,
- flowOf(Scenes.Bouncer),
- flowOf(.5f),
- false,
+ ObservableTransitionState.Transition.showOverlay(
+ overlay = Overlays.Bouncer,
+ fromScene = Scenes.Lockscreen,
+ currentOverlays = flowOf(setOf(Overlays.Bouncer)),
+ progress = flowOf(.5f),
+ isInitiatedByUserInput = false,
isUserInputOngoing = flowOf(false),
)
runCurrent()
- fakeSceneDataSource.unpause(expectedScene = Scenes.Bouncer)
- sceneTransitionStateFlow.value = ObservableTransitionState.Idle(Scenes.Bouncer)
+ fakeSceneDataSource.unpause(expectedOverlays = setOf(Overlays.Bouncer))
+ sceneTransitionStateFlow.value =
+ ObservableTransitionState.Idle(
+ currentScene = Scenes.Lockscreen,
+ currentOverlays = setOf(Overlays.Bouncer),
+ )
runCurrent()
verify(primaryBouncerInteractor, never())
.notifyKeyguardAuthenticatedPrimaryAuth(anyInt())
@@ -832,17 +842,18 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() {
runCurrent()
fakeSceneDataSource.pause()
sceneInteractor.changeScene(Scenes.Gone, "reason")
+ sceneInteractor.hideOverlay(Overlays.Bouncer, "reason")
sceneTransitionStateFlow.value =
- ObservableTransitionState.Transition(
- Scenes.Bouncer,
- Scenes.Gone,
- flowOf(Scenes.Gone),
- flowOf(.5f),
- false,
+ ObservableTransitionState.Transition.hideOverlay(
+ overlay = Overlays.Bouncer,
+ toScene = Scenes.Gone,
+ currentOverlays = flowOf(emptySet()),
+ progress = flowOf(.5f),
+ isInitiatedByUserInput = false,
isUserInputOngoing = flowOf(false),
)
runCurrent()
- fakeSceneDataSource.unpause(expectedScene = Scenes.Gone)
+ fakeSceneDataSource.unpause(expectedScene = Scenes.Gone, expectedOverlays = emptySet())
sceneTransitionStateFlow.value = ObservableTransitionState.Idle(Scenes.Gone)
runCurrent()
verify(primaryBouncerInteractor).notifyKeyguardAuthenticatedPrimaryAuth(anyInt())
@@ -850,20 +861,30 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() {
// While listening, moving back to the bouncer scene does not dismiss the keyguard
// again.
clearInvocations(primaryBouncerInteractor)
+
+ // switch to a different non-keyguard scene since showing overlay over Gone is
+ // prohibited
+ sceneInteractor.snapToScene(Scenes.Shade, "reason")
+ runCurrent()
+
fakeSceneDataSource.pause()
- sceneInteractor.changeScene(Scenes.Bouncer, "reason")
+ sceneInteractor.showOverlay(Overlays.Bouncer, "reason")
sceneTransitionStateFlow.value =
- ObservableTransitionState.Transition(
- Scenes.Gone,
- Scenes.Bouncer,
- flowOf(Scenes.Bouncer),
- flowOf(.5f),
- false,
+ ObservableTransitionState.Transition.showOverlay(
+ overlay = Overlays.Bouncer,
+ fromScene = Scenes.Shade,
+ currentOverlays = flowOf(setOf(Overlays.Bouncer)),
+ progress = flowOf(.5f),
+ isInitiatedByUserInput = false,
isUserInputOngoing = flowOf(false),
)
runCurrent()
- fakeSceneDataSource.unpause(expectedScene = Scenes.Bouncer)
- sceneTransitionStateFlow.value = ObservableTransitionState.Idle(Scenes.Bouncer)
+ fakeSceneDataSource.unpause(expectedOverlays = setOf(Overlays.Bouncer))
+ sceneTransitionStateFlow.value =
+ ObservableTransitionState.Idle(
+ currentScene = Scenes.Lockscreen,
+ currentOverlays = setOf(Overlays.Bouncer),
+ )
runCurrent()
verify(primaryBouncerInteractor, never())
.notifyKeyguardAuthenticatedPrimaryAuth(anyInt())
@@ -874,17 +895,18 @@ class KeyguardSecurityContainerControllerTest : SysuiTestCase() {
underTest.onViewDetached()
fakeSceneDataSource.pause()
sceneInteractor.changeScene(Scenes.Gone, "reason")
+ sceneInteractor.hideOverlay(Overlays.Bouncer, "reason")
sceneTransitionStateFlow.value =
- ObservableTransitionState.Transition(
- Scenes.Bouncer,
- Scenes.Gone,
- flowOf(Scenes.Gone),
- flowOf(.5f),
- false,
+ ObservableTransitionState.Transition.hideOverlay(
+ overlay = Overlays.Bouncer,
+ toScene = Scenes.Gone,
+ currentOverlays = flowOf(emptySet()),
+ progress = flowOf(.5f),
+ isInitiatedByUserInput = false,
isUserInputOngoing = flowOf(false),
)
runCurrent()
- fakeSceneDataSource.unpause(expectedScene = Scenes.Gone)
+ fakeSceneDataSource.unpause(expectedScene = Scenes.Gone, expectedOverlays = emptySet())
sceneTransitionStateFlow.value = ObservableTransitionState.Idle(Scenes.Gone)
runCurrent()
verify(primaryBouncerInteractor, never())
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/animation/FontVariationUtilsTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/animation/FontVariationUtilsTest.kt
index f44769d522eb..8d3640d8d809 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/animation/FontVariationUtilsTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/animation/FontVariationUtilsTest.kt
@@ -21,7 +21,7 @@ class FontVariationUtilsTest : SysuiTestCase() {
roundness = 100,
)
Assert.assertEquals(
- "'${GSFAxes.WEIGHT}' 100, '${GSFAxes.WIDTH}' 100, '${GSFAxes.ROUND}' 100",
+ "'${GSFAxes.WEIGHT.tag}' 100, '${GSFAxes.WIDTH.tag}' 100, '${GSFAxes.ROUND.tag}' 100",
initFvar,
)
val updatedFvar =
@@ -32,7 +32,8 @@ class FontVariationUtilsTest : SysuiTestCase() {
roundness = 100,
)
Assert.assertEquals(
- "'${GSFAxes.WEIGHT}' 200, '${GSFAxes.WIDTH}' 100, '${GSFAxes.OPTICAL_SIZE}' 0, '${GSFAxes.ROUND}' 100",
+ "'${GSFAxes.WEIGHT.tag}' 200, '${GSFAxes.WIDTH.tag}' 100," +
+ " '${GSFAxes.OPTICAL_SIZE.tag}' 0, '${GSFAxes.ROUND.tag}' 100",
updatedFvar,
)
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerActionButtonInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerActionButtonInteractorTest.kt
index f376e932e70b..40295a242b2a 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerActionButtonInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/domain/interactor/BouncerActionButtonInteractorTest.kt
@@ -33,6 +33,7 @@ import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionsRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.fake
@@ -94,7 +95,8 @@ class BouncerActionButtonInteractorTest : SysuiTestCase() {
kosmos.telecomManager = telecomManager
- kosmos.sceneInteractor.changeScene(Scenes.Bouncer, "")
+ kosmos.sceneInteractor.changeScene(Scenes.Lockscreen, "")
+ kosmos.sceneInteractor.showOverlay(Overlays.Bouncer, "")
}
@Test
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerSceneLayoutTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerOverlayLayoutTest.kt
index b4b41787d833..2d0dd49242af 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerSceneLayoutTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerOverlayLayoutTest.kt
@@ -18,10 +18,10 @@ package com.android.systemui.bouncer.ui.composable
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
-import com.android.systemui.bouncer.ui.composable.BouncerSceneLayout.BELOW_USER_SWITCHER
-import com.android.systemui.bouncer.ui.composable.BouncerSceneLayout.BESIDE_USER_SWITCHER
-import com.android.systemui.bouncer.ui.composable.BouncerSceneLayout.SPLIT_BOUNCER
-import com.android.systemui.bouncer.ui.composable.BouncerSceneLayout.STANDARD_BOUNCER
+import com.android.systemui.bouncer.ui.composable.BouncerOverlayLayout.BELOW_USER_SWITCHER
+import com.android.systemui.bouncer.ui.composable.BouncerOverlayLayout.BESIDE_USER_SWITCHER
+import com.android.systemui.bouncer.ui.composable.BouncerOverlayLayout.SPLIT_BOUNCER
+import com.android.systemui.bouncer.ui.composable.BouncerOverlayLayout.STANDARD_BOUNCER
import com.google.common.truth.Truth.assertThat
import java.util.Locale
import org.junit.Test
@@ -32,7 +32,7 @@ import platform.test.runner.parameterized.Parameters
@SmallTest
@RunWith(ParameterizedAndroidJunit4::class)
-class BouncerSceneLayoutTest : SysuiTestCase() {
+class BouncerOverlayLayoutTest : SysuiTestCase() {
data object Phone :
Device(
@@ -186,7 +186,7 @@ class BouncerSceneLayoutTest : SysuiTestCase() {
data class TestCase(
val device: Device,
val held: Held,
- val expected: BouncerSceneLayout,
+ val expected: BouncerOverlayLayout,
val isOneHandedModeSupported: Boolean = true,
) {
override fun toString(): String {
@@ -203,10 +203,10 @@ class BouncerSceneLayoutTest : SysuiTestCase() {
}
data class Expected(
- val whenNaturallyHeld: BouncerSceneLayout,
- val whenUnnaturallyHeld: BouncerSceneLayout,
+ val whenNaturallyHeld: BouncerOverlayLayout,
+ val whenUnnaturallyHeld: BouncerOverlayLayout,
) {
- fun layout(heldNaturally: Boolean): BouncerSceneLayout {
+ fun layout(heldNaturally: Boolean): BouncerOverlayLayout {
return if (heldNaturally) {
whenNaturallyHeld
} else {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerPredictiveBackTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerPredictiveBackTest.kt
index dda460a6198f..0fe649c867f2 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerPredictiveBackTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/composable/BouncerPredictiveBackTest.kt
@@ -43,11 +43,10 @@ import com.android.compose.animation.scene.UserActionResult
import com.android.compose.animation.scene.isElement
import com.android.compose.theme.PlatformTheme
import com.android.systemui.SysuiTestCase
-import com.android.systemui.bouncer.domain.interactor.bouncerInteractor
import com.android.systemui.bouncer.ui.BouncerDialogFactory
-import com.android.systemui.bouncer.ui.viewmodel.BouncerSceneContentViewModel
+import com.android.systemui.bouncer.ui.viewmodel.BouncerOverlayContentViewModel
import com.android.systemui.bouncer.ui.viewmodel.BouncerUserActionsViewModel
-import com.android.systemui.bouncer.ui.viewmodel.bouncerSceneContentViewModel
+import com.android.systemui.bouncer.ui.viewmodel.bouncerOverlayContentViewModel
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
@@ -59,6 +58,7 @@ import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.domain.startable.sceneContainerStartable
import com.android.systemui.scene.sceneContainerViewModelFactory
import com.android.systemui.scene.sceneTransitionsBuilder
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.SceneContainerConfig
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.sceneDataSourceDelegator
@@ -103,10 +103,10 @@ class BouncerPredictiveBackTest : SysuiTestCase() {
motionTestRule.toolkit.composeContentTestRule as AndroidComposeTestRule<*, *>
private val sceneInteractor by lazy { kosmos.sceneInteractor }
- private val Kosmos.sceneKeys by Fixture { listOf(Scenes.Lockscreen, Scenes.Bouncer) }
- private val Kosmos.initialSceneKey by Fixture { Scenes.Bouncer }
+ private val Kosmos.sceneKeys by Fixture { listOf(Scenes.Lockscreen) }
+ private val Kosmos.initialSceneKey by Fixture { Scenes.Lockscreen }
private val Kosmos.sceneContainerConfig by Fixture {
- val navigationDistances = mapOf(Scenes.Lockscreen to 1, Scenes.Bouncer to 0)
+ val navigationDistances = mapOf(Scenes.Lockscreen to 1)
SceneContainerConfig(
sceneKeys,
initialSceneKey,
@@ -137,17 +137,17 @@ class BouncerPredictiveBackTest : SysuiTestCase() {
}
private val bouncerSceneActionsViewModelFactory =
object : BouncerUserActionsViewModel.Factory {
- override fun create() = BouncerUserActionsViewModel(kosmos.bouncerInteractor)
+ override fun create() = BouncerUserActionsViewModel()
}
- private lateinit var bouncerSceneContentViewModel: BouncerSceneContentViewModel
- private val bouncerSceneContentViewModelFactory =
- object : BouncerSceneContentViewModel.Factory {
- override fun create() = bouncerSceneContentViewModel
+ private lateinit var mBouncerOverlayContentViewModel: BouncerOverlayContentViewModel
+ private val mBouncerOverlayContentViewModelFactory =
+ object : BouncerOverlayContentViewModel.Factory {
+ override fun create() = mBouncerOverlayContentViewModel
}
private val bouncerScene =
- BouncerScene(
+ BouncerOverlay(
bouncerSceneActionsViewModelFactory,
- bouncerSceneContentViewModelFactory,
+ mBouncerOverlayContentViewModelFactory,
bouncerDialogFactory,
)
@@ -155,7 +155,7 @@ class BouncerPredictiveBackTest : SysuiTestCase() {
fun setUp() {
MockitoAnnotations.initMocks(this)
- bouncerSceneContentViewModel = kosmos.bouncerSceneContentViewModel
+ mBouncerOverlayContentViewModel = kosmos.bouncerOverlayContentViewModel
val startable = kosmos.sceneContainerStartable
startable.start()
@@ -175,14 +175,10 @@ class BouncerPredictiveBackTest : SysuiTestCase() {
rememberViewModel("BouncerPredictiveBackTest") {
sceneContainerViewModel
},
- sceneByKey =
- mapOf(
- Scenes.Lockscreen to FakeLockscreen(),
- Scenes.Bouncer to bouncerScene,
- ),
- initialSceneKey = Scenes.Bouncer,
+ sceneByKey = mapOf(Scenes.Lockscreen to FakeLockscreen()),
+ initialSceneKey = Scenes.Lockscreen,
transitionsBuilder = kosmos.sceneTransitionsBuilder,
- overlayByKey = emptyMap(),
+ overlayByKey = mapOf(Overlays.Bouncer to bouncerScene),
dataSourceDelegator = kosmos.sceneDataSourceDelegator,
qsSceneAdapter = { kosmos.fakeQsSceneAdapter },
sceneJankMonitorFactory = kosmos.sceneJankMonitorFactory,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerOverlayContentViewModelTest.kt
index eef8d9f40458..9cc09bd406e7 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerOverlayContentViewModelTest.kt
@@ -61,17 +61,17 @@ import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
@EnableSceneContainer
-class BouncerSceneContentViewModelTest : SysuiTestCase() {
+class BouncerOverlayContentViewModelTest : SysuiTestCase() {
private val kosmos = testKosmos()
private val testScope = kosmos.testScope
- private lateinit var underTest: BouncerSceneContentViewModel
+ private lateinit var underTest: BouncerOverlayContentViewModel
@Before
fun setUp() {
kosmos.sceneContainerStartable.start()
- underTest = kosmos.bouncerSceneContentViewModel
+ underTest = kosmos.bouncerOverlayContentViewModel
underTest.activateIn(testScope)
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerUserActionsViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerUserActionsViewModelTest.kt
index e12fabfd199d..fe2f51fd52cd 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerUserActionsViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/BouncerUserActionsViewModelTest.kt
@@ -27,6 +27,7 @@ import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.scene.domain.startable.sceneContainerStartable
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.fakeSceneDataSource
import com.android.systemui.testKosmos
@@ -62,13 +63,13 @@ class BouncerUserActionsViewModelTest : SysuiTestCase() {
kosmos.fakeSceneDataSource.changeScene(Scenes.QuickSettings)
runCurrent()
- kosmos.fakeSceneDataSource.changeScene(Scenes.Bouncer)
+ kosmos.fakeSceneDataSource.showOverlay(Overlays.Bouncer)
runCurrent()
assertThat(actions)
.containsEntriesExactly(
- Back to UserActionResult(Scenes.QuickSettings),
- Swipe.Down to UserActionResult(Scenes.QuickSettings),
+ Back to UserActionResult.HideOverlay(Overlays.Bouncer),
+ Swipe.Down to UserActionResult.HideOverlay(Overlays.Bouncer),
)
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PasswordBouncerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PasswordBouncerViewModelTest.kt
index b2d245858196..7cfbf5efce68 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PasswordBouncerViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PasswordBouncerViewModelTest.kt
@@ -22,7 +22,6 @@ import android.view.KeyEvent
import androidx.compose.ui.input.key.KeyEventType
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
-import com.android.compose.animation.scene.SceneKey
import com.android.systemui.SysuiTestCase
import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository
import com.android.systemui.authentication.domain.interactor.authenticationInteractor
@@ -38,7 +37,7 @@ import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.sceneInteractor
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.testKosmos
import com.android.systemui.user.data.model.SelectedUserModel
import com.android.systemui.user.data.model.SelectionStatus
@@ -86,12 +85,12 @@ class PasswordBouncerViewModelTest : SysuiTestCase() {
@Test
fun onShown() =
testScope.runTest {
- val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val password by collectLastValue(underTest.password)
lockDeviceAndOpenPasswordBouncer()
assertThat(password).isEmpty()
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
assertThat(underTest.authenticationMethod).isEqualTo(AuthenticationMethodModel.Password)
}
@@ -111,14 +110,14 @@ class PasswordBouncerViewModelTest : SysuiTestCase() {
@Test
fun onPasswordInputChanged() =
testScope.runTest {
- val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val password by collectLastValue(underTest.password)
lockDeviceAndOpenPasswordBouncer()
underTest.onPasswordInputChanged("password")
assertThat(password).isEqualTo("password")
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
}
@Test
@@ -152,7 +151,7 @@ class PasswordBouncerViewModelTest : SysuiTestCase() {
kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
AuthenticationMethodModel.Password
)
- switchToScene(Scenes.Bouncer)
+ showBouncer()
// No input entered.
@@ -185,7 +184,7 @@ class PasswordBouncerViewModelTest : SysuiTestCase() {
@Test
fun onShown_againAfterSceneChange_resetsPassword() =
testScope.runTest {
- val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val password by collectLastValue(underTest.password)
lockDeviceAndOpenPasswordBouncer()
@@ -194,14 +193,14 @@ class PasswordBouncerViewModelTest : SysuiTestCase() {
assertThat(password).isEqualTo("password")
// The user doesn't confirm the password, but navigates back to the lockscreen instead.
- switchToScene(Scenes.Lockscreen)
+ hideBouncer()
// The user navigates to the bouncer again.
- switchToScene(Scenes.Bouncer)
+ showBouncer()
// Ensure the previously-entered password is not shown.
assertThat(password).isEmpty()
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
}
@Test
@@ -379,21 +378,28 @@ class PasswordBouncerViewModelTest : SysuiTestCase() {
assertThat(underTest.onKeyEvent(KeyEventType.KeyDown, KeyEvent.KEYCODE_SPACE)).isFalse()
}
- private fun TestScope.switchToScene(toScene: SceneKey) {
- val currentScene by collectLastValue(sceneInteractor.currentScene)
- val bouncerHidden = currentScene == Scenes.Bouncer && toScene != Scenes.Bouncer
- sceneInteractor.changeScene(toScene, "reason")
- if (bouncerHidden) underTest.onHidden()
+ private fun TestScope.showBouncer() {
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
+ sceneInteractor.showOverlay(Overlays.Bouncer, "reason")
runCurrent()
- assertThat(currentScene).isEqualTo(toScene)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
+ }
+
+ private fun TestScope.hideBouncer() {
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
+ sceneInteractor.hideOverlay(Overlays.Bouncer, "reason")
+ underTest.onHidden()
+ runCurrent()
+
+ assertThat(currentOverlays).doesNotContain(Overlays.Bouncer)
}
private fun TestScope.lockDeviceAndOpenPasswordBouncer() {
kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
AuthenticationMethodModel.Password
)
- switchToScene(Scenes.Bouncer)
+ showBouncer()
}
private suspend fun TestScope.setLockout(isLockedOut: Boolean, failedAttemptCount: Int = 5) {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PatternBouncerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PatternBouncerViewModelTest.kt
index ec7d1c3bea3e..4075d1158154 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PatternBouncerViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PatternBouncerViewModelTest.kt
@@ -19,7 +19,6 @@ package com.android.systemui.bouncer.ui.viewmodel
import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
-import com.android.compose.animation.scene.SceneKey
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.authentication.data.repository.FakeAuthenticationRepository
@@ -36,7 +35,7 @@ import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.sceneInteractor
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.testKosmos
import com.google.android.msdl.data.model.MSDLToken
import com.google.common.truth.Truth.assertThat
@@ -58,7 +57,7 @@ class PatternBouncerViewModelTest : SysuiTestCase() {
private val testScope = kosmos.testScope
private val authenticationInteractor by lazy { kosmos.authenticationInteractor }
private val sceneInteractor by lazy { kosmos.sceneInteractor }
- private val bouncerViewModel by lazy { kosmos.bouncerSceneContentViewModel }
+ private val bouncerViewModel by lazy { kosmos.bouncerOverlayContentViewModel }
private val msdlPlayer: FakeMSDLPlayer = kosmos.fakeMSDLPlayer
private val bouncerHapticHelper = kosmos.bouncerHapticPlayer
private val underTest =
@@ -81,21 +80,21 @@ class PatternBouncerViewModelTest : SysuiTestCase() {
@Test
fun onShown() =
testScope.runTest {
- val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val selectedDots by collectLastValue(underTest.selectedDots)
val currentDot by collectLastValue(underTest.currentDot)
lockDeviceAndOpenPatternBouncer()
assertThat(selectedDots).isEmpty()
assertThat(currentDot).isNull()
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
assertThat(underTest.authenticationMethod).isEqualTo(AuthenticationMethodModel.Pattern)
}
@Test
fun onDragStart() =
testScope.runTest {
- val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val selectedDots by collectLastValue(underTest.selectedDots)
val currentDot by collectLastValue(underTest.currentDot)
lockDeviceAndOpenPatternBouncer()
@@ -104,7 +103,7 @@ class PatternBouncerViewModelTest : SysuiTestCase() {
assertThat(selectedDots).isEmpty()
assertThat(currentDot).isNull()
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
}
@Test
@@ -143,7 +142,7 @@ class PatternBouncerViewModelTest : SysuiTestCase() {
@Test
fun onDragEnd_whenWrong() =
testScope.runTest {
- val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val selectedDots by collectLastValue(underTest.selectedDots)
val currentDot by collectLastValue(underTest.currentDot)
lockDeviceAndOpenPatternBouncer()
@@ -154,7 +153,7 @@ class PatternBouncerViewModelTest : SysuiTestCase() {
assertThat(selectedDots).isEmpty()
assertThat(currentDot).isNull()
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
}
@Test
@@ -365,21 +364,16 @@ class PatternBouncerViewModelTest : SysuiTestCase() {
)
}
- private fun TestScope.switchToScene(toScene: SceneKey) {
- val currentScene by collectLastValue(sceneInteractor.currentScene)
- val bouncerHidden = currentScene == Scenes.Bouncer && toScene != Scenes.Bouncer
- sceneInteractor.changeScene(toScene, "reason")
- if (bouncerHidden) underTest.onHidden()
- runCurrent()
-
- assertThat(currentScene).isEqualTo(toScene)
- }
-
private fun TestScope.lockDeviceAndOpenPatternBouncer() {
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
AuthenticationMethodModel.Pattern
)
- switchToScene(Scenes.Bouncer)
+
+ sceneInteractor.showOverlay(Overlays.Bouncer, "reason")
+ runCurrent()
+
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
}
companion object {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PinBouncerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PinBouncerViewModelTest.kt
index 705e8341ff80..2518d2fdd2e5 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PinBouncerViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/bouncer/ui/viewmodel/PinBouncerViewModelTest.kt
@@ -26,7 +26,6 @@ import android.view.KeyEvent.KEYCODE_NUMPAD_0
import androidx.compose.ui.input.key.KeyEventType
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
-import com.android.compose.animation.scene.SceneKey
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.authentication.data.repository.FakeAuthenticationRepository
@@ -42,7 +41,7 @@ import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.sceneInteractor
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.testKosmos
import com.google.android.msdl.data.model.MSDLToken
import com.google.common.truth.Truth.assertThat
@@ -181,7 +180,7 @@ class PinBouncerViewModelTest : SysuiTestCase() {
@Test
fun onBackspaceButtonLongPressed() =
testScope.runTest {
- val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val pin by collectLastValue(underTest.pinInput.map { it.getPin() })
lockDeviceAndOpenPinBouncer()
@@ -194,7 +193,7 @@ class PinBouncerViewModelTest : SysuiTestCase() {
underTest.onBackspaceButtonLongPressed()
assertThat(pin).isEmpty()
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
}
@Test
@@ -213,7 +212,7 @@ class PinBouncerViewModelTest : SysuiTestCase() {
@Test
fun onAuthenticateButtonClicked_whenWrong() =
testScope.runTest {
- val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val pin by collectLastValue(underTest.pinInput.map { it.getPin() })
lockDeviceAndOpenPinBouncer()
@@ -226,7 +225,7 @@ class PinBouncerViewModelTest : SysuiTestCase() {
underTest.onAuthenticateButtonClicked()
assertThat(pin).isEmpty()
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
}
@Test
@@ -281,7 +280,7 @@ class PinBouncerViewModelTest : SysuiTestCase() {
val autoConfirmEnabled by
collectLastValue(authenticationInteractor.isAutoConfirmEnabled)
- val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val pin by collectLastValue(underTest.pinInput.map { it.getPin() })
kosmos.fakeAuthenticationRepository.setAutoConfirmFeatureEnabled(true)
@@ -296,7 +295,7 @@ class PinBouncerViewModelTest : SysuiTestCase() {
) // PIN is now wrong!
assertThat(pin).isEmpty()
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
}
@Test
@@ -310,10 +309,10 @@ class PinBouncerViewModelTest : SysuiTestCase() {
assertThat(pin).isNotEmpty()
// The user doesn't confirm the PIN, but navigates back to the lockscreen instead.
- switchToScene(Scenes.Lockscreen)
+ hideBouncer()
// The user navigates to the bouncer again.
- switchToScene(Scenes.Bouncer)
+ showBouncer()
// Ensure the previously-entered PIN is not shown.
assertThat(pin).isEmpty()
@@ -527,19 +526,26 @@ class PinBouncerViewModelTest : SysuiTestCase() {
assertThat(msdlPlayer.latestPropertiesPlayed).isNull()
}
- private fun TestScope.switchToScene(toScene: SceneKey) {
- val currentScene by collectLastValue(sceneInteractor.currentScene)
- val bouncerHidden = currentScene == Scenes.Bouncer && toScene != Scenes.Bouncer
- sceneInteractor.changeScene(toScene, "reason")
- if (bouncerHidden) underTest.onHidden()
+ private fun TestScope.showBouncer() {
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
+ sceneInteractor.showOverlay(Overlays.Bouncer, "reason")
runCurrent()
- assertThat(currentScene).isEqualTo(toScene)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
+ }
+
+ private fun TestScope.hideBouncer() {
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
+ sceneInteractor.hideOverlay(Overlays.Bouncer, "reason")
+ underTest.onHidden()
+ runCurrent()
+
+ assertThat(currentOverlays).doesNotContain(Overlays.Bouncer)
}
private fun TestScope.lockDeviceAndOpenPinBouncer() {
kosmos.fakeAuthenticationRepository.setAuthenticationMethod(AuthenticationMethodModel.Pin)
- switchToScene(Scenes.Bouncer)
+ showBouncer()
}
companion object {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalUserActionsViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalUserActionsViewModelTest.kt
index 619995478ecc..59fda984b3d5 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalUserActionsViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalUserActionsViewModelTest.kt
@@ -74,7 +74,8 @@ class CommunalUserActionsViewModelTest : SysuiTestCase() {
setUpState(isShadeTouchable = true, isDeviceUnlocked = false)
assertThat(actions).isNotEmpty()
assertThat(actions?.get(Swipe.End)).isEqualTo(UserActionResult(Scenes.Lockscreen))
- assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Bouncer))
+ assertThat(actions?.get(Swipe.Up))
+ .isEqualTo(UserActionResult.ShowOverlay(Overlays.Bouncer))
assertThat(actions?.get(Swipe.Down)).isEqualTo(UserActionResult(Scenes.Shade))
setUpState(isShadeTouchable = false, isDeviceUnlocked = false)
@@ -96,7 +97,8 @@ class CommunalUserActionsViewModelTest : SysuiTestCase() {
setUpState(isShadeTouchable = true, isDeviceUnlocked = false)
assertThat(actions).isNotEmpty()
assertThat(actions?.get(Swipe.End)).isEqualTo(UserActionResult(Scenes.Lockscreen))
- assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Bouncer))
+ assertThat(actions?.get(Swipe.Up))
+ .isEqualTo(UserActionResult.ShowOverlay(Overlays.Bouncer))
assertThat(actions?.get(Swipe.Down))
.isEqualTo(UserActionResult(Scenes.Shade, ToSplitShade))
@@ -120,7 +122,8 @@ class CommunalUserActionsViewModelTest : SysuiTestCase() {
setUpState(isShadeTouchable = true, isDeviceUnlocked = false)
assertThat(actions).isNotEmpty()
assertThat(actions?.get(Swipe.End)).isEqualTo(UserActionResult(Scenes.Lockscreen))
- assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Bouncer))
+ assertThat(actions?.get(Swipe.Up))
+ .isEqualTo(UserActionResult.ShowOverlay(Overlays.Bouncer))
assertThat(actions?.get(Swipe.Down))
.isEqualTo(UserActionResult.ShowOverlay(Overlays.NotificationsShade))
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/view/viewmodel/CommunalViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/view/viewmodel/CommunalViewModelTest.kt
index 799054a92bee..f47aa6b3dc03 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/view/viewmodel/CommunalViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/view/viewmodel/CommunalViewModelTest.kt
@@ -85,6 +85,7 @@ import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.Transition
import com.android.systemui.scene.data.repository.setTransition
+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 com.android.systemui.settings.fakeUserTracker
@@ -602,6 +603,7 @@ class CommunalViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
flowOf(ObservableTransitionState.Idle(CommunalScenes.Communal))
)
// Transitioned to Glanceable hub.
+ kosmos.sceneInteractor.changeScene(Scenes.Communal, "")
kosmos.setTransition(
sceneTransition = Idle(Scenes.Communal),
stateTransition =
@@ -656,6 +658,7 @@ class CommunalViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
keyguardRepository.setKeyguardOccluded(true)
// And on hub
+ kosmos.sceneInteractor.changeScene(Scenes.Communal, "")
kosmos.setTransition(
sceneTransition = Idle(Scenes.Communal),
stateTransition =
@@ -673,6 +676,7 @@ class CommunalViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
assertThat(isCommunalContentFlowFrozen).isEqualTo(true)
// 3. When transitioned to OCCLUDED and activity shows
+ kosmos.sceneInteractor.changeScene(Scenes.Lockscreen, "")
kosmos.setTransition(
sceneTransition = Idle(Scenes.Lockscreen),
stateTransition =
@@ -759,6 +763,7 @@ class CommunalViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
keyguardRepository.setKeyguardOccluded(true)
// And transitioned to hub
+ kosmos.sceneInteractor.changeScene(Scenes.Communal, "")
kosmos.setTransition(
sceneTransition = Idle(Scenes.Communal),
stateTransition =
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/data/repository/DeviceEntryFaceAuthRepositoryTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
index f6016c6479ac..651d474d78b9 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/data/repository/DeviceEntryFaceAuthRepositoryTest.kt
@@ -81,6 +81,7 @@ import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.se
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.statusbar.phone.KeyguardBypassController
import com.android.systemui.testKosmos
@@ -186,15 +187,13 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
underTest = createDeviceEntryFaceAuthRepositoryImpl(faceManager, bypassController)
if (!SceneContainerFlag.isEnabled) {
- mSetFlagsRule.disableFlags(
- AConfigFlags.FLAG_KEYGUARD_WM_STATE_REFACTOR,
- )
+ mSetFlagsRule.disableFlags(AConfigFlags.FLAG_KEYGUARD_WM_STATE_REFACTOR)
}
}
private fun createDeviceEntryFaceAuthRepositoryImpl(
fmOverride: FaceManager? = faceManager,
- bypassControllerOverride: KeyguardBypassController? = bypassController
+ bypassControllerOverride: KeyguardBypassController? = bypassController,
): DeviceEntryFaceAuthRepositoryImpl {
val faceAuthBuffer = logcatTableLogBuffer(kosmos, "face auth")
val faceDetectBuffer = logcatTableLogBuffer(kosmos, "face detect")
@@ -256,7 +255,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
0,
null,
keyguardSessionId,
- faceAuthUiEvent.extraInfo
+ faceAuthUiEvent.extraInfo,
)
}
@@ -289,7 +288,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
authenticationCallback.value.onAuthenticationError(
FACE_ERROR_LOCKOUT_PERMANENT,
- "face locked out"
+ "face locked out",
)
assertThat(lockedOut()).isTrue()
@@ -317,7 +316,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
.thenReturn(
listOf(
createFaceSensorProperties(supportsFaceDetection = false),
- createFaceSensorProperties(supportsFaceDetection = true)
+ createFaceSensorProperties(supportsFaceDetection = true),
)
)
assertThat(createDeviceEntryFaceAuthRepositoryImpl().isDetectionSupported).isFalse()
@@ -326,7 +325,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
.thenReturn(
listOf(
createFaceSensorProperties(supportsFaceDetection = true),
- createFaceSensorProperties(supportsFaceDetection = false)
+ createFaceSensorProperties(supportsFaceDetection = false),
)
)
assertThat(createDeviceEntryFaceAuthRepositoryImpl().isDetectionSupported).isTrue()
@@ -409,7 +408,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
// Auth is done cancelling.
authenticationCallback.value.onAuthenticationError(
FACE_ERROR_CANCELED,
- "First auth attempt cancellation completed"
+ "First auth attempt cancellation completed",
)
val value = authStatus() as ErrorFaceAuthenticationStatus
assertThat(value.msgId).isEqualTo(FACE_ERROR_CANCELED)
@@ -472,7 +471,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
underTest =
createDeviceEntryFaceAuthRepositoryImpl(
fmOverride = null,
- bypassControllerOverride = null
+ bypassControllerOverride = null,
)
fakeUserRepository.setSelectedUserInfo(primaryUser)
@@ -499,7 +498,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
testGatingCheckForFaceAuth {
fakeUserRepository.setSelectedUserInfo(
primaryUser,
- SelectionStatus.SELECTION_IN_PROGRESS
+ SelectionStatus.SELECTION_IN_PROGRESS,
)
}
}
@@ -510,7 +509,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
testGatingCheckForDetect {
fakeUserRepository.setSelectedUserInfo(
userInfo = primaryUser,
- selectionStatus = SelectionStatus.SELECTION_IN_PROGRESS
+ selectionStatus = SelectionStatus.SELECTION_IN_PROGRESS,
)
}
}
@@ -544,11 +543,11 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
testGatingCheckForFaceAuth(sceneContainerEnabled = true) {
kosmos.sceneInteractor.setTransitionState(
MutableStateFlow(
- ObservableTransitionState.Transition(
- fromScene = Scenes.Bouncer,
+ ObservableTransitionState.Transition.hideOverlay(
+ overlay = Overlays.Bouncer,
toScene = Scenes.Gone,
- currentScene = flowOf(Scenes.Bouncer),
- progress = MutableStateFlow(0.2f),
+ currentOverlays = flowOf(setOf(Overlays.Bouncer)),
+ progress = flowOf(.2f),
isInitiatedByUserInput = true,
isUserInputOngoing = flowOf(false),
)
@@ -634,9 +633,11 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
assertThat(canFaceAuthRun()).isFalse()
// but bouncer is shown after that.
- kosmos.sceneInteractor.changeScene(Scenes.Bouncer, "for-test")
+ kosmos.sceneInteractor.showOverlay(Overlays.Bouncer, "for-test")
kosmos.sceneInteractor.setTransitionState(
- MutableStateFlow(ObservableTransitionState.Idle(Scenes.Bouncer))
+ MutableStateFlow(
+ ObservableTransitionState.Idle(Scenes.Lockscreen, setOf(Overlays.Bouncer))
+ )
)
runCurrent()
@@ -666,7 +667,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
assertThat(canFaceAuthRun()).isFalse()
underTest.requestAuthenticate(
FACE_AUTH_TRIGGERED_SWIPE_UP_ON_BOUNCER,
- fallbackToDetection = true
+ fallbackToDetection = true,
)
faceAuthenticateIsNotCalled()
@@ -687,7 +688,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
assertThat(canFaceAuthRun()).isFalse()
underTest.requestAuthenticate(
FACE_AUTH_TRIGGERED_SWIPE_UP_ON_BOUNCER,
- fallbackToDetection = true
+ fallbackToDetection = true,
)
faceAuthenticateIsNotCalled()
@@ -704,7 +705,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
keyguardTransitionRepository.sendTransitionSteps(
from = KeyguardState.LOCKSCREEN,
to = KeyguardState.OFF,
- testScope
+ testScope,
)
runCurrent()
keyguardTransitionRepository.sendTransitionStep(
@@ -730,7 +731,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
keyguardTransitionRepository.sendTransitionSteps(
from = KeyguardState.OFF,
to = KeyguardState.LOCKSCREEN,
- testScope
+ testScope,
)
runCurrent()
@@ -834,7 +835,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
fakeUserRepository.setSelectedUserInfo(
primaryUser,
- SelectionStatus.SELECTION_IN_PROGRESS
+ SelectionStatus.SELECTION_IN_PROGRESS,
)
assertThat(authenticated()).isFalse()
@@ -896,11 +897,11 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
testGatingCheckForDetect(sceneContainerEnabled = true) {
kosmos.sceneInteractor.setTransitionState(
MutableStateFlow(
- ObservableTransitionState.Transition(
- fromScene = Scenes.Bouncer,
+ ObservableTransitionState.Transition.hideOverlay(
+ overlay = Overlays.Bouncer,
toScene = Scenes.Gone,
- currentScene = flowOf(Scenes.Bouncer),
- progress = MutableStateFlow(0.2f),
+ currentOverlays = flowOf(setOf(Overlays.Bouncer)),
+ progress = flowOf(.2f),
isInitiatedByUserInput = true,
isUserInputOngoing = flowOf(false),
)
@@ -1032,7 +1033,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
keyguardTransitionRepository.sendTransitionSteps(
from = KeyguardState.DOZING,
to = KeyguardState.GONE,
- testScope
+ testScope,
)
runCurrent()
verify(faceManager).scheduleWatchdog()
@@ -1044,7 +1045,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
keyguardTransitionRepository.sendTransitionSteps(
from = KeyguardState.AOD,
to = KeyguardState.GONE,
- testScope
+ testScope,
)
runCurrent()
verify(faceManager).scheduleWatchdog()
@@ -1056,7 +1057,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
keyguardTransitionRepository.sendTransitionSteps(
from = KeyguardState.LOCKSCREEN,
to = KeyguardState.GONE,
- testScope
+ testScope,
)
runCurrent()
verify(faceManager).scheduleWatchdog()
@@ -1068,7 +1069,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
keyguardTransitionRepository.sendTransitionSteps(
from = KeyguardState.PRIMARY_BOUNCER,
to = KeyguardState.GONE,
- testScope
+ testScope,
)
runCurrent()
verify(faceManager).scheduleWatchdog()
@@ -1085,7 +1086,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
authenticationCallback.value.onAuthenticationError(
FACE_ERROR_HW_UNAVAILABLE,
- "HW unavailable"
+ "HW unavailable",
)
advanceTimeBy(DeviceEntryFaceAuthRepositoryImpl.HAL_ERROR_RETRY_TIMEOUT)
@@ -1137,7 +1138,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
private suspend fun TestScope.testGatingCheckForFaceAuth(
sceneContainerEnabled: Boolean = false,
- gatingCheckModifier: suspend () -> Unit
+ gatingCheckModifier: suspend () -> Unit,
) {
initCollectors()
allPreconditionsToRunFaceAuthAreTrue(sceneContainerEnabled)
@@ -1180,7 +1181,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
private suspend fun TestScope.testGatingCheckForDetect(
sceneContainerEnabled: Boolean = false,
- gatingCheckModifier: suspend () -> Unit
+ gatingCheckModifier: suspend () -> Unit,
) {
initCollectors()
allPreconditionsToRunFaceAuthAreTrue(sceneContainerEnabled)
@@ -1194,7 +1195,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
// Trigger authenticate with detection fallback
underTest.requestAuthenticate(
FACE_AUTH_TRIGGERED_SWIPE_UP_ON_BOUNCER,
- fallbackToDetection = true
+ fallbackToDetection = true,
)
runCurrent()
@@ -1213,7 +1214,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
// Try to run detect again
underTest.requestAuthenticate(
FACE_AUTH_TRIGGERED_SWIPE_UP_ON_BOUNCER,
- fallbackToDetection = true
+ fallbackToDetection = true,
)
// Detect won't run because preconditions are not true anymore.
@@ -1242,7 +1243,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
// Keyguard is not going away
kosmos.fakeKeyguardTransitionRepository.sendTransitionStep(
TransitionStep(KeyguardState.OFF, KeyguardState.LOCKSCREEN, value = 1.0f),
- validateStep = false
+ validateStep = false,
)
kosmos.sceneInteractor.setTransitionState(
MutableStateFlow(ObservableTransitionState.Idle(Scenes.Lockscreen))
@@ -1263,7 +1264,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
keyguardTransitionRepository.sendTransitionSteps(
from = KeyguardState.AOD,
to = KeyguardState.LOCKSCREEN,
- testScope
+ testScope,
)
runCurrent()
}
@@ -1315,7 +1316,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
any(),
any(),
isNull(),
- any(FaceAuthenticateOptions::class.java)
+ any(FaceAuthenticateOptions::class.java),
)
}
@@ -1334,7 +1335,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
"vendor/model/revision" /* hardwareVersion */,
"1.01" /* firmwareVersion */,
"00000001" /* serialNumber */,
- "" /* softwareVersion */
+ "", /* softwareVersion */
)
)
return FaceSensorPropertiesInternal(
@@ -1345,7 +1346,7 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
FaceSensorProperties.TYPE_UNKNOWN,
supportsFaceDetection /* supportsFaceDetection */,
true /* supportsSelfIllumination */,
- false /* resetLockoutRequiresChallenge */
+ false, /* resetLockoutRequiresChallenge */
)
}
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..d2d8ab9d5cb7 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
@@ -55,6 +55,7 @@ import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.se
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.power.shared.model.WakeSleepReason
import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.android.systemui.user.data.model.SelectionStatus
@@ -298,9 +299,12 @@ class DeviceEntryFaceAuthInteractorTest : SysuiTestCase() {
testScope.runTest {
underTest.start()
- kosmos.sceneInteractor.changeScene(Scenes.Bouncer, "for-test")
+ kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "for-test")
+ kosmos.sceneInteractor.showOverlay(Overlays.Bouncer, "for-test")
kosmos.sceneInteractor.setTransitionState(
- MutableStateFlow(ObservableTransitionState.Idle(Scenes.Bouncer))
+ MutableStateFlow(
+ ObservableTransitionState.Idle(Scenes.Lockscreen, setOf(Overlays.Bouncer))
+ )
)
runCurrent()
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt
index 84f08f14a86a..d247137868f4 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt
@@ -45,6 +45,7 @@ import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticati
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.domain.startable.sceneContainerStartable
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.statusbar.sysuiStatusBarStateController
import com.android.systemui.testKosmos
@@ -179,7 +180,7 @@ class DeviceEntryInteractorTest : SysuiTestCase() {
kosmos.fakeDeviceEntryRepository.setLockscreenEnabled(true)
switchToScene(Scenes.Lockscreen)
runCurrent()
- switchToScene(Scenes.Bouncer)
+ showBouncer()
val isDeviceEntered by collectLastValue(underTest.isDeviceEntered)
assertThat(isDeviceEntered).isFalse()
@@ -375,6 +376,7 @@ class DeviceEntryInteractorTest : SysuiTestCase() {
fun showOrUnlockDevice_noAlternateBouncer_switchesToBouncerScene() =
testScope.runTest {
val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
switchToScene(Scenes.Lockscreen)
assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
@@ -386,7 +388,7 @@ class DeviceEntryInteractorTest : SysuiTestCase() {
underTest.attemptDeviceEntry()
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
}
@Test
@@ -437,6 +439,7 @@ class DeviceEntryInteractorTest : SysuiTestCase() {
assertThat(isDeviceEntered).isFalse()
assertThat(isDeviceEnteredDirectly).isFalse()
val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
// Navigate to shade and bouncer:
@@ -446,8 +449,8 @@ class DeviceEntryInteractorTest : SysuiTestCase() {
// be shown and successful authentication should take the user back to where they are,
// the shade scene.
sysuiStatusBarStateController.setLeaveOpenOnKeyguardHide(true)
- switchToScene(Scenes.Bouncer)
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ showBouncer()
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
assertThat(isDeviceEntered).isFalse()
assertThat(isDeviceEnteredDirectly).isFalse()
@@ -465,6 +468,19 @@ class DeviceEntryInteractorTest : SysuiTestCase() {
runCurrent()
}
+ private fun TestScope.showBouncer() {
+ sceneInteractor.showOverlay(Overlays.Bouncer, "reason")
+ sceneInteractor.setTransitionState(
+ flowOf(
+ ObservableTransitionState.Idle(
+ sceneInteractor.currentScene.value,
+ setOf(Overlays.Bouncer),
+ )
+ )
+ )
+ runCurrent()
+ }
+
private suspend fun givenCanShowAlternateBouncer() {
val canShowAlternateBouncer by
testScope.collectLastValue(kosmos.alternateBouncerInteractor.canShowAlternateBouncer)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntrySourceInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntrySourceInteractorTest.kt
index a5c0da52d86d..f15fd28e34f0 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntrySourceInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntrySourceInteractorTest.kt
@@ -45,6 +45,7 @@ import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticati
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.statusbar.phone.dozeScrimController
import com.android.systemui.statusbar.phone.screenOffAnimationController
@@ -145,6 +146,7 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
whenever(kosmos.keyguardUpdateMonitor.isDeviceInteractive).thenReturn(true)
configureDeviceEntryBiometricAuthSuccessState(isFingerprintAuth = true)
configureBiometricUnlockState(
+ primaryBouncerVisible = false,
alternateBouncerVisible = false,
sceneKey = Scenes.Lockscreen,
)
@@ -167,7 +169,11 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
whenever(kosmos.keyguardUpdateMonitor.isDeviceInteractive).thenReturn(false)
configureDeviceEntryBiometricAuthSuccessState(isFingerprintAuth = true)
- configureBiometricUnlockState(alternateBouncerVisible = false, sceneKey = Scenes.Dream)
+ configureBiometricUnlockState(
+ primaryBouncerVisible = false,
+ alternateBouncerVisible = false,
+ sceneKey = Scenes.Dream,
+ )
runCurrent()
assertThat(deviceEntryFromBiometricSource)
@@ -185,8 +191,9 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
whenever(kosmos.keyguardUpdateMonitor.isDeviceInteractive).thenReturn(true)
configureDeviceEntryBiometricAuthSuccessState(isFingerprintAuth = true)
configureBiometricUnlockState(
+ primaryBouncerVisible = true,
alternateBouncerVisible = false,
- sceneKey = Scenes.Bouncer,
+ sceneKey = Scenes.Lockscreen,
)
runCurrent()
@@ -205,6 +212,7 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
whenever(kosmos.keyguardUpdateMonitor.isDeviceInteractive).thenReturn(true)
configureDeviceEntryBiometricAuthSuccessState(isFingerprintAuth = true)
configureBiometricUnlockState(
+ primaryBouncerVisible = false,
alternateBouncerVisible = false,
sceneKey = Scenes.Lockscreen,
)
@@ -225,6 +233,7 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
whenever(kosmos.keyguardUpdateMonitor.isDeviceInteractive).thenReturn(true)
configureDeviceEntryBiometricAuthSuccessState(isFingerprintAuth = true)
configureBiometricUnlockState(
+ primaryBouncerVisible = false,
alternateBouncerVisible = true,
sceneKey = Scenes.Lockscreen,
)
@@ -247,6 +256,7 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
whenever(kosmos.keyguardUpdateMonitor.isDeviceInteractive).thenReturn(true)
configureDeviceEntryBiometricAuthSuccessState(isFaceAuth = true)
configureBiometricUnlockState(
+ primaryBouncerVisible = false,
alternateBouncerVisible = false,
sceneKey = Scenes.Lockscreen,
)
@@ -274,6 +284,7 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
whenever(kosmos.keyguardUpdateMonitor.isDeviceInteractive).thenReturn(true)
configureDeviceEntryBiometricAuthSuccessState(isFaceAuth = true)
configureBiometricUnlockState(
+ primaryBouncerVisible = false,
alternateBouncerVisible = false,
sceneKey = Scenes.Lockscreen,
)
@@ -295,8 +306,9 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
whenever(kosmos.keyguardUpdateMonitor.isDeviceInteractive).thenReturn(true)
configureDeviceEntryBiometricAuthSuccessState(isFaceAuth = true)
configureBiometricUnlockState(
+ primaryBouncerVisible = true,
alternateBouncerVisible = false,
- sceneKey = Scenes.Bouncer,
+ sceneKey = Scenes.Lockscreen,
)
runCurrent()
@@ -314,7 +326,11 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
whenever(kosmos.keyguardUpdateMonitor.isDeviceInteractive).thenReturn(true)
configureDeviceEntryBiometricAuthSuccessState(isFaceAuth = true)
- configureBiometricUnlockState(alternateBouncerVisible = false, sceneKey = Scenes.Shade)
+ configureBiometricUnlockState(
+ primaryBouncerVisible = false,
+ alternateBouncerVisible = false,
+ sceneKey = Scenes.Shade,
+ )
runCurrent()
// MODE_NONE does not dismiss keyguard
@@ -333,6 +349,7 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
whenever(kosmos.keyguardUpdateMonitor.isDeviceInteractive).thenReturn(true)
configureDeviceEntryBiometricAuthSuccessState(isFaceAuth = true)
configureBiometricUnlockState(
+ primaryBouncerVisible = false,
alternateBouncerVisible = false,
sceneKey = Scenes.Lockscreen,
)
@@ -354,6 +371,7 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
kosmos.keyguardOcclusionRepository.setShowWhenLockedActivityInfo(onTop = true)
configureDeviceEntryBiometricAuthSuccessState(isFaceAuth = true)
configureBiometricUnlockState(
+ primaryBouncerVisible = false,
alternateBouncerVisible = true,
sceneKey = Scenes.Lockscreen,
)
@@ -381,13 +399,20 @@ class DeviceEntrySourceInteractorTest : SysuiTestCase() {
}
private fun configureBiometricUnlockState(
+ primaryBouncerVisible: Boolean,
alternateBouncerVisible: Boolean,
sceneKey: SceneKey,
) {
kosmos.keyguardBouncerRepository.setAlternateVisible(alternateBouncerVisible)
kosmos.sceneInteractor.changeScene(sceneKey, "reason")
+ if (primaryBouncerVisible) kosmos.sceneInteractor.showOverlay(Overlays.Bouncer, "reason")
kosmos.sceneInteractor.setTransitionState(
- MutableStateFlow<ObservableTransitionState>(ObservableTransitionState.Idle(sceneKey))
+ MutableStateFlow<ObservableTransitionState>(
+ ObservableTransitionState.Idle(
+ sceneKey,
+ if (primaryBouncerVisible) setOf(Overlays.Bouncer) else emptySet(),
+ )
+ )
)
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt
index 526510a98e37..b42eddd12e4e 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt
@@ -77,6 +77,7 @@ import com.android.systemui.navigationbar.gestural.domain.TaskInfo
import com.android.systemui.navigationbar.gestural.domain.TaskMatcher
import com.android.systemui.scene.data.repository.sceneContainerRepository
import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.android.systemui.touch.TouchInsetManager
@@ -1073,7 +1074,8 @@ class DreamOverlayServiceTest(flags: FlagsParameterization?) : SysuiTestCase() {
assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.RESUMED)
// Bouncer shows.
- kosmos.sceneInteractor.changeScene(Scenes.Bouncer, "test")
+ kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "test")
+ kosmos.sceneInteractor.showOverlay(Overlays.Bouncer, "test")
testScope.runCurrent()
mMainExecutor.runAllReady()
@@ -1082,6 +1084,7 @@ class DreamOverlayServiceTest(flags: FlagsParameterization?) : SysuiTestCase() {
// Bouncer closes.
kosmos.sceneInteractor.changeScene(Scenes.Dream, "test")
+ kosmos.sceneInteractor.hideOverlay(Overlays.Bouncer, "test")
testScope.runCurrent()
mMainExecutor.runAllReady()
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModelTest.kt
index 102ce0b51c94..69b6e6c84e7e 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModelTest.kt
@@ -74,7 +74,8 @@ class DreamUserActionsViewModelTest : SysuiTestCase() {
setUpState(isShadeTouchable = true, isDeviceUnlocked = false)
assertThat(actions).isNotEmpty()
- assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Bouncer))
+ assertThat(actions?.get(Swipe.Up))
+ .isEqualTo(UserActionResult.ShowOverlay(Overlays.Bouncer))
assertThat(actions?.get(Swipe.Down)).isEqualTo(UserActionResult(Scenes.Shade))
assertThat(actions?.get(Swipe.Start)).isNull()
assertThat(actions?.get(Swipe.End)).isNull()
@@ -99,7 +100,8 @@ class DreamUserActionsViewModelTest : SysuiTestCase() {
setUpState(isShadeTouchable = true, isDeviceUnlocked = false)
assertThat(actions).isNotEmpty()
- assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Bouncer))
+ assertThat(actions?.get(Swipe.Up))
+ .isEqualTo(UserActionResult.ShowOverlay(Overlays.Bouncer))
assertThat(actions?.get(Swipe.Down))
.isEqualTo(UserActionResult(Scenes.Shade, ToSplitShade))
assertThat(actions?.get(Swipe.Start)).isNull()
@@ -126,7 +128,8 @@ class DreamUserActionsViewModelTest : SysuiTestCase() {
setUpState(isShadeTouchable = true, isDeviceUnlocked = false)
assertThat(actions).isNotEmpty()
- assertThat(actions?.get(Swipe.Up)).isEqualTo(UserActionResult(Scenes.Bouncer))
+ assertThat(actions?.get(Swipe.Up))
+ .isEqualTo(UserActionResult.ShowOverlay(Overlays.Bouncer))
assertThat(actions?.get(Swipe.Down))
.isEqualTo(UserActionResult.ShowOverlay(Overlays.NotificationsShade))
assertThat(actions?.get(Swipe.Start)).isNull()
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/inputdevice/tutorial/ui/viewmodel/KeyboardTouchpadTutorialViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/inputdevice/tutorial/ui/viewmodel/KeyboardTouchpadTutorialViewModelTest.kt
index 57bcc1407e24..63be132dacaa 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/inputdevice/tutorial/ui/viewmodel/KeyboardTouchpadTutorialViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/inputdevice/tutorial/ui/viewmodel/KeyboardTouchpadTutorialViewModelTest.kt
@@ -248,6 +248,23 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() {
}
@Test
+ fun screensOrderUntilFinish_whenAutoProceed() =
+ testScope.runTest {
+ val screens by collectValues(viewModel.screen)
+ val closeActivity by collectLastValue(viewModel.closeActivity)
+
+ peripheralsState(keyboardConnected = true, touchpadConnected = true)
+
+ autoProceed()
+ autoProceed()
+ // No autoproceeding at the last screen
+ goToNextScreen()
+
+ assertThat(screens).containsExactly(BACK_GESTURE, HOME_GESTURE, ACTION_KEY).inOrder()
+ assertThat(closeActivity).isTrue()
+ }
+
+ @Test
fun activityFinishes_ifTouchpadModuleIsNotPresent() =
testScope.runTest {
val viewModel =
@@ -299,6 +316,11 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() {
runCurrent()
}
+ private suspend fun TestScope.autoProceed() {
+ viewModel.onAutoProceed()
+ runCurrent()
+ }
+
private fun TestScope.goBack() {
viewModel.onBack()
runCurrent()
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ResourceTrimmerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ResourceTrimmerTest.kt
index 32a631b191bf..043daf02f279 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ResourceTrimmerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ResourceTrimmerTest.kt
@@ -8,16 +8,19 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.flags.fakeFeatureFlagsClassic
+import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
+import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testDispatcher
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.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.setSceneTransition
+import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.android.systemui.utils.GlobalWindowManager
@@ -130,7 +133,7 @@ class ResourceTrimmerTest : SysuiTestCase() {
keyguardTransitionRepository.sendTransitionSteps(
from = KeyguardState.LOCKSCREEN,
to = KeyguardState.GONE,
- testScope
+ testScope,
)
verify(globalWindowManager, times(1))
.trimMemory(ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN)
@@ -141,6 +144,13 @@ class ResourceTrimmerTest : SysuiTestCase() {
@EnableSceneContainer
fun keyguardTransitionsToGone_trimsFontCache_scene_container() =
testScope.runTest {
+ kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "reason")
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
+ runCurrent()
+
+ kosmos.sceneInteractor.changeScene(Scenes.Gone, "")
kosmos.setSceneTransition(Idle(Scenes.Gone))
verify(globalWindowManager, times(1))
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractorTest.kt
index 425079d7b5d7..5bcf73b4719a 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractorTest.kt
@@ -41,7 +41,7 @@ import com.android.systemui.keyguard.data.repository.FakeTrustRepository
import com.android.systemui.kosmos.testScope
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.sceneInteractor
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.testKosmos
import com.android.systemui.user.domain.interactor.SelectedUserInteractor
@@ -173,7 +173,7 @@ class DeviceEntrySideFpsOverlayInteractorTest : SysuiTestCase() {
collectLastValue(underTest.showIndicatorForDeviceEntry)
runCurrent()
- updateBouncerScene(
+ updateBouncer(
isActive = true,
fpsDetectionRunning = true,
isUnlockingWithFpAllowed = true,
@@ -199,7 +199,7 @@ class DeviceEntrySideFpsOverlayInteractorTest : SysuiTestCase() {
collectLastValue(underTest.showIndicatorForDeviceEntry)
runCurrent()
- updateBouncerScene(
+ updateBouncer(
isActive = false,
fpsDetectionRunning = true,
isUnlockingWithFpAllowed = true,
@@ -248,7 +248,7 @@ class DeviceEntrySideFpsOverlayInteractorTest : SysuiTestCase() {
collectLastValue(underTest.showIndicatorForDeviceEntry)
runCurrent()
- updateBouncerScene(
+ updateBouncer(
isActive = true,
fpsDetectionRunning = false,
isUnlockingWithFpAllowed = true,
@@ -264,7 +264,7 @@ class DeviceEntrySideFpsOverlayInteractorTest : SysuiTestCase() {
collectLastValue(underTest.showIndicatorForDeviceEntry)
runCurrent()
- updateBouncerScene(
+ updateBouncer(
isActive = true,
fpsDetectionRunning = true,
isUnlockingWithFpAllowed = false,
@@ -349,15 +349,16 @@ class DeviceEntrySideFpsOverlayInteractorTest : SysuiTestCase() {
)
}
- private fun TestScope.updateBouncerScene(
+ private fun TestScope.updateBouncer(
isActive: Boolean,
fpsDetectionRunning: Boolean,
isUnlockingWithFpAllowed: Boolean,
) {
- kosmos.sceneInteractor.changeScene(
- if (isActive) Scenes.Bouncer else Scenes.Lockscreen,
- "reason",
- )
+ if (isActive) {
+ kosmos.sceneInteractor.showOverlay(Overlays.Bouncer, "reason")
+ } else {
+ kosmos.sceneInteractor.hideOverlay(Overlays.Bouncer, "reason")
+ }
whenever(keyguardUpdateMonitor.isFingerprintDetectionRunning)
.thenReturn(fpsDetectionRunning)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt
index c63f6f65c631..0a5f079dd077 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractorTest.kt
@@ -38,10 +38,12 @@ import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticati
import com.android.systemui.kosmos.collectLastValue
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
+import com.android.systemui.scene.data.repository.HideOverlay
import com.android.systemui.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.Transition
import com.android.systemui.scene.data.repository.setSceneTransition
import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
@@ -221,7 +223,7 @@ class KeyguardDismissActionInteractorTest : SysuiTestCase() {
@Test
fun doNotResetDismissActionOnUnlockedShade() =
testScope.runTest {
- kosmos.setSceneTransition(Idle(Scenes.Bouncer))
+ kosmos.setSceneTransition(Idle(Scenes.Lockscreen, setOf(Overlays.Bouncer)))
kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
AuthenticationMethodModel.None
)
@@ -238,7 +240,12 @@ class KeyguardDismissActionInteractorTest : SysuiTestCase() {
assertThat(wasOnCancelInvoked).isFalse()
kosmos.setSceneTransition(
- Transition(from = Scenes.Bouncer, to = Scenes.Shade, progress = flowOf(1f))
+ HideOverlay(
+ overlay = Overlays.Bouncer,
+ toScene = Scenes.Shade,
+ currentOverlays = flowOf(emptySet()),
+ progress = flowOf(1f),
+ )
)
runCurrent()
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractorTest.kt
index 6d53e6c138c7..3fe30b7fb5c0 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractorTest.kt
@@ -24,9 +24,11 @@ import com.android.systemui.coroutines.collectValues
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
+import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardSurfaceBehindModel
+import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.keyguard.util.mockTopActivityClassName
@@ -34,6 +36,7 @@ import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.Transition
import com.android.systemui.scene.data.repository.setSceneTransition
+import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shared.system.ActivityManagerWrapper
import com.android.systemui.shared.system.activityManagerWrapper
@@ -84,7 +87,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
assertThat(values)
.containsExactly(
// We're initialized in LOCKSCREEN.
- KeyguardSurfaceBehindModel(alpha = 0f),
+ KeyguardSurfaceBehindModel(alpha = 0f)
)
transitionRepository.sendTransitionStep(
@@ -105,7 +108,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
it.alpha == 1f &&
it.animateFromTranslationY != 0f &&
it.translationY == 0f
- }
+ },
)
transitionRepository.sendTransitionStep(
@@ -125,7 +128,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
it.alpha == 1f &&
it.animateFromTranslationY != 0f &&
it.translationY == 0f
- }
+ },
)
transitionRepository.sendTransitionStep(
@@ -146,7 +149,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
it.translationY == 0f
},
// Once the current state is GONE, we should default to alpha = 1f.
- { it == KeyguardSurfaceBehindModel(alpha = 1f) }
+ { it == KeyguardSurfaceBehindModel(alpha = 1f) },
)
}
@@ -161,7 +164,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
assertThat(values)
.containsExactly(
// We're initialized in LOCKSCREEN.
- KeyguardSurfaceBehindModel(alpha = 0f),
+ KeyguardSurfaceBehindModel(alpha = 0f)
)
.inOrder()
@@ -242,8 +245,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
values.assertValuesMatch(
// We should be at alpha = 0f during the animation.
- { it == KeyguardSurfaceBehindModel(alpha = 0f) },
- )
+ { it == KeyguardSurfaceBehindModel(alpha = 0f) })
}
@Test
@@ -251,14 +253,19 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
fun testSurfaceBehindModel_toAppSurface_scene_container() =
testScope.runTest {
val values by collectValues(underTest.viewParams)
+ kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "")
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
runCurrent()
assertThat(values)
.containsExactly(
// We're initialized in LOCKSCREEN.
- KeyguardSurfaceBehindModel(alpha = 0f),
+ KeyguardSurfaceBehindModel(alpha = 0f)
)
+ kosmos.sceneInteractor.changeScene(Scenes.Gone, "")
kosmos.setSceneTransition(Transition(Scenes.Lockscreen, Scenes.Gone))
values.assertValuesMatch(
@@ -270,7 +277,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
it.alpha == 1f &&
it.animateFromTranslationY != 0f &&
it.translationY == 0f
- }
+ },
)
kosmos.setSceneTransition(Idle(Scenes.Gone))
@@ -284,7 +291,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
it.translationY == 0f
},
// Once the current state is GONE, we should default to alpha = 1f.
- { it == KeyguardSurfaceBehindModel(alpha = 1f) }
+ { it == KeyguardSurfaceBehindModel(alpha = 1f) },
)
}
@@ -294,15 +301,20 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
testScope.runTest {
val values by collectValues(underTest.viewParams)
activityManagerWrapper.mockTopActivityClassName(LAUNCHER_ACTIVITY_NAME)
+ kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "")
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
runCurrent()
assertThat(values)
.containsExactly(
// We're initialized in LOCKSCREEN.
- KeyguardSurfaceBehindModel(alpha = 0f),
+ KeyguardSurfaceBehindModel(alpha = 0f)
)
.inOrder()
+ kosmos.sceneInteractor.changeScene(Scenes.Gone, "")
kosmos.setSceneTransition(Transition(Scenes.Lockscreen, Scenes.Gone))
assertThat(values)
@@ -340,8 +352,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
values.assertValuesMatch(
// We should be at alpha = 0f during the animation.
- { it == KeyguardSurfaceBehindModel(alpha = 0f) },
- )
+ { it == KeyguardSurfaceBehindModel(alpha = 0f) })
}
@Test
@@ -435,6 +446,13 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
testScope.runTest {
val isAnimatingSurface by collectLastValue(underTest.isAnimatingSurface)
+ kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "")
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
+ runCurrent()
+
+ kosmos.sceneInteractor.changeScene(Scenes.Gone, "")
kosmos.setSceneTransition(Idle(Scenes.Gone))
kosmos.notificationLaunchAnimationInteractor.setIsLaunchAnimationRunning(true)
runCurrent()
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 0b42898d82ae..2d1c905b6db7 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
@@ -24,6 +24,7 @@ import com.android.systemui.coroutines.collectValues
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
+import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState
@@ -34,15 +35,20 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN
import com.android.systemui.keyguard.shared.model.KeyguardState.OFF
import com.android.systemui.keyguard.shared.model.KeyguardState.PRIMARY_BOUNCER
import com.android.systemui.keyguard.shared.model.KeyguardState.UNDEFINED
+import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.keyguard.shared.model.TransitionState.CANCELED
import com.android.systemui.keyguard.shared.model.TransitionState.FINISHED
import com.android.systemui.keyguard.shared.model.TransitionState.RUNNING
import com.android.systemui.keyguard.shared.model.TransitionState.STARTED
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.kosmos.testScope
+import com.android.systemui.scene.data.repository.HideOverlay
import com.android.systemui.scene.data.repository.Idle
+import com.android.systemui.scene.data.repository.ShowOverlay
import com.android.systemui.scene.data.repository.Transition
import com.android.systemui.scene.data.repository.setSceneTransition
+import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
@@ -295,11 +301,13 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {
inTransition,
)
- kosmos.setSceneTransition(Transition(Scenes.Gone, Scenes.Bouncer))
+ kosmos.setSceneTransition(
+ ShowOverlay(overlay = Overlays.Bouncer, fromScene = Scenes.Gone)
+ )
assertEquals(listOf(false, true, false, true), inTransition)
- kosmos.setSceneTransition(Idle(Scenes.Bouncer))
+ kosmos.setSceneTransition(Idle(Scenes.Lockscreen, setOf(Overlays.Bouncer)))
assertEquals(listOf(false, true, false, true, false), inTransition)
}
@@ -713,6 +721,11 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {
TransitionStep(AOD, DOZING, 1f, FINISHED),
)
+ kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "reason")
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
+
assertThat(results)
.isEqualTo(
listOf(
@@ -724,6 +737,7 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {
assertThat(results).isEqualTo(listOf(false))
+ kosmos.sceneInteractor.changeScene(Scenes.Gone, "reason")
kosmos.setSceneTransition(Idle(Scenes.Gone))
assertThat(results).isEqualTo(listOf(false, true))
@@ -732,6 +746,7 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {
assertThat(results).isEqualTo(listOf(false, true))
+ kosmos.sceneInteractor.changeScene(Scenes.Lockscreen, "reason")
kosmos.setSceneTransition(Idle(Scenes.Lockscreen))
assertThat(results).isEqualTo(listOf(false, true, false))
@@ -740,6 +755,7 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {
assertThat(results).isEqualTo(listOf(false, true, false))
+ kosmos.sceneInteractor.changeScene(Scenes.Gone, "reason")
kosmos.setSceneTransition(Idle(Scenes.Gone))
assertThat(results).isEqualTo(listOf(false, true, false, true))
@@ -1042,13 +1058,23 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {
progress.emit(0.6f)
runCurrent()
- kosmos.setSceneTransition(Transition(Scenes.Gone, Scenes.Bouncer, progress = progress))
+ kosmos.setSceneTransition(
+ ShowOverlay(
+ overlay = Overlays.Bouncer,
+ fromScene = Scenes.Gone,
+ progress = progress,
+ )
+ )
progress.emit(0.1f)
runCurrent()
kosmos.setSceneTransition(
- Transition(Scenes.Bouncer, Scenes.Lockscreen, progress = progress)
+ HideOverlay(
+ overlay = Overlays.Bouncer,
+ toScene = Scenes.Lockscreen,
+ progress = progress,
+ )
)
progress.emit(0.3f)
@@ -1087,12 +1113,20 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {
kosmos.setSceneTransition(Idle(Scenes.Gone))
- kosmos.setSceneTransition(Transition(Scenes.Gone, Scenes.Bouncer, progress = progress))
+ kosmos.setSceneTransition(
+ ShowOverlay(
+ overlay = Overlays.Bouncer,
+ fromScene = Scenes.Gone,
+ progress = progress,
+ )
+ )
progress.emit(0.1f)
runCurrent()
- kosmos.setSceneTransition(Transition(Scenes.Bouncer, Scenes.Gone, progress = progress))
+ kosmos.setSceneTransition(
+ HideOverlay(overlay = Overlays.Bouncer, toScene = Scenes.Gone, progress = progress)
+ )
progress.emit(0.3f)
runCurrent()
@@ -1125,7 +1159,13 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {
progress1.emit(0.1f)
runCurrent()
- kosmos.setSceneTransition(Transition(Scenes.Gone, Scenes.Bouncer, progress = progress2))
+ kosmos.setSceneTransition(
+ ShowOverlay(
+ overlay = Overlays.Bouncer,
+ fromScene = Scenes.Gone,
+ progress = progress2,
+ )
+ )
progress2.emit(0.3f)
runCurrent()
@@ -1152,8 +1192,14 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {
val currentStatesMapped by
collectValues(underTest.transition(Edge.create(LOCKSCREEN, Scenes.Gone)))
+ kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "reason")
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
+
kosmos.setSceneTransition(Transition(Scenes.Gone, Scenes.Lockscreen))
val sendStep1 = TransitionStep(UNDEFINED, LOCKSCREEN, 0f, STARTED)
+ kosmos.sceneInteractor.changeScene(Scenes.Gone, "reason")
kosmos.setSceneTransition(Idle(Scenes.Gone))
val sendStep2 = TransitionStep(UNDEFINED, LOCKSCREEN, 0.6f, CANCELED)
sendSteps(sendStep1, sendStep2)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractorTest.kt
index b7c162b4d6eb..f0eedee48e57 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractorTest.kt
@@ -37,11 +37,13 @@ import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.data.model.asIterable
import com.android.systemui.scene.data.model.sceneStackOf
+import com.android.systemui.scene.data.repository.HideOverlay
import com.android.systemui.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.Transition
import com.android.systemui.scene.data.repository.setSceneTransition
import com.android.systemui.scene.domain.interactor.sceneBackInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.mock
@@ -250,12 +252,14 @@ class WindowManagerLockscreenVisibilityInteractorTest : SysuiTestCase() {
fun surfaceBehindVisibility_fromBouncerToGone_becomesTrue() =
testScope.runTest {
val isSurfaceBehindVisible by collectLastValue(underTest.value.surfaceBehindVisibility)
- val currentScene by collectLastValue(kosmos.sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(kosmos.sceneInteractor.currentOverlays)
// Before the transition, we start on Bouncer so the surface should start invisible.
- kosmos.setSceneTransition(ObservableTransitionState.Idle(Scenes.Bouncer))
- kosmos.sceneInteractor.changeScene(Scenes.Bouncer, "")
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ kosmos.setSceneTransition(
+ ObservableTransitionState.Idle(Scenes.Lockscreen, setOf(Overlays.Bouncer))
+ )
+ kosmos.sceneInteractor.showOverlay(Overlays.Bouncer, "")
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
assertThat(isSurfaceBehindVisible).isFalse()
// Unlocked with fingerprint.
@@ -267,44 +271,45 @@ class WindowManagerLockscreenVisibilityInteractorTest : SysuiTestCase() {
// the
// threshold.
kosmos.setSceneTransition(
- ObservableTransitionState.Transition(
- fromScene = Scenes.Bouncer,
+ ObservableTransitionState.Transition.hideOverlay(
+ overlay = Overlays.Bouncer,
toScene = Scenes.Gone,
- isInitiatedByUserInput = false,
- isUserInputOngoing = flowOf(false),
+ currentOverlays = flowOf(setOf(Overlays.Bouncer)),
progress =
flowOf(
FromPrimaryBouncerTransitionInteractor
.TO_GONE_SURFACE_BEHIND_VISIBLE_THRESHOLD
),
- currentScene = flowOf(Scenes.Bouncer),
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
)
)
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
assertThat(isSurfaceBehindVisible).isFalse()
// Once the transition passes the threshold, the surface should become visible.
kosmos.setSceneTransition(
- ObservableTransitionState.Transition(
- fromScene = Scenes.Bouncer,
+ ObservableTransitionState.Transition.hideOverlay(
+ overlay = Overlays.Bouncer,
toScene = Scenes.Gone,
- isInitiatedByUserInput = false,
- isUserInputOngoing = flowOf(false),
+ currentOverlays = flowOf(setOf(Overlays.Bouncer)),
progress =
flowOf(
FromPrimaryBouncerTransitionInteractor
.TO_GONE_SURFACE_BEHIND_VISIBLE_THRESHOLD + 0.01f
),
- currentScene = flowOf(Scenes.Gone),
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
)
)
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
assertThat(isSurfaceBehindVisible).isTrue()
// After the transition, settles on Gone. Surface behind should stay visible now.
kosmos.setSceneTransition(ObservableTransitionState.Idle(Scenes.Gone))
kosmos.sceneInteractor.changeScene(Scenes.Gone, "")
- assertThat(currentScene).isEqualTo(Scenes.Gone)
+ kosmos.sceneInteractor.hideOverlay(Overlays.Bouncer, "")
+ assertThat(currentOverlays).doesNotContain(Overlays.Bouncer)
assertThat(isSurfaceBehindVisible).isTrue()
}
@@ -1012,6 +1017,7 @@ class WindowManagerLockscreenVisibilityInteractorTest : SysuiTestCase() {
kosmos.setSceneTransition(Idle(Scenes.Lockscreen))
val currentScene by collectLastValue(kosmos.sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(kosmos.sceneInteractor.currentOverlays)
assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
val lockscreenVisibility by collectLastValue(underTest.value.lockscreenVisibility)
@@ -1038,12 +1044,16 @@ class WindowManagerLockscreenVisibilityInteractorTest : SysuiTestCase() {
assertThat(currentScene).isEqualTo(Scenes.Shade)
assertThat(lockscreenVisibility).isTrue()
- kosmos.setSceneTransition(Idle(Scenes.Bouncer))
- kosmos.sceneInteractor.changeScene(Scenes.Bouncer, "")
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ kosmos.setSceneTransition(Idle(Scenes.Lockscreen, setOf(Overlays.Bouncer)))
+ kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "")
+ kosmos.sceneInteractor.showOverlay(Overlays.Bouncer, "")
+ assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
assertThat(lockscreenVisibility).isTrue()
- kosmos.setSceneTransition(Transition(from = Scenes.Bouncer, to = Scenes.Gone))
+ kosmos.setSceneTransition(
+ HideOverlay(overlay = Overlays.Bouncer, toScene = Scenes.Gone)
+ )
assertThat(lockscreenVisibility).isTrue()
kosmos.setSceneTransition(Idle(Scenes.Gone))
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/scenetransition/LockscreenSceneTransitionInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/scenetransition/LockscreenSceneTransitionInteractorTest.kt
index 3cff0fc96af4..41ec065dc560 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/scenetransition/LockscreenSceneTransitionInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/scenetransition/LockscreenSceneTransitionInteractorTest.kt
@@ -1220,13 +1220,13 @@ class LockscreenSceneTransitionInteractorTest : SysuiTestCase() {
progress.value = 0.4f
sceneTransitions.value =
- ObservableTransitionState.Transition(
- Scenes.Lockscreen,
- Scenes.Bouncer,
- flowOf(Scenes.Lockscreen),
- progress,
- false,
- flowOf(false),
+ ObservableTransitionState.Transition.showOverlay(
+ overlay = Overlays.Bouncer,
+ fromScene = Scenes.Lockscreen,
+ currentOverlays = flowOf(setOf(Overlays.Bouncer)),
+ progress = progress,
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
)
assertTransition(
@@ -1342,7 +1342,7 @@ class LockscreenSceneTransitionInteractorTest : SysuiTestCase() {
sceneTransitions.value =
ObservableTransitionState.Transition(
Scenes.Gone,
- Scenes.Bouncer,
+ Scenes.Dream,
flowOf(Scenes.Lockscreen),
progress,
false,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModelTest.kt
index a31728ce5e18..91cb1ff266c9 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModelTest.kt
@@ -39,6 +39,7 @@ import com.android.systemui.keyguard.ui.transitions.blurConfig
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.data.repository.sceneContainerRepository
import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.shadeTestUtil
import com.android.systemui.testKosmos
@@ -125,14 +126,15 @@ class LockscreenToPrimaryBouncerTransitionViewModelTest(flags: FlagsParameteriza
kosmos.sceneContainerRepository.setTransitionState(transitionState)
transitionState.value =
- ObservableTransitionState.Transition(
+ ObservableTransitionState.Transition.showOverlay(
+ overlay = Overlays.Bouncer,
fromScene = Scenes.Lockscreen,
- toScene = Scenes.Bouncer,
- emptyFlow(),
- emptyFlow(),
- false,
- emptyFlow(),
+ currentOverlays = emptyFlow(),
+ progress = emptyFlow(),
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = emptyFlow(),
)
+
runCurrent()
// fade out
repository.sendTransitionStep(step(0f, TransitionState.STARTED))
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenUserActionsViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenUserActionsViewModelTest.kt
index f357d0c80822..f98ddd240fd0 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenUserActionsViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenUserActionsViewModelTest.kt
@@ -19,6 +19,7 @@ package com.android.systemui.keyguard.ui.viewmodel
import android.platform.test.annotations.EnableFlags
import android.testing.TestableLooper.RunWithLooper
import androidx.test.filters.SmallTest
+import com.android.compose.animation.scene.ContentKey
import com.android.compose.animation.scene.Edge
import com.android.compose.animation.scene.SceneKey
import com.android.compose.animation.scene.Swipe
@@ -135,11 +136,11 @@ class LockscreenUserActionsViewModelTest : SysuiTestCase() {
private fun expectedUpDestination(
canSwipeToEnter: Boolean,
isShadeTouchable: Boolean,
- ): SceneKey? {
+ ): ContentKey? {
return when {
!isShadeTouchable -> null
canSwipeToEnter -> Scenes.Gone
- else -> Scenes.Bouncer
+ else -> Overlays.Bouncer
}
}
}
@@ -215,15 +216,17 @@ class LockscreenUserActionsViewModelTest : SysuiTestCase() {
)
)
- val upScene by
- collectLastValue(
- (userActions?.get(Swipe.Up) as? UserActionResult.ChangeScene)?.toScene?.let {
- scene ->
- kosmos.sceneInteractor.resolveSceneFamily(scene)
- } ?: flowOf(null)
- )
+ val upContent =
+ userActions?.get(Swipe.Up)?.let { result ->
+ when (result) {
+ is UserActionResult.ChangeScene -> result.toScene
+ is UserActionResult.ShowOverlay -> result.overlay
+ is UserActionResult.HideOverlay -> result.overlay
+ is UserActionResult.ReplaceByOverlay -> result.overlay
+ }
+ }
- assertThat(upScene)
+ assertThat(upContent)
.isEqualTo(
expectedUpDestination(
canSwipeToEnter = canSwipeToEnter,
@@ -292,15 +295,17 @@ class LockscreenUserActionsViewModelTest : SysuiTestCase() {
}
}
- val upScene by
- collectLastValue(
- (userActions?.get(Swipe.Up) as? UserActionResult.ChangeScene)?.toScene?.let {
- scene ->
- kosmos.sceneInteractor.resolveSceneFamily(scene)
- } ?: flowOf(null)
- )
+ val upContent =
+ userActions?.get(Swipe.Up)?.let { result ->
+ when (result) {
+ is UserActionResult.ChangeScene -> result.toScene
+ is UserActionResult.ShowOverlay -> result.overlay
+ is UserActionResult.HideOverlay -> result.overlay
+ is UserActionResult.ReplaceByOverlay -> result.overlay
+ }
+ }
- assertThat(upScene)
+ assertThat(upContent)
.isEqualTo(
expectedUpDestination(
canSwipeToEnter = canSwipeToEnter,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterLegacyTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterLegacyTest.java
index f293614954e9..2db2199602b8 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterLegacyTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterLegacyTest.java
@@ -268,6 +268,10 @@ public class MediaOutputAdapterLegacyTest extends SysuiTestCase {
assertThat(mViewHolder.mSeekBar.getContentDescription()).isNotNull();
assertThat(mViewHolder.mContainerLayout.isFocusable()).isFalse();
+ assertThat(mViewHolder.mContainerLayout.getImportantForAccessibility()).isEqualTo(
+ View.IMPORTANT_FOR_ACCESSIBILITY_NO);
+ assertThat(mViewHolder.mTextContent.getImportantForAccessibility()).isEqualTo(
+ View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
}
@Test
@@ -511,6 +515,11 @@ public class MediaOutputAdapterLegacyTest extends SysuiTestCase {
assertThat(mViewHolder.mTitleText.getVisibility()).isEqualTo(View.VISIBLE);
assertThat(mViewHolder.mTitleText.getText().toString()).isEqualTo(TEST_DEVICE_NAME_2);
assertThat(mViewHolder.mSeekBar.getVisibility()).isEqualTo(View.GONE);
+ assertThat(mViewHolder.mContainerLayout.isFocusable()).isTrue();
+ assertThat(mViewHolder.mContainerLayout.getImportantForAccessibility()).isEqualTo(
+ View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+ assertThat(mViewHolder.mTextContent.getImportantForAccessibility()).isEqualTo(
+ View.IMPORTANT_FOR_ACCESSIBILITY_YES);
assertThat(mViewHolder.mProgressBar.getVisibility()).isEqualTo(View.GONE);
assertThat(mViewHolder.mCheckBox.getVisibility()).isEqualTo(View.GONE);
assertThat(mViewHolder.mSubTitleText.getVisibility()).isEqualTo(View.VISIBLE);
@@ -750,7 +759,7 @@ public class MediaOutputAdapterLegacyTest extends SysuiTestCase {
.onCreateViewHolder(new LinearLayout(mContext), 0);
mMediaOutputAdapter.onBindViewHolder(mViewHolder, 1);
- mViewHolder.mEndTouchArea.performClick();
+ mViewHolder.mCheckBox.performClick();
verify(mMediaSwitchingController).addDeviceToPlayMedia(mMediaDevice2);
}
@@ -894,7 +903,7 @@ public class MediaOutputAdapterLegacyTest extends SysuiTestCase {
.onCreateViewHolder(new LinearLayout(mContext), 0);
mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0);
- mViewHolder.mEndTouchArea.performClick();
+ mViewHolder.mCheckBox.performClick();
verify(mMediaSwitchingController).removeDeviceFromPlayMedia(mMediaDevice1);
}
@@ -1050,7 +1059,7 @@ public class MediaOutputAdapterLegacyTest extends SysuiTestCase {
new LinearLayout(mContext), MediaItem.MediaItemType.TYPE_DEVICE);
mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0);
- mViewHolder.mEndTouchArea.performClick();
+ mViewHolder.mEndClickIcon.performClick();
mViewHolder = (MediaOutputAdapterLegacy.MediaDeviceViewHolderLegacy) mMediaOutputAdapter
.onCreateViewHolder(
new LinearLayout(mContext), MediaItem.MediaItemType.TYPE_DEVICE);
@@ -1073,7 +1082,7 @@ public class MediaOutputAdapterLegacyTest extends SysuiTestCase {
new LinearLayout(mContext), MediaItem.MediaItemType.TYPE_DEVICE);
mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0);
- mViewHolder.mEndTouchArea.performClick();
+ mViewHolder.mEndClickIcon.performClick();
mViewHolder = (MediaOutputAdapterLegacy.MediaDeviceViewHolderLegacy) mMediaOutputAdapter
.onCreateViewHolder(
new LinearLayout(mContext), MediaItem.MediaItemType.TYPE_DEVICE);
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModelTest.kt
index b23cd5e5547f..917f3564a1bd 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModelTest.kt
@@ -103,20 +103,6 @@ class NotificationsShadeOverlayContentViewModelTest : SysuiTestCase() {
}
@Test
- fun bouncerShown_hidesShade() =
- testScope.runTest {
- val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
- lockDevice()
- sceneInteractor.showOverlay(Overlays.NotificationsShade, "test")
- assertThat(currentOverlays).contains(Overlays.NotificationsShade)
-
- sceneInteractor.changeScene(Scenes.Bouncer, "test")
- runCurrent()
-
- assertThat(currentOverlays).doesNotContain(Overlays.NotificationsShade)
- }
-
- @Test
fun shadeNotTouchable_hidesShade() =
testScope.runTest {
val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/CastTileTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/CastTileTest.java
index 31a627fe0667..765c5749cd4b 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/CastTileTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/CastTileTest.java
@@ -50,6 +50,8 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.QSHost;
import com.android.systemui.qs.QsEventLogger;
import com.android.systemui.qs.logging.QSLogger;
+import com.android.systemui.shade.domain.interactor.FakeShadeDialogContextInteractor;
+import com.android.systemui.shade.domain.interactor.ShadeDialogContextInteractor;
import com.android.systemui.statusbar.connectivity.IconState;
import com.android.systemui.statusbar.connectivity.NetworkController;
import com.android.systemui.statusbar.connectivity.SignalCallback;
@@ -107,6 +109,8 @@ public class CastTileTest extends SysuiTestCase {
private final FakeConnectivityRepository mConnectivityRepository =
new FakeConnectivityRepository();
private final FakeFeatureFlags mFeatureFlags = new FakeFeatureFlags();
+ private final ShadeDialogContextInteractor mShadeDialogContextInteractor =
+ new FakeShadeDialogContextInteractor(mContext);
private TestableLooper mTestableLooper;
private CastTile mCastTile;
@@ -535,7 +539,8 @@ public class CastTileTest extends SysuiTestCase {
mDialogTransitionAnimator,
mConnectivityRepository,
mJavaAdapter,
- mFeatureFlags
+ mFeatureFlags,
+ mShadeDialogContextInteractor
);
mCastTile.initialize();
@@ -578,7 +583,8 @@ public class CastTileTest extends SysuiTestCase {
mDialogTransitionAnimator,
mConnectivityRepository,
mJavaAdapter,
- mFeatureFlags
+ mFeatureFlags,
+ mShadeDialogContextInteractor
);
mCastTile.initialize();
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt
index bf5f9f4872f0..c69ebab7a170 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModelTest.kt
@@ -99,20 +99,6 @@ class QuickSettingsShadeOverlayContentViewModelTest : SysuiTestCase() {
}
@Test
- fun bouncerShown_hidesShade() =
- testScope.runTest {
- val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
- lockDevice()
- sceneInteractor.showOverlay(Overlays.QuickSettingsShade, "test")
- assertThat(currentOverlays).contains(Overlays.QuickSettingsShade)
-
- sceneInteractor.changeScene(Scenes.Bouncer, "test")
- runCurrent()
-
- assertThat(currentOverlays).doesNotContain(Overlays.QuickSettingsShade)
- }
-
- @Test
fun shadeNotTouchable_hidesShade() =
testScope.runTest {
val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
index c5fac08a4b35..eb630b49359d 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
@@ -22,6 +22,7 @@ import android.testing.TestableLooper.RunWithLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.ObservableTransitionState
+import com.android.compose.animation.scene.OverlayKey
import com.android.compose.animation.scene.SceneKey
import com.android.compose.animation.scene.Swipe
import com.android.compose.animation.scene.UserActionResult
@@ -34,7 +35,7 @@ import com.android.systemui.authentication.domain.interactor.authenticationInter
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
import com.android.systemui.bouncer.ui.viewmodel.PasswordBouncerViewModel
import com.android.systemui.bouncer.ui.viewmodel.PinBouncerViewModel
-import com.android.systemui.bouncer.ui.viewmodel.bouncerSceneContentViewModel
+import com.android.systemui.bouncer.ui.viewmodel.bouncerOverlayContentViewModel
import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
import com.android.systemui.flags.EnableSceneContainer
@@ -54,6 +55,7 @@ import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.se
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.domain.startable.sceneContainerStartable
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.fakeSceneDataSource
import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel
@@ -87,7 +89,7 @@ import org.junit.runner.RunWith
* Therefore, when adding or modifying test cases, consider whether what you're testing is better
* covered by a more granular unit test.
* * Please reuse the helper methods in this class (for example, [putDeviceToSleep] or
- * [emulateUserDrivenTransition]).
+ * [emulateUserDrivenSceneTransition]).
* * All tests start with the device locked and with a PIN auth method. The class offers useful
* methods like [setAuthMethod], [unlockDevice], [lockDevice], etc. to help you set up a starting
* state that makes more sense for your test case.
@@ -101,7 +103,7 @@ import org.junit.runner.RunWith
@EnableSceneContainer
class SceneFrameworkIntegrationTest : SysuiTestCase() {
private val kosmos = testKosmos()
- private var bouncerSceneJob: Job? = null
+ private var bouncerOverlayJob: Job? = null
@Before
fun setUp() =
@@ -125,7 +127,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
lockscreenUserActionsViewModel.activateIn(testScope)
shadeSceneContentViewModel.activateIn(testScope)
shadeUserActionsViewModel.activateIn(testScope)
- bouncerSceneContentViewModel.activateIn(testScope)
+ bouncerOverlayContentViewModel.activateIn(testScope)
sceneContainerViewModel.activateIn(testScope)
assertWithMessage("Initial scene key mismatch!")
@@ -141,27 +143,29 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
@Test
fun clickLockButtonAndEnterCorrectPin_unlocksDevice() =
kosmos.runTest {
- emulateUserDrivenTransition(Scenes.Bouncer)
+ emulateUserDrivenOverlayTransition(show = Overlays.Bouncer)
fakeSceneDataSource.pause()
enterPin()
emulatePendingTransitionProgress(expectedVisible = false)
assertCurrentScene(Scenes.Gone)
+ assertOverlaysEmpty()
}
@Test
fun swipeUpOnLockscreen_enterCorrectPin_unlocksDevice() =
kosmos.runTest {
val actions by collectLastValue(kosmos.lockscreenUserActionsViewModel.actions)
- val upDestinationSceneKey =
- (actions?.get(Swipe.Up) as? UserActionResult.ChangeScene)?.toScene
- assertThat(upDestinationSceneKey).isEqualTo(Scenes.Bouncer)
- emulateUserDrivenTransition(to = upDestinationSceneKey)
+ val upDestinationOverlayKey =
+ (actions?.get(Swipe.Up) as? UserActionResult.ShowOverlay)?.overlay
+ assertThat(upDestinationOverlayKey).isEqualTo(Overlays.Bouncer)
+ emulateUserDrivenOverlayTransition(show = upDestinationOverlayKey)
fakeSceneDataSource.pause()
enterPin()
emulatePendingTransitionProgress(expectedVisible = false)
assertCurrentScene(Scenes.Gone)
+ assertOverlaysEmpty()
}
@Test
@@ -173,7 +177,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
val upDestinationSceneKey =
(actions?.get(Swipe.Up) as? UserActionResult.ChangeScene)?.toScene
assertThat(upDestinationSceneKey).isEqualTo(Scenes.Gone)
- emulateUserDrivenTransition(to = upDestinationSceneKey)
+ emulateUserDrivenSceneTransition(to = upDestinationSceneKey)
}
@Test
@@ -184,13 +188,13 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
assertCurrentScene(Scenes.Lockscreen)
// Emulate a user swipe to the shade scene.
- emulateUserDrivenTransition(to = Scenes.Shade)
+ emulateUserDrivenSceneTransition(to = Scenes.Shade)
assertCurrentScene(Scenes.Shade)
val upDestinationSceneKey =
(actions?.get(Swipe.Up) as? UserActionResult.ChangeScene)?.toScene
assertThat(upDestinationSceneKey).isEqualTo(Scenes.Lockscreen)
- emulateUserDrivenTransition(to = Scenes.Lockscreen)
+ emulateUserDrivenSceneTransition(to = Scenes.Lockscreen)
}
@Test
@@ -205,17 +209,17 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
assertCurrentScene(Scenes.Lockscreen)
// Emulate a user swipe to dismiss the lockscreen.
- emulateUserDrivenTransition(to = Scenes.Gone)
+ emulateUserDrivenSceneTransition(to = Scenes.Gone)
assertCurrentScene(Scenes.Gone)
// Emulate a user swipe to the shade scene.
- emulateUserDrivenTransition(to = Scenes.Shade)
+ emulateUserDrivenSceneTransition(to = Scenes.Shade)
assertCurrentScene(Scenes.Shade)
val upDestinationSceneKey =
(actions?.get(Swipe.Up) as? UserActionResult.ChangeScene)?.toScene
assertThat(upDestinationSceneKey).isEqualTo(Scenes.Gone)
- emulateUserDrivenTransition(to = Scenes.Gone)
+ emulateUserDrivenSceneTransition(to = Scenes.Gone)
}
@Test
@@ -270,6 +274,8 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
wakeUpDevice()
assertCurrentScene(Scenes.Lockscreen)
+ // set UI state to match view-model
+ transitionState.value = ObservableTransitionState.Idle(Scenes.Lockscreen)
unlockDevice()
assertCurrentScene(Scenes.Gone)
}
@@ -302,10 +308,10 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
kosmos.runTest {
setAuthMethod(AuthenticationMethodModel.Password)
val actions by collectLastValue(lockscreenUserActionsViewModel.actions)
- val upDestinationSceneKey =
- (actions?.get(Swipe.Up) as? UserActionResult.ChangeScene)?.toScene
- assertThat(upDestinationSceneKey).isEqualTo(Scenes.Bouncer)
- emulateUserDrivenTransition(to = upDestinationSceneKey)
+ val upDestinationOverlayKey =
+ (actions?.get(Swipe.Up) as? UserActionResult.ShowOverlay)?.overlay
+ assertThat(upDestinationOverlayKey).isEqualTo(Overlays.Bouncer)
+ emulateUserDrivenOverlayTransition(show = upDestinationOverlayKey)
fakeSceneDataSource.pause()
dismissIme()
@@ -319,16 +325,16 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
kosmos.runTest {
setAuthMethod(AuthenticationMethodModel.Password)
val actions by collectLastValue(lockscreenUserActionsViewModel.actions)
- val upDestinationSceneKey =
- (actions?.get(Swipe.Up) as? UserActionResult.ChangeScene)?.toScene
- assertThat(upDestinationSceneKey).isEqualTo(Scenes.Bouncer)
- emulateUserDrivenTransition(to = upDestinationSceneKey)
+ val upDestinationOverlayKey =
+ (actions?.get(Swipe.Up) as? UserActionResult.ShowOverlay)?.overlay
+ assertThat(upDestinationOverlayKey).isEqualTo(Overlays.Bouncer)
+ emulateUserDrivenOverlayTransition(show = upDestinationOverlayKey)
- val bouncerActionButton by collectLastValue(bouncerSceneContentViewModel.actionButton)
+ val bouncerActionButton by collectLastValue(bouncerOverlayContentViewModel.actionButton)
assertWithMessage("Bouncer action button not visible")
.that(bouncerActionButton)
.isNotNull()
- kosmos.bouncerSceneContentViewModel.onActionButtonClicked(bouncerActionButton!!)
+ kosmos.bouncerOverlayContentViewModel.onActionButtonClicked(bouncerActionButton!!)
// TODO(b/369765704): Assert that an activity was started once we use ActivityStarter.
}
@@ -339,16 +345,16 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
setAuthMethod(AuthenticationMethodModel.Password)
startPhoneCall()
val actions by collectLastValue(lockscreenUserActionsViewModel.actions)
- val upDestinationSceneKey =
- (actions?.get(Swipe.Up) as? UserActionResult.ChangeScene)?.toScene
- assertThat(upDestinationSceneKey).isEqualTo(Scenes.Bouncer)
- emulateUserDrivenTransition(to = upDestinationSceneKey)
+ val upDestinationOverlayKey =
+ (actions?.get(Swipe.Up) as? UserActionResult.ShowOverlay)?.overlay
+ assertThat(upDestinationOverlayKey).isEqualTo(Overlays.Bouncer)
+ emulateUserDrivenOverlayTransition(show = upDestinationOverlayKey)
- val bouncerActionButton by collectLastValue(bouncerSceneContentViewModel.actionButton)
+ val bouncerActionButton by collectLastValue(bouncerOverlayContentViewModel.actionButton)
assertWithMessage("Bouncer action button not visible during call")
.that(bouncerActionButton)
.isNotNull()
- kosmos.bouncerSceneContentViewModel.onActionButtonClicked(bouncerActionButton!!)
+ kosmos.bouncerOverlayContentViewModel.onActionButtonClicked(bouncerActionButton!!)
verifyCurrent(mockTelecomManager).showInCallScreen(any())
}
@@ -358,7 +364,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
kosmos.runTest {
setAuthMethod(AuthenticationMethodModel.None)
introduceLockedSim()
- assertCurrentScene(Scenes.Bouncer)
+ assertCurrentOverlay(Overlays.Bouncer)
}
@Test
@@ -366,7 +372,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
kosmos.runTest {
fakeSceneDataSource.pause()
introduceLockedSim()
- emulatePendingTransitionProgress(expectedVisible = true)
+ emulatePendingTransitionProgress()
enterSimPin(
authMethodAfterSimUnlock = AuthenticationMethodModel.None,
enableLockscreen = false,
@@ -380,7 +386,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
kosmos.runTest {
fakeSceneDataSource.pause()
introduceLockedSim()
- emulatePendingTransitionProgress(expectedVisible = true)
+ emulatePendingTransitionProgress()
enterSimPin(authMethodAfterSimUnlock = AuthenticationMethodModel.Pin)
assertCurrentScene(Scenes.Lockscreen)
}
@@ -396,6 +402,18 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
.isEqualTo(expected)
}
+ private fun Kosmos.assertCurrentOverlay(expected: OverlayKey) {
+ assertWithMessage("Expected overlay missing!")
+ .that(currentValue(sceneInteractor.currentOverlays))
+ .contains(expected)
+ }
+
+ private fun Kosmos.assertOverlaysEmpty() {
+ assertWithMessage("Expected no overlays, but at least one was present")
+ .that(currentValue(sceneInteractor.currentOverlays))
+ .isEmpty()
+ }
+
/**
* Returns the [SceneKey] of the current scene as displayed in the UI.
*
@@ -439,9 +457,10 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
}
/**
- * Emulates a gradual transition to the currently pending scene that's sitting in the
- * [fakeSceneDataSource]. This emits a series of progress updates to the [transitionState] and
- * finishes by committing the pending scene as the current scene.
+ * Emulates a gradual transition to the currently pending scene and overlay that are sitting in
+ * the [fakeSceneDataSource]. This emits a series of progress updates to the [transitionState]
+ * and finishes by committing the pending scene as the current scene, and the pending overlay as
+ * the current overlay
*
* In order to use this, the [fakeSceneDataSource] must be paused before this method is called.
*/
@@ -450,49 +469,96 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
.that(fakeSceneDataSource.isPaused)
.isTrue()
- val to = fakeSceneDataSource.pendingScene ?: return
- val from = getCurrentSceneInUi()
+ val fromScene = getCurrentSceneInUi()
+ val toScene = fakeSceneDataSource.pendingScene ?: fromScene
+
+ val fromOverlays =
+ collectLastValue(currentValue(transitionState).currentOverlays()).invoke() ?: emptySet()
+ val toOverlays = fakeSceneDataSource.pendingOverlays ?: fromOverlays
- if (to == from) {
- return
+ val addedOverlays = toOverlays - fromOverlays
+ val removedOverlays = fromOverlays - toOverlays
+ check(
+ addedOverlays.size + removedOverlays.size < 2 &&
+ (addedOverlays.size <= 1 || removedOverlays.size <= 1)
+ ) {
+ "Detected multiple overlays being added/removed. Currently only testing single-overlay transitions."
}
- // Begin to transition.
- val progressFlow = MutableStateFlow(0f)
- transitionState.value =
- ObservableTransitionState.Transition(
- fromScene = getCurrentSceneInUi(),
- toScene = to,
- currentScene = flowOf(to),
- progress = progressFlow,
- isInitiatedByUserInput = false,
- isUserInputOngoing = flowOf(false),
- )
+ if (toScene != fromScene) {
+ // Begin scene transition.
+ val progressFlow = MutableStateFlow(0f)
+ transitionState.value =
+ ObservableTransitionState.Transition(
+ fromScene = getCurrentSceneInUi(),
+ toScene = toScene,
+ currentScene = flowOf(toScene),
+ progress = progressFlow,
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
+ )
- // Report progress of transition.
- while (currentValue(progressFlow) < 1f) {
- progressFlow.value += 0.2f
+ // Report progress of transition.
+ while (currentValue(progressFlow) < 1f) {
+ progressFlow.value += 0.2f
+ }
+
+ // End the transition and report the change.
+ transitionState.value = ObservableTransitionState.Idle(toScene)
}
- // End the transition and report the change.
- transitionState.value = ObservableTransitionState.Idle(to)
+ if (addedOverlays.isNotEmpty() || removedOverlays.isNotEmpty()) {
+ // Begin overlay transition.
+ val progressFlow = MutableStateFlow(0f)
+ transitionState.value =
+ if (addedOverlays.size == 1) {
+ ObservableTransitionState.Transition.showOverlay(
+ overlay = addedOverlays.first(),
+ fromScene = toScene,
+ currentOverlays = flowOf(addedOverlays),
+ progress = progressFlow,
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
+ )
+ } else {
+ ObservableTransitionState.Transition.hideOverlay(
+ overlay = removedOverlays.first(),
+ toScene = toScene,
+ currentOverlays = flowOf(removedOverlays),
+ progress = progressFlow,
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
+ )
+ }
+
+ // Report progress of transition.
+ while (currentValue(progressFlow) < 1f) {
+ progressFlow.value += 0.2f
+ }
+
+ // End the transition and report the change, taking any scene transition into account.
+ transitionState.value = ObservableTransitionState.Idle(toScene, toOverlays)
+ }
fakeSceneDataSource.unpause(force = true)
- assertWithMessage("Visibility mismatch after scene transition from $from to $to!")
+ assertWithMessage(
+ "Visibility mismatch after transition from $fromScene to $toScene and $fromOverlays to $toOverlays!"
+ )
.that(currentValue { sceneContainerViewModel.isVisible })
.isEqualTo(expectedVisible)
- assertThat(currentValue(sceneContainerViewModel.currentScene)).isEqualTo(to)
+ assertThat(currentValue(sceneContainerViewModel.currentScene)).isEqualTo(toScene)
+ assertThat(currentValue(sceneInteractor.currentOverlays)).isEqualTo(toOverlays)
- bouncerSceneJob =
- if (to == Scenes.Bouncer) {
+ bouncerOverlayJob =
+ if (Overlays.Bouncer in addedOverlays) {
testScope.backgroundScope.launch {
- bouncerSceneContentViewModel.authMethodViewModel.collect {
+ bouncerOverlayContentViewModel.authMethodViewModel.collect {
// Do nothing. Need this to turn this otherwise cold flow, hot.
}
}
} else {
- bouncerSceneJob?.cancel()
+ bouncerOverlayJob?.cancel()
null
}
}
@@ -506,7 +572,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
*
* @param to The scene to transition to.
*/
- private fun Kosmos.emulateUserDrivenTransition(to: SceneKey?) {
+ private fun Kosmos.emulateUserDrivenSceneTransition(to: SceneKey?) {
checkNotNull(to)
fakeSceneDataSource.pause()
@@ -515,6 +581,22 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
emulatePendingTransitionProgress(expectedVisible = to != Scenes.Gone)
}
+ private fun Kosmos.emulateUserDrivenOverlayTransition(
+ show: OverlayKey? = null,
+ hide: OverlayKey? = null,
+ ) {
+ fakeSceneDataSource.pause()
+ if (show != null && hide != null) {
+ sceneInteractor.replaceOverlay(from = show, to = hide, "reason")
+ } else if (show != null) {
+ sceneInteractor.showOverlay(overlay = show, "reason")
+ } else if (hide != null) {
+ sceneInteractor.hideOverlay(overlay = hide, "reason")
+ }
+
+ emulatePendingTransitionProgress()
+ }
+
/**
* Locks the device.
*
@@ -548,7 +630,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
.that(currentValue(deviceEntryInteractor.isUnlocked))
.isFalse()
- emulateUserDrivenTransition(Scenes.Bouncer)
+ emulateUserDrivenOverlayTransition(show = Overlays.Bouncer)
fakeSceneDataSource.pause()
enterPin()
@@ -558,17 +640,18 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
/**
* Enters the correct PIN in the bouncer UI.
*
- * Asserts that the current scene is [Scenes.Bouncer] and that the current bouncer UI is a PIN
- * before proceeding.
+ * Asserts that [Overlays.Bouncer] is showing and that the current bouncer UI is a PIN before
+ * proceeding.
*
* Does not assert that the device is locked or unlocked.
*/
private fun Kosmos.enterPin() {
- assertWithMessage("Cannot enter PIN when not on the Bouncer scene!")
- .that(getCurrentSceneInUi())
- .isEqualTo(Scenes.Bouncer)
+ val currentOverlays by collectLastValue(currentValue(transitionState).currentOverlays())
+ assertWithMessage("Cannot enter PIN when Bouncer not showing!")
+ .that(currentOverlays)
+ .contains(Overlays.Bouncer)
val authMethodViewModel by
- collectLastValue(bouncerSceneContentViewModel.authMethodViewModel)
+ collectLastValue(bouncerOverlayContentViewModel.authMethodViewModel)
assertWithMessage("Cannot enter PIN when not using a PIN authentication method!")
.that(authMethodViewModel)
.isInstanceOf(PinBouncerViewModel::class.java)
@@ -583,8 +666,8 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
/**
* Enters the correct PIN in the sim bouncer UI.
*
- * Asserts that the current scene is [Scenes.Bouncer] and that the current bouncer UI is a PIN
- * before proceeding.
+ * Asserts that [Overlays.Bouncer] is showing and that the current bouncer UI is a PIN before
+ * proceeding.
*
* Does not assert that the device is locked or unlocked.
*/
@@ -592,11 +675,12 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
authMethodAfterSimUnlock: AuthenticationMethodModel = AuthenticationMethodModel.None,
enableLockscreen: Boolean = true,
) {
- assertWithMessage("Cannot enter PIN when not on the Bouncer scene!")
- .that(getCurrentSceneInUi())
- .isEqualTo(Scenes.Bouncer)
+ val currentOverlays by collectLastValue(currentValue(transitionState).currentOverlays())
+ assertWithMessage("Cannot enter PIN when Bouncer not showing!")
+ .that(currentOverlays)
+ .contains(Overlays.Bouncer)
val authMethodViewModel by
- collectLastValue(bouncerSceneContentViewModel.authMethodViewModel)
+ collectLastValue(bouncerOverlayContentViewModel.authMethodViewModel)
assertWithMessage("Cannot enter PIN when not using a PIN authentication method!")
.that(authMethodViewModel)
.isInstanceOf(PinBouncerViewModel::class.java)
@@ -643,7 +727,7 @@ class SceneFrameworkIntegrationTest : SysuiTestCase() {
/** Emulates the dismissal of the IME (soft keyboard). */
private fun Kosmos.dismissIme() {
- (currentValue(bouncerSceneContentViewModel.authMethodViewModel)
+ (currentValue(bouncerOverlayContentViewModel.authMethodViewModel)
as? PasswordBouncerViewModel)
?.let { it.onImeDismissed() }
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneBackInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneBackInteractorTest.kt
index 9cc6c0fa801a..034585331af6 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneBackInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneBackInteractorTest.kt
@@ -53,7 +53,7 @@ class SceneBackInteractorTest : SysuiTestCase() {
@Test
@EnableSceneContainer
- fun navigateToQs_thenBouncer_thenBack_whileLocked() =
+ fun navigateToQs_thenBack_whileLocked() =
testScope.runTest {
sceneContainerStartable.start()
@@ -61,8 +61,6 @@ class SceneBackInteractorTest : SysuiTestCase() {
RouteNode(Scenes.Lockscreen, null),
RouteNode(Scenes.Shade, Scenes.Lockscreen),
RouteNode(Scenes.QuickSettings, Scenes.Shade),
- RouteNode(Scenes.Bouncer, Scenes.QuickSettings),
- RouteNode(Scenes.QuickSettings, Scenes.Shade),
RouteNode(Scenes.Shade, Scenes.Lockscreen),
RouteNode(Scenes.Lockscreen, null),
)
@@ -70,57 +68,39 @@ class SceneBackInteractorTest : SysuiTestCase() {
@Test
@EnableSceneContainer
- fun navigateToQs_thenBouncer_thenUnlock() =
+ fun navigateToQs_thenUnlock() =
testScope.runTest {
sceneContainerStartable.start()
assertRoute(
RouteNode(Scenes.Lockscreen, null),
RouteNode(Scenes.Shade, Scenes.Lockscreen),
- RouteNode(Scenes.QuickSettings, Scenes.Shade),
- RouteNode(Scenes.Bouncer, Scenes.QuickSettings, unlockDevice = true),
+ RouteNode(Scenes.QuickSettings, Scenes.Shade, unlockDevice = true),
RouteNode(Scenes.Gone, null),
)
}
@Test
@EnableSceneContainer
- fun navigateToQs_skippingShade_thenBouncer_thenBack_whileLocked() =
+ fun navigateToQs_skippingShade_thenBack_whileLocked() =
testScope.runTest {
sceneContainerStartable.start()
assertRoute(
RouteNode(Scenes.Lockscreen, null),
RouteNode(Scenes.QuickSettings, Scenes.Lockscreen),
- RouteNode(Scenes.Bouncer, Scenes.QuickSettings),
- RouteNode(Scenes.QuickSettings, Scenes.Lockscreen),
RouteNode(Scenes.Lockscreen, null),
)
}
@Test
@EnableSceneContainer
- fun navigateToBouncer_thenBack_whileLocked() =
+ fun navigateToQs_skippingShade_thenBack_thenShade_whileLocked() =
testScope.runTest {
sceneContainerStartable.start()
assertRoute(
RouteNode(Scenes.Lockscreen, null),
- RouteNode(Scenes.Bouncer, Scenes.Lockscreen),
- RouteNode(Scenes.Lockscreen, null),
- )
- }
-
- @Test
- @EnableSceneContainer
- fun navigateToQs_skippingShade_thenBouncer_thenBack_thenShade_whileLocked() =
- testScope.runTest {
- sceneContainerStartable.start()
-
- assertRoute(
- RouteNode(Scenes.Lockscreen, null),
- RouteNode(Scenes.QuickSettings, Scenes.Lockscreen),
- RouteNode(Scenes.Bouncer, Scenes.QuickSettings),
RouteNode(Scenes.QuickSettings, Scenes.Lockscreen),
RouteNode(Scenes.Lockscreen, null),
RouteNode(Scenes.Shade, Scenes.Lockscreen),
@@ -178,9 +158,8 @@ class SceneBackInteractorTest : SysuiTestCase() {
testScope.runTest {
underTest.onSceneChange(from = Scenes.Lockscreen, to = Scenes.Shade)
underTest.onSceneChange(from = Scenes.Shade, to = Scenes.QuickSettings)
- underTest.onSceneChange(from = Scenes.QuickSettings, to = Scenes.Bouncer)
assertThat(underTest.backStack.value.asIterable().toList())
- .isEqualTo(listOf(Scenes.QuickSettings, Scenes.Shade, Scenes.Lockscreen))
+ .isEqualTo(listOf(Scenes.Shade, Scenes.Lockscreen))
underTest.updateBackStack { stack ->
// Reverse the stack, just to see if it can be done:
@@ -188,7 +167,7 @@ class SceneBackInteractorTest : SysuiTestCase() {
}
assertThat(underTest.backStack.value.asIterable().toList())
- .isEqualTo(listOf(Scenes.Lockscreen, Scenes.Shade, Scenes.QuickSettings))
+ .isEqualTo(listOf(Scenes.Lockscreen, Scenes.Shade))
}
private suspend fun TestScope.assertRoute(vararg route: RouteNode) {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
index 23a0f6224fb7..559e363d8937 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
@@ -799,4 +799,88 @@ class SceneInteractorTest : SysuiTestCase() {
verify(processor, never()).onSceneAboutToChange(any(), any())
assertThat(fakeSceneDataSource.freezeAndAnimateToCurrentStateCallCount).isEqualTo(0)
}
+
+ @Test
+ fun topmostContent_sceneChange_noOverlays() =
+ kosmos.runTest {
+ val topmostContent by collectLastValue(underTest.topmostContent)
+
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
+
+ underTest.snapToScene(Scenes.Lockscreen, "reason")
+
+ assertThat(topmostContent).isEqualTo(Scenes.Lockscreen)
+
+ underTest.changeScene(Scenes.Gone, "reason")
+
+ assertThat(topmostContent).isEqualTo(Scenes.Gone)
+ }
+
+ @Test
+ fun topmostContent_sceneChange_withOverlay() =
+ kosmos.runTest {
+ kosmos.enableDualShade()
+ runCurrent()
+
+ val topmostContent by collectLastValue(underTest.topmostContent)
+
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
+
+ underTest.snapToScene(Scenes.Lockscreen, "reason")
+ underTest.showOverlay(Overlays.NotificationsShade, "reason")
+
+ assertThat(topmostContent).isEqualTo(Overlays.NotificationsShade)
+
+ underTest.changeScene(Scenes.Gone, "reason")
+
+ assertThat(topmostContent).isEqualTo(Overlays.NotificationsShade)
+ }
+
+ @Test
+ fun topmostContent_overlayChange_higherZOrder() =
+ kosmos.runTest {
+ kosmos.enableDualShade()
+ runCurrent()
+
+ val topmostContent by collectLastValue(underTest.topmostContent)
+
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
+
+ underTest.snapToScene(Scenes.Lockscreen, "reason")
+ underTest.showOverlay(Overlays.NotificationsShade, "reason")
+
+ assertThat(topmostContent).isEqualTo(Overlays.NotificationsShade)
+
+ underTest.showOverlay(Overlays.QuickSettingsShade, "reason")
+
+ assertThat(topmostContent).isEqualTo(Overlays.QuickSettingsShade)
+ }
+
+ @Test
+ fun topmostContent_overlayChange_lowerZOrder() =
+ kosmos.runTest {
+ kosmos.enableDualShade()
+ runCurrent()
+
+ val topmostContent by collectLastValue(underTest.topmostContent)
+
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
+
+ underTest.snapToScene(Scenes.Lockscreen, "reason")
+ underTest.showOverlay(Overlays.QuickSettingsShade, "reason")
+
+ assertThat(topmostContent).isEqualTo(Overlays.QuickSettingsShade)
+
+ underTest.showOverlay(Overlays.NotificationsShade, "reason")
+
+ assertThat(topmostContent).isEqualTo(Overlays.QuickSettingsShade)
+ }
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt
index ae77ac4cc327..9adf24f32c0c 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt
@@ -475,17 +475,18 @@ class SceneContainerStartableTest : SysuiTestCase() {
@Test
fun switchFromBouncerToGoneWhenDeviceUnlocked() =
testScope.runTest {
- val currentSceneKey by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
prepareState(
authenticationMethod = AuthenticationMethodModel.Pin,
isDeviceUnlocked = false,
- initialSceneKey = Scenes.Bouncer,
+ initialSceneKey = Scenes.Lockscreen,
+ initialOverlays = setOf(Overlays.Bouncer),
)
- assertThat(currentSceneKey).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
underTest.start()
updateFingerprintAuthStatus(isSuccess = true)
- assertThat(currentSceneKey).isEqualTo(Scenes.Gone)
+ assertThat(currentOverlays).doesNotContain(Overlays.Bouncer)
}
@Test
@@ -548,6 +549,7 @@ class SceneContainerStartableTest : SysuiTestCase() {
fun switchFromBouncerToQuickSettingsWhenDeviceUnlocked_whenLeaveOpenShade() =
testScope.runTest {
val currentSceneKey by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val backStack by collectLastValue(sceneBackInteractor.backStack)
kosmos.sysuiStatusBarStateController.leaveOpen = true // leave shade open
@@ -566,14 +568,16 @@ class SceneContainerStartableTest : SysuiTestCase() {
runCurrent()
assertThat(currentSceneKey).isEqualTo(Scenes.QuickSettings)
- sceneInteractor.changeScene(Scenes.Bouncer, "switching to bouncer for test")
- transitionState.value = ObservableTransitionState.Idle(Scenes.Bouncer)
+ sceneInteractor.showOverlay(Overlays.Bouncer, "showing bouncer for test")
+ transitionState.value =
+ ObservableTransitionState.Idle(Scenes.QuickSettings, setOf(Overlays.Bouncer))
runCurrent()
- assertThat(currentSceneKey).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
assertThat(backStack?.asIterable()?.last()).isEqualTo(Scenes.Lockscreen)
updateFingerprintAuthStatus(isSuccess = true)
assertThat(currentSceneKey).isEqualTo(Scenes.QuickSettings)
+ assertThat(currentOverlays).doesNotContain(Overlays.Bouncer)
assertThat(backStack?.asIterable()?.last()).isEqualTo(Scenes.Gone)
}
@@ -581,6 +585,7 @@ class SceneContainerStartableTest : SysuiTestCase() {
fun switchFromBouncerToGoneWhenDeviceUnlocked_whenDoNotLeaveOpenShade() =
testScope.runTest {
val currentSceneKey by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
kosmos.sysuiStatusBarStateController.leaveOpen = false // don't leave shade open
val transitionState =
@@ -598,13 +603,15 @@ class SceneContainerStartableTest : SysuiTestCase() {
runCurrent()
assertThat(currentSceneKey).isEqualTo(Scenes.QuickSettings)
- sceneInteractor.changeScene(Scenes.Bouncer, "switching to bouncer for test")
- transitionState.value = ObservableTransitionState.Idle(Scenes.Bouncer)
+ sceneInteractor.showOverlay(Overlays.Bouncer, "showing bouncer for test")
+ transitionState.value =
+ ObservableTransitionState.Idle(Scenes.QuickSettings, setOf(Overlays.Bouncer))
runCurrent()
- assertThat(currentSceneKey).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
updateFingerprintAuthStatus(isSuccess = true)
assertThat(currentSceneKey).isEqualTo(Scenes.Gone)
+ assertThat(currentOverlays).doesNotContain(Overlays.Bouncer)
}
@Test
@@ -664,14 +671,21 @@ class SceneContainerStartableTest : SysuiTestCase() {
fun switchToGoneWhenDeviceIsUnlockedAndUserIsOnBouncerWithBypassDisabled() =
testScope.runTest {
val currentSceneKey by collectLastValue(sceneInteractor.currentScene)
- prepareState(isBypassEnabled = false, initialSceneKey = Scenes.Bouncer)
- assertThat(currentSceneKey).isEqualTo(Scenes.Bouncer)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
+ prepareState(
+ isBypassEnabled = false,
+ initialSceneKey = Scenes.Lockscreen,
+ initialOverlays = setOf(Overlays.Bouncer),
+ )
+ assertThat(currentSceneKey).isEqualTo(Scenes.Lockscreen)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
underTest.start()
// Authenticate using a passive auth method like face auth while bypass is disabled.
faceAuthRepository.isAuthenticated.value = true
assertThat(currentSceneKey).isEqualTo(Scenes.Gone)
+ assertThat(currentOverlays).doesNotContain(Overlays.Bouncer)
}
@Test
@@ -1192,14 +1206,7 @@ class SceneContainerStartableTest : SysuiTestCase() {
runCurrent()
clearInvocations(sysUiState)
- listOf(
- Scenes.Gone,
- Scenes.Lockscreen,
- Scenes.Bouncer,
- Scenes.Gone,
- Scenes.Shade,
- Scenes.QuickSettings,
- )
+ listOf(Scenes.Gone, Scenes.Lockscreen, Scenes.Gone, Scenes.Shade, Scenes.QuickSettings)
.forEachIndexed { index, sceneKey ->
if (sceneKey == Scenes.Gone) {
updateFingerprintAuthStatus(isSuccess = true)
@@ -1385,19 +1392,13 @@ class SceneContainerStartableTest : SysuiTestCase() {
verify(falsingCollector, never()).onSuccessfulUnlock()
// Move around scenes without unlocking.
- listOf(
- Scenes.Shade,
- Scenes.QuickSettings,
- Scenes.Shade,
- Scenes.Lockscreen,
- Scenes.Bouncer,
- )
- .forEach { sceneKey ->
- sceneInteractor.changeScene(sceneKey, "reason")
- transitionStateFlow.value = ObservableTransitionState.Idle(sceneKey)
- runCurrent()
- verify(falsingCollector, never()).onSuccessfulUnlock()
- }
+ listOf(Scenes.Shade, Scenes.QuickSettings, Scenes.Shade, Scenes.Lockscreen).forEach {
+ sceneKey ->
+ sceneInteractor.changeScene(sceneKey, "reason")
+ transitionStateFlow.value = ObservableTransitionState.Idle(sceneKey)
+ runCurrent()
+ verify(falsingCollector, never()).onSuccessfulUnlock()
+ }
// Changing to the Gone scene should report a successful unlock.
kosmos.authenticationInteractor.authenticate(FakeAuthenticationRepository.DEFAULT_PIN)
@@ -1444,19 +1445,13 @@ class SceneContainerStartableTest : SysuiTestCase() {
verify(falsingCollector, times(1)).onSuccessfulUnlock()
// Move around scenes without unlocking.
- listOf(
- Scenes.Shade,
- Scenes.QuickSettings,
- Scenes.Shade,
- Scenes.Lockscreen,
- Scenes.Bouncer,
- )
- .forEach { sceneKey ->
- sceneInteractor.changeScene(sceneKey, "reason")
- transitionStateFlow.value = ObservableTransitionState.Idle(sceneKey)
- runCurrent()
- verify(falsingCollector, times(1)).onSuccessfulUnlock()
- }
+ listOf(Scenes.Shade, Scenes.QuickSettings, Scenes.Shade, Scenes.Lockscreen).forEach {
+ sceneKey ->
+ sceneInteractor.changeScene(sceneKey, "reason")
+ transitionStateFlow.value = ObservableTransitionState.Idle(sceneKey)
+ runCurrent()
+ verify(falsingCollector, times(1)).onSuccessfulUnlock()
+ }
kosmos.authenticationInteractor.authenticate(FakeAuthenticationRepository.DEFAULT_PIN)
runCurrent()
@@ -1565,13 +1560,13 @@ class SceneContainerStartableTest : SysuiTestCase() {
runCurrent()
verify(falsingCollector).onBouncerHidden()
- sceneInteractor.changeScene(Scenes.Bouncer, "reason")
+ sceneInteractor.showOverlay(Overlays.Bouncer, "reason")
runCurrent()
verify(falsingCollector).onBouncerShown()
updateFingerprintAuthStatus(isSuccess = true)
runCurrent()
- sceneInteractor.changeScene(Scenes.Gone, "reason")
+ sceneInteractor.hideOverlay(Overlays.Bouncer, "reason")
runCurrent()
verify(falsingCollector, times(2)).onBouncerHidden()
}
@@ -1579,7 +1574,7 @@ class SceneContainerStartableTest : SysuiTestCase() {
@Test
fun switchesToBouncer_whenSimBecomesLocked() =
testScope.runTest {
- val currentSceneKey by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
prepareState(
initialSceneKey = Scenes.Lockscreen,
@@ -1592,17 +1587,18 @@ class SceneContainerStartableTest : SysuiTestCase() {
kosmos.fakeMobileConnectionsRepository.isAnySimSecure.value = true
runCurrent()
- assertThat(currentSceneKey).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
}
@Test
fun switchesToLockscreen_whenSimBecomesUnlocked() =
testScope.runTest {
kosmos.fakeMobileConnectionsRepository.isAnySimSecure.value = true
- val currentSceneKey by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
prepareState(
- initialSceneKey = Scenes.Bouncer,
+ initialSceneKey = Scenes.Lockscreen,
+ initialOverlays = setOf(Overlays.Bouncer),
authenticationMethod = AuthenticationMethodModel.Pin,
isDeviceUnlocked = false,
)
@@ -1611,7 +1607,7 @@ class SceneContainerStartableTest : SysuiTestCase() {
kosmos.fakeMobileConnectionsRepository.isAnySimSecure.value = false
runCurrent()
- assertThat(currentSceneKey).isEqualTo(Scenes.Lockscreen)
+ assertThat(currentOverlays).doesNotContain(Overlays.Bouncer)
}
@Test
@@ -1700,7 +1696,7 @@ class SceneContainerStartableTest : SysuiTestCase() {
assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
verify(notificationShadeWindowController).setKeyguardShowing(true)
- emulateSceneTransition(transitionStateFlow, Scenes.Bouncer)
+ emulateOverlayTransition(transitionStateFlow, Overlays.Bouncer)
verify(notificationShadeWindowController, times(1)).setKeyguardShowing(true)
emulateSceneTransition(transitionStateFlow, Scenes.Lockscreen)
@@ -1748,9 +1744,9 @@ class SceneContainerStartableTest : SysuiTestCase() {
verify(centralSurfaces).setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true)
clearInvocations(centralSurfaces)
- emulateSceneTransition(
+ emulateOverlayTransition(
transitionStateFlow = transitionStateFlow,
- toScene = Scenes.Bouncer,
+ toOverlay = Overlays.Bouncer,
verifyBeforeTransition = {
verify(centralSurfaces, never()).setInteracting(anyInt(), anyBoolean())
},
@@ -1839,9 +1835,9 @@ class SceneContainerStartableTest : SysuiTestCase() {
verify(centralSurfaces, never()).setInteracting(anyInt(), anyBoolean())
clearInvocations(centralSurfaces)
- emulateSceneTransition(
+ emulateOverlayTransition(
transitionStateFlow = transitionStateFlow,
- toScene = Scenes.Bouncer,
+ toOverlay = Overlays.Bouncer,
verifyBeforeTransition = {
verify(centralSurfaces, never()).setInteracting(anyInt(), anyBoolean())
},
@@ -1926,9 +1922,9 @@ class SceneContainerStartableTest : SysuiTestCase() {
assertThat(currentDesiredOverlays).isEmpty()
clearInvocations(centralSurfaces)
- emulateSceneTransition(
+ emulateOverlayTransition(
transitionStateFlow = transitionStateFlow,
- toScene = Scenes.Bouncer,
+ toOverlay = Overlays.Bouncer,
verifyBeforeTransition = {
verify(centralSurfaces, never()).setInteracting(anyInt(), anyBoolean())
},
@@ -2019,9 +2015,9 @@ class SceneContainerStartableTest : SysuiTestCase() {
assertThat(currentDesiredOverlays).isEmpty()
clearInvocations(centralSurfaces)
- emulateSceneTransition(
+ emulateOverlayTransition(
transitionStateFlow = transitionStateFlow,
- toScene = Scenes.Bouncer,
+ toOverlay = Overlays.Bouncer,
verifyBeforeTransition = {
verify(centralSurfaces, never()).setInteracting(anyInt(), anyBoolean())
},
@@ -2098,32 +2094,42 @@ class SceneContainerStartableTest : SysuiTestCase() {
fun respondToFalsingDetections() =
testScope.runTest {
val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val transitionStateFlow = prepareState()
underTest.start()
runCurrent()
- emulateSceneTransition(transitionStateFlow, toScene = Scenes.Bouncer)
- assertThat(currentScene).isNotEqualTo(Scenes.Lockscreen)
+ emulateOverlayTransition(
+ transitionStateFlow = transitionStateFlow,
+ toOverlay = Overlays.Bouncer,
+ )
+ assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
kosmos.falsingManager.sendFalsingBelief()
+ runCurrent()
assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
+ assertThat(currentOverlays).isEmpty()
}
@Test
fun handleBouncerOverscroll() =
testScope.runTest {
- val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val transitionStateFlow = prepareState()
underTest.start()
runCurrent()
- emulateSceneTransition(transitionStateFlow, toScene = Scenes.Bouncer)
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ emulateOverlayTransition(
+ transitionStateFlow = transitionStateFlow,
+ toOverlay = Overlays.Bouncer,
+ )
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
transitionStateFlow.value =
- ObservableTransitionState.Transition(
- fromScene = Scenes.Bouncer,
+ ObservableTransitionState.Transition.hideOverlay(
+ overlay = Overlays.Bouncer,
toScene = Scenes.Lockscreen,
- currentScene = flowOf(Scenes.Bouncer),
+ currentOverlays = flowOf(setOf(Overlays.Bouncer)),
progress = flowOf(-0.4f),
isInitiatedByUserInput = true,
isUserInputOngoing = flowOf(true),
@@ -2137,16 +2143,17 @@ class SceneContainerStartableTest : SysuiTestCase() {
fun switchToLockscreen_whenShadeBecomesNotTouchable() =
testScope.runTest {
val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val isShadeTouchable by collectLastValue(kosmos.shadeInteractor.isShadeTouchable)
val transitionStateFlow = prepareState()
underTest.start()
assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
// Flung to bouncer, 90% of the way there:
transitionStateFlow.value =
- ObservableTransitionState.Transition(
+ ObservableTransitionState.Transition.showOverlay(
+ overlay = Overlays.Bouncer,
fromScene = Scenes.Lockscreen,
- toScene = Scenes.Bouncer,
- currentScene = flowOf(Scenes.Bouncer),
+ currentOverlays = flowOf(setOf(Overlays.Bouncer)),
progress = flowOf(0.9f),
isInitiatedByUserInput = true,
isUserInputOngoing = flowOf(false),
@@ -2159,22 +2166,27 @@ class SceneContainerStartableTest : SysuiTestCase() {
assertThat(isShadeTouchable).isFalse()
assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
+ assertThat(currentOverlays).doesNotContain(Overlays.Bouncer)
}
@Test
fun switchToGone_extendUnlock() =
testScope.runTest {
val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
prepareState(
- initialSceneKey = Scenes.Bouncer,
+ initialSceneKey = Scenes.Lockscreen,
+ initialOverlays = setOf(Overlays.Bouncer),
authenticationMethod = AuthenticationMethodModel.Pin,
)
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
underTest.start()
fakeTrustRepository.setCurrentUserTrusted(true)
assertThat(currentScene).isEqualTo(Scenes.Gone)
+ assertThat(currentOverlays).doesNotContain(Overlays.Bouncer)
assertThat(uiEventLoggerFake[0].eventId)
.isEqualTo(BouncerUiEvent.BOUNCER_DISMISS_EXTENDED_ACCESS.id)
assertThat(uiEventLoggerFake.numLogs()).isEqualTo(1)
@@ -2285,12 +2297,15 @@ class SceneContainerStartableTest : SysuiTestCase() {
fun notifyKeyguardDismissCallbacks_whenUnlockingFromBouncer_onDismissSucceeded() =
testScope.runTest {
val currentSceneKey by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
prepareState(
authenticationMethod = AuthenticationMethodModel.Pin,
isDeviceUnlocked = false,
- initialSceneKey = Scenes.Bouncer,
+ initialSceneKey = Scenes.Lockscreen,
+ initialOverlays = setOf(Overlays.Bouncer),
)
- assertThat(currentSceneKey).isEqualTo(Scenes.Bouncer)
+ assertThat(currentSceneKey).isEqualTo(Scenes.Lockscreen)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
underTest.start()
// run all pending dismiss succeeded/cancelled calls from setup:
@@ -2311,7 +2326,7 @@ class SceneContainerStartableTest : SysuiTestCase() {
fun notifyKeyguardDismissCallbacks_whenLeavingBouncer_onDismissCancelled() =
testScope.runTest {
val isUnlocked by collectLastValue(kosmos.deviceEntryInteractor.isUnlocked)
- val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
prepareState()
underTest.start()
runCurrent()
@@ -2323,13 +2338,13 @@ class SceneContainerStartableTest : SysuiTestCase() {
kosmos.dismissCallbackRegistry.addCallback(dismissCallback)
// Switch to bouncer:
- sceneInteractor.changeScene(Scenes.Bouncer, "")
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ sceneInteractor.showOverlay(Overlays.Bouncer, "")
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
runCurrent()
// Return to lockscreen when isUnlocked=false:
- sceneInteractor.changeScene(Scenes.Lockscreen, "")
- assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
+ sceneInteractor.hideOverlay(Overlays.Bouncer, "")
+ assertThat(currentOverlays).doesNotContain(Overlays.Bouncer)
assertThat(isUnlocked).isFalse()
runCurrent()
kosmos.fakeExecutor.runAllReady()
@@ -2844,6 +2859,7 @@ class SceneContainerStartableTest : SysuiTestCase() {
isDeviceUnlocked: Boolean = false,
isBypassEnabled: Boolean = false,
initialSceneKey: SceneKey? = null,
+ initialOverlays: Set<OverlayKey> = emptySet(),
authenticationMethod: AuthenticationMethodModel? = null,
isLockscreenEnabled: Boolean = true,
startsAwake: Boolean = true,
@@ -2870,7 +2886,7 @@ class SceneContainerStartableTest : SysuiTestCase() {
runCurrent()
val transitionStateFlow =
MutableStateFlow<ObservableTransitionState>(
- ObservableTransitionState.Idle(Scenes.Lockscreen)
+ ObservableTransitionState.Idle(Scenes.Lockscreen, initialOverlays)
)
sceneInteractor.setTransitionState(transitionStateFlow)
initialSceneKey?.let {
@@ -2881,9 +2897,12 @@ class SceneContainerStartableTest : SysuiTestCase() {
runCurrent()
}
- transitionStateFlow.value = ObservableTransitionState.Idle(it)
+ transitionStateFlow.value = ObservableTransitionState.Idle(it, initialOverlays)
sceneInteractor.changeScene(it, "prepareState, initialSceneKey isn't null")
}
+ for (overlay in initialOverlays) {
+ sceneInteractor.showOverlay(overlay, "prepareState, initialOverlays isn't empty")
+ }
if (startsAwake) {
powerInteractor.setAwakeForTest()
} else {
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/ScrimStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/ScrimStartableTest.kt
index 572bc4dc4247..46f497054ab9 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/ScrimStartableTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/ScrimStartableTest.kt
@@ -18,6 +18,7 @@ package com.android.systemui.scene.domain.startable
import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.ObservableTransitionState
+import com.android.compose.animation.scene.OverlayKey
import com.android.compose.animation.scene.SceneKey
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
@@ -33,6 +34,7 @@ import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticati
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.data.repository.setSceneTransition
import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.settings.brightness.domain.interactor.brightnessMirrorShowingInteractor
import com.android.systemui.statusbar.domain.interactor.keyguardOcclusionInteractor
@@ -90,34 +92,28 @@ class ScrimStartableTest : SysuiTestCase() {
TestSpec(
id = 2,
expectedState = ScrimState.BOUNCER,
- Preconditions(
- isOnKeyguard = true,
- isCurrentSceneBouncer = true,
- ),
+ Preconditions(isOnKeyguard = true, isIdleOnBouncer = true),
),
TestSpec(
id = 3,
expectedState = ScrimState.BOUNCER_SCRIMMED,
Preconditions(
isOnKeyguard = true,
- isCurrentSceneBouncer = true,
+ isIdleOnBouncer = true,
isBouncerScrimmingNeeded = true,
),
),
TestSpec(
id = 4,
expectedState = ScrimState.BRIGHTNESS_MIRROR,
- Preconditions(
- isOnKeyguard = true,
- isBrightnessMirrorVisible = true,
- ),
+ Preconditions(isOnKeyguard = true, isBrightnessMirrorVisible = true),
),
TestSpec(
id = 5,
expectedState = ScrimState.BRIGHTNESS_MIRROR,
Preconditions(
isOnKeyguard = true,
- isCurrentSceneBouncer = true,
+ isIdleOnBouncer = true,
isBiometricWakeAndUnlock = true,
isBrightnessMirrorVisible = true,
),
@@ -125,42 +121,27 @@ class ScrimStartableTest : SysuiTestCase() {
TestSpec(
id = 6,
expectedState = ScrimState.SHADE_LOCKED,
- Preconditions(
- isOnKeyguard = true,
- isCurrentSceneShade = true,
- ),
+ Preconditions(isOnKeyguard = true, isCurrentSceneShade = true),
),
TestSpec(
id = 7,
expectedState = ScrimState.PULSING,
- Preconditions(
- isOnKeyguard = true,
- isDozing = true,
- isPulsing = true,
- ),
+ Preconditions(isOnKeyguard = true, isDozing = true, isPulsing = true),
),
TestSpec(
id = 8,
expectedState = ScrimState.OFF,
- Preconditions(
- isOnKeyguard = true,
- hasPendingScreenOffCallback = true,
- ),
+ Preconditions(isOnKeyguard = true, hasPendingScreenOffCallback = true),
),
TestSpec(
id = 9,
expectedState = ScrimState.AOD,
- Preconditions(
- isOnKeyguard = true,
- isDozing = true,
- ),
+ Preconditions(isOnKeyguard = true, isDozing = true),
),
TestSpec(
id = 10,
expectedState = ScrimState.GLANCEABLE_HUB,
- Preconditions(
- isIdleOnCommunal = true,
- ),
+ Preconditions(isIdleOnCommunal = true),
),
TestSpec(
id = 11,
@@ -170,39 +151,23 @@ class ScrimStartableTest : SysuiTestCase() {
TestSpec(
id = 12,
expectedState = ScrimState.UNLOCKED,
- Preconditions(
- isDeviceEntered = true,
- ),
+ Preconditions(isDeviceEntered = true),
),
TestSpec(
id = 13,
expectedState = ScrimState.UNLOCKED,
- Preconditions(
- isOnKeyguard = true,
- isBiometricWakeAndUnlock = true,
- ),
- ),
- TestSpec(
- id = 14,
- expectedState = ScrimState.KEYGUARD,
- Preconditions(),
+ Preconditions(isOnKeyguard = true, isBiometricWakeAndUnlock = true),
),
+ TestSpec(id = 14, expectedState = ScrimState.KEYGUARD, Preconditions()),
TestSpec(
id = 15,
expectedState = ScrimState.DREAMING,
- Preconditions(
- isOnKeyguard = true,
- isOccluded = true,
- isDreaming = true,
- ),
+ Preconditions(isOnKeyguard = true, isOccluded = true, isDreaming = true),
),
TestSpec(
id = 16,
expectedState = ScrimState.UNLOCKED,
- Preconditions(
- isOnKeyguard = true,
- isOccluded = true,
- ),
+ Preconditions(isOnKeyguard = true, isOccluded = true),
),
)
}
@@ -253,9 +218,7 @@ class ScrimStartableTest : SysuiTestCase() {
}
/** Sets up the state to match what's specified in the given [preconditions]. */
- private fun TestScope.setUpWith(
- preconditions: Preconditions,
- ) {
+ private fun TestScope.setUpWith(preconditions: Preconditions) {
kosmos.fakeKeyguardBouncerRepository.setAlternateVisible(
preconditions.isAlternateBouncerVisible
)
@@ -272,17 +235,12 @@ class ScrimStartableTest : SysuiTestCase() {
when {
preconditions.isTransitioningToShade ->
- whenTransitioning(
- from = Scenes.Lockscreen,
- to = Scenes.Shade,
- )
+ whenTransitioning(from = Scenes.Lockscreen, to = Scenes.Shade)
preconditions.isTransitioningAwayFromKeyguard ->
- whenTransitioning(
- from = Scenes.Lockscreen,
- to = Scenes.Gone,
- )
+ whenTransitioning(from = Scenes.Lockscreen, to = Scenes.Gone)
preconditions.isCurrentSceneShade -> whenIdle(on = Scenes.Shade)
- preconditions.isCurrentSceneBouncer -> whenIdle(on = Scenes.Bouncer)
+ preconditions.isIdleOnBouncer ->
+ whenIdle(on = Scenes.Lockscreen, overlays = setOf(Overlays.Bouncer))
preconditions.isIdleOnCommunal -> whenIdle(on = Scenes.Communal)
}
@@ -323,9 +281,12 @@ class ScrimStartableTest : SysuiTestCase() {
}
/** Sets up an idle state on the given [on] scene. */
- private fun whenIdle(on: SceneKey) {
- kosmos.setSceneTransition(ObservableTransitionState.Idle(on))
+ private fun whenIdle(on: SceneKey, overlays: Set<OverlayKey> = emptySet()) {
+ kosmos.setSceneTransition(ObservableTransitionState.Idle(on, overlays))
kosmos.sceneInteractor.changeScene(on, "")
+ for (overlay in overlays) {
+ kosmos.sceneInteractor.showOverlay(overlay, "")
+ }
}
/** Sets up a transitioning state between the [given] and [to] scenes. */
@@ -351,7 +312,7 @@ class ScrimStartableTest : SysuiTestCase() {
/** Whether any non-shade nor QS scene is transitioning to a shade or QS scene. */
val isTransitioningToShade: Boolean = false,
val isOccluded: Boolean = false,
- val isCurrentSceneBouncer: Boolean = false,
+ val isIdleOnBouncer: Boolean = false,
val isBiometricWakeAndUnlock: Boolean = false,
/** Whether there's an active transition from lockscreen or bouncer to gone. */
val isTransitioningAwayFromKeyguard: Boolean = false,
@@ -388,7 +349,7 @@ class ScrimStartableTest : SysuiTestCase() {
assertWithMessage(
"isCurrentSceneBouncer cannot be true without isOnKeyguard also being true"
)
- .that(!isCurrentSceneBouncer || isOnKeyguard)
+ .that(!isIdleOnBouncer || isOnKeyguard)
.isTrue()
assertWithMessage(
@@ -400,13 +361,13 @@ class ScrimStartableTest : SysuiTestCase() {
assertWithMessage(
"isCurrentSceneBouncer cannot be true at the same time as isCurrentSceneShade"
)
- .that(!isCurrentSceneBouncer || !isCurrentSceneShade)
+ .that(!isIdleOnBouncer || !isCurrentSceneShade)
.isTrue()
assertWithMessage(
"isCurrentSceneBouncer cannot be true at the same time as isIdleOnCommunal"
)
- .that(!isCurrentSceneBouncer || !isIdleOnCommunal)
+ .that(!isIdleOnBouncer || !isIdleOnCommunal)
.isTrue()
assertWithMessage(
@@ -422,7 +383,7 @@ class ScrimStartableTest : SysuiTestCase() {
assertWithMessage(
"isDeviceEntered cannot be true at the same time as isCurrentSceneBouncer"
)
- .that(!isDeviceEntered || !isCurrentSceneBouncer)
+ .that(!isDeviceEntered || !isIdleOnBouncer)
.isTrue()
assertWithMessage(
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/StatusBarStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/StatusBarStartableTest.kt
index 99146d8b1267..eebbc843206b 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/StatusBarStartableTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/StatusBarStartableTest.kt
@@ -21,6 +21,7 @@ import android.provider.DeviceConfig
import android.view.WindowManagerPolicyConstants
import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.ObservableTransitionState
+import com.android.compose.animation.scene.OverlayKey
import com.android.compose.animation.scene.SceneKey
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags
import com.android.internal.statusbar.statusBarService
@@ -40,6 +41,7 @@ import com.android.systemui.power.shared.model.WakeSleepReason
import com.android.systemui.power.shared.model.WakefulnessState
import com.android.systemui.scene.data.repository.setSceneTransition
import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.statusbar.domain.interactor.keyguardOcclusionInteractor
import com.android.systemui.testKosmos
@@ -246,16 +248,14 @@ class StatusBarStartableTest : SysuiTestCase() {
}
/** Sets up the state to match what's specified in the given [preconditions]. */
- private fun TestScope.setUpWith(
- preconditions: Preconditions,
- ) {
+ private fun TestScope.setUpWith(preconditions: Preconditions) {
if (!preconditions.isKeyguardShowing) {
kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
SuccessFingerprintAuthenticationStatus(0, true)
)
}
if (preconditions.isForceHideHomeAndRecents) {
- whenIdle(Scenes.Bouncer)
+ whenIdle(Scenes.Lockscreen, setOf(Overlays.Bouncer))
} else if (preconditions.isKeyguardShowing) {
whenIdle(Scenes.Lockscreen)
} else {
@@ -308,9 +308,12 @@ class StatusBarStartableTest : SysuiTestCase() {
}
/** Sets up an idle state on the given [on] scene. */
- private fun whenIdle(on: SceneKey) {
- kosmos.setSceneTransition(ObservableTransitionState.Idle(on))
+ private fun whenIdle(on: SceneKey, overlays: Set<OverlayKey> = emptySet()) {
+ kosmos.setSceneTransition(ObservableTransitionState.Idle(on, overlays))
kosmos.sceneInteractor.changeScene(on, "")
+ for (overlay in overlays) {
+ kosmos.sceneInteractor.showOverlay(overlay, "")
+ }
}
data class Preconditions(
@@ -350,11 +353,7 @@ class StatusBarStartableTest : SysuiTestCase() {
}
}
- data class TestSpec(
- val id: Int,
- val expectedFlags: Int,
- val preconditions: Preconditions,
- ) {
+ data class TestSpec(val id: Int, val expectedFlags: Int, val preconditions: Preconditions) {
override fun toString(): String {
return "id=$id, expected=$expectedFlags, preconditions=$preconditions"
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/shared/model/SceneDataSourceDelegatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/shared/model/SceneDataSourceDelegatorTest.kt
index 2720c5722376..c9dab3479e49 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/shared/model/SceneDataSourceDelegatorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/shared/model/SceneDataSourceDelegatorTest.kt
@@ -55,9 +55,9 @@ class SceneDataSourceDelegatorTest : SysuiTestCase() {
testScope.runTest {
val currentScene by collectLastValue(underTest.currentScene)
underTest.setDelegate(null)
- assertThat(currentScene).isNotEqualTo(Scenes.Bouncer)
+ assertThat(currentScene).isNotEqualTo(Scenes.Gone)
- underTest.changeScene(toScene = Scenes.Bouncer)
+ underTest.changeScene(toScene = Scenes.Gone)
assertThat(currentScene).isEqualTo(initialSceneKey)
}
@@ -73,11 +73,11 @@ class SceneDataSourceDelegatorTest : SysuiTestCase() {
fun currentScene_withDelegate_changesScenes() =
testScope.runTest {
val currentScene by collectLastValue(underTest.currentScene)
- assertThat(currentScene).isNotEqualTo(Scenes.Bouncer)
+ assertThat(currentScene).isNotEqualTo(Scenes.Gone)
- underTest.changeScene(toScene = Scenes.Bouncer)
+ underTest.changeScene(toScene = Scenes.Gone)
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentScene).isEqualTo(Scenes.Gone)
}
@Test
@@ -85,8 +85,8 @@ class SceneDataSourceDelegatorTest : SysuiTestCase() {
testScope.runTest {
val currentScene by collectLastValue(underTest.currentScene)
- fakeSceneDataSource.changeScene(toScene = Scenes.Bouncer)
+ fakeSceneDataSource.changeScene(toScene = Scenes.Gone)
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentScene).isEqualTo(Scenes.Gone)
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/view/SceneJankMonitorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/view/SceneJankMonitorTest.kt
index 984f8fd13cde..9b00e217466c 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/view/SceneJankMonitorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/view/SceneJankMonitorTest.kt
@@ -31,6 +31,7 @@ import com.android.systemui.kosmos.runCurrent
import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
import com.android.systemui.lifecycle.activateIn
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
@@ -158,22 +159,22 @@ class SceneJankMonitorTest : SysuiTestCase() {
underTest.onTransitionStart(
view = mock(),
from = Scenes.Lockscreen,
- to = Scenes.Bouncer,
+ to = Overlays.Bouncer,
cuj = null,
)
verifyCujCounts(beginAppearCount = 1)
- underTest.onTransitionEnd(from = Scenes.Lockscreen, to = Scenes.Bouncer, cuj = null)
+ underTest.onTransitionEnd(from = Scenes.Lockscreen, to = Overlays.Bouncer, cuj = null)
verifyCujCounts(beginAppearCount = 1, endAppearCount = 1)
// Bouncer disappear CUJ but it doesn't log because the device isn't unlocked.
underTest.onTransitionStart(
view = mock(),
- from = Scenes.Bouncer,
+ from = Overlays.Bouncer,
to = Scenes.Lockscreen,
cuj = null,
)
verifyCujCounts(beginAppearCount = 1, endAppearCount = 1)
- underTest.onTransitionEnd(from = Scenes.Bouncer, to = Scenes.Lockscreen, cuj = null)
+ underTest.onTransitionEnd(from = Overlays.Bouncer, to = Scenes.Lockscreen, cuj = null)
verifyCujCounts(beginAppearCount = 1, endAppearCount = 1)
if (!testUnlockedDisappearance) {
@@ -190,12 +191,12 @@ class SceneJankMonitorTest : SysuiTestCase() {
// Bouncer disappear CUJ and it doeslog because the device is unlocked.
underTest.onTransitionStart(
view = mock(),
- from = Scenes.Bouncer,
+ from = Overlays.Bouncer,
to = Scenes.Gone,
cuj = null,
)
verifyCujCounts(beginAppearCount = 1, endAppearCount = 1, beginDisappearCount = 1)
- underTest.onTransitionEnd(from = Scenes.Bouncer, to = Scenes.Gone, cuj = null)
+ underTest.onTransitionEnd(from = Overlays.Bouncer, to = Scenes.Gone, cuj = null)
verifyCujCounts(
beginAppearCount = 1,
endAppearCount = 1,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerHapticsViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerHapticsViewModelTest.kt
index 7330b517ba67..f04f0a3577d8 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerHapticsViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerHapticsViewModelTest.kt
@@ -164,7 +164,7 @@ class SceneContainerHapticsViewModelTest : SysuiTestCase() {
kosmos.enableDualShade()
// GIVEN an invalid scene transition to play haptics
val invalidTransition =
- createTransitionState(from = Scenes.Bouncer, to = Overlays.NotificationsShade)
+ createTransitionState(from = Scenes.QuickSettings, to = Scenes.Gone)
// WHEN the transition occurs
sceneInteractor.setTransitionState(MutableStateFlow(invalidTransition))
@@ -199,7 +199,7 @@ class SceneContainerHapticsViewModelTest : SysuiTestCase() {
kosmos.enableDualShade()
// GIVEN an invalid scene transition to play haptics
val invalidTransition =
- createTransitionState(from = Scenes.Bouncer, to = Overlays.NotificationsShade)
+ createTransitionState(from = Scenes.QuickSettings, to = Scenes.Gone)
// WHEN the transition occurs
sceneInteractor.setTransitionState(MutableStateFlow(invalidTransition))
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/PanelExpansionInteractorImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/PanelExpansionInteractorImplTest.kt
index 1859e250c6ad..d7b8aff97376 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/PanelExpansionInteractorImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/PanelExpansionInteractorImplTest.kt
@@ -78,7 +78,7 @@ class PanelExpansionInteractorImplTest : SysuiTestCase() {
changeScene(Scenes.Lockscreen) { assertThat(panelExpansion).isEqualTo(1f) }
assertThat(panelExpansion).isEqualTo(1f)
- changeScene(Scenes.Bouncer) { assertThat(panelExpansion).isEqualTo(1f) }
+ showOverlay(Overlays.Bouncer) { assertThat(panelExpansion).isEqualTo(1f) }
assertThat(panelExpansion).isEqualTo(1f)
changeScene(Scenes.Shade) { assertThat(panelExpansion).isEqualTo(1f) }
@@ -133,7 +133,7 @@ class PanelExpansionInteractorImplTest : SysuiTestCase() {
changeScene(Scenes.Lockscreen) { assertThat(panelExpansion).isEqualTo(1f) }
assertThat(panelExpansion).isEqualTo(1f)
- changeScene(Scenes.Bouncer) { assertThat(panelExpansion).isEqualTo(1f) }
+ showOverlay(Overlays.Bouncer) { assertThat(panelExpansion).isEqualTo(1f) }
assertThat(panelExpansion).isEqualTo(1f)
showOverlay(Overlays.NotificationsShade) { assertThat(panelExpansion).isEqualTo(1f) }
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/NotificationShadeWindowModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/NotificationShadeWindowModelTest.kt
index 2038adcfc21f..d5537a611f13 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/NotificationShadeWindowModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/NotificationShadeWindowModelTest.kt
@@ -32,6 +32,7 @@ import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
@@ -125,7 +126,7 @@ class NotificationShadeWindowModelTest : SysuiTestCase() {
to = KeyguardState.DREAMING,
value = 1f,
transitionState = TransitionState.FINISHED,
- ),
+ )
)
assertThat(isKeyguardOccluded).isTrue()
@@ -154,7 +155,7 @@ class NotificationShadeWindowModelTest : SysuiTestCase() {
to = KeyguardState.OCCLUDED,
value = 1f,
transitionState = TransitionState.FINISHED,
- ),
+ )
)
assertThat(isKeyguardOccluded).isTrue()
}
@@ -173,7 +174,8 @@ class NotificationShadeWindowModelTest : SysuiTestCase() {
runCurrent()
assertThat(bouncerShowing).isFalse()
- transitionState.value = ObservableTransitionState.Idle(Scenes.Bouncer)
+ transitionState.value =
+ ObservableTransitionState.Idle(Scenes.Lockscreen, setOf(Overlays.Bouncer))
runCurrent()
assertThat(bouncerShowing).isTrue()
}
@@ -204,7 +206,7 @@ class NotificationShadeWindowModelTest : SysuiTestCase() {
val transitionState =
MutableStateFlow<ObservableTransitionState>(
- ObservableTransitionState.Idle(Scenes.Bouncer)
+ ObservableTransitionState.Idle(Scenes.Lockscreen, setOf(Overlays.Bouncer))
)
kosmos.sceneInteractor.setTransitionState(transitionState)
runCurrent()
@@ -219,7 +221,8 @@ class NotificationShadeWindowModelTest : SysuiTestCase() {
AuthenticationMethodModel.Password
)
// go back to bouncer
- transitionState.value = ObservableTransitionState.Idle(Scenes.Bouncer)
+ transitionState.value =
+ ObservableTransitionState.Idle(Scenes.Lockscreen, setOf(Overlays.Bouncer))
runCurrent()
assertThat(bouncerRequiresIme).isTrue()
}
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 83361dad9ff0..c10fd5e18fc5 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt
@@ -19,6 +19,7 @@ package com.android.systemui.statusbar
import android.os.IBinder
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
+import android.platform.test.annotations.RequiresFlagsDisabled
import android.testing.TestableLooper.RunWithLooper
import android.view.Choreographer
import android.view.View
@@ -34,7 +35,6 @@ import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.res.R
import com.android.systemui.shade.ShadeExpansionChangeEvent
-import com.android.systemui.shared.Flags as SharedFlags
import com.android.systemui.statusbar.phone.BiometricUnlockController
import com.android.systemui.statusbar.phone.DozeParameters
import com.android.systemui.statusbar.phone.ScrimController
@@ -44,11 +44,10 @@ import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController
import com.android.systemui.testKosmos
import com.android.systemui.util.WallpaperController
import com.android.systemui.util.mockito.eq
+import com.android.systemui.wallpapers.domain.interactor.WallpaperInteractor
import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor
import com.android.wm.shell.appzoomout.AppZoomOut
import com.google.common.truth.Truth.assertThat
-import java.util.Optional
-import java.util.function.Consumer
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -69,6 +68,8 @@ import org.mockito.Mockito.reset
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.junit.MockitoJUnit
+import java.util.Optional
+import java.util.function.Consumer
@RunWith(AndroidJUnit4::class)
@RunWithLooper
@@ -76,6 +77,7 @@ 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
@@ -84,6 +86,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
@Mock private lateinit var keyguardInteractor: KeyguardInteractor
@Mock private lateinit var choreographer: Choreographer
@Mock private lateinit var wallpaperController: WallpaperController
+ @Mock private lateinit var wallpaperInteractor: WallpaperInteractor
@Mock private lateinit var notificationShadeWindowController: NotificationShadeWindowController
@Mock private lateinit var dumpManager: DumpManager
@Mock private lateinit var appZoomOutOptional: Optional<AppZoomOut>
@@ -128,12 +131,14 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
keyguardInteractor,
choreographer,
wallpaperController,
+ wallpaperInteractor,
notificationShadeWindowController,
dozeParameters,
context,
ResourcesSplitShadeStateController(),
windowRootViewBlurInteractor,
appZoomOutOptional,
+ applicationScope,
dumpManager,
configurationController,
)
@@ -310,19 +315,21 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
}
@Test
- @DisableFlags(SharedFlags.FLAG_AMBIENT_AOD)
- fun onDozeAmountChanged_appliesBlur() {
+ fun onDozeAmountChanged_doesNotApplyBlurWithAmbientAod() {
+ notificationShadeDepthController.wallpaperSupportsAmbientMode = false
+
statusBarStateListener.onDozeAmountChanged(1f, 1f)
notificationShadeDepthController.updateBlurCallback.doFrame(0)
- verify(blurUtils).applyBlur(any(), eq(maxBlur), eq(false))
+ verify(blurUtils).applyBlur(any(), eq(0), eq(false))
}
@Test
- @EnableFlags(SharedFlags.FLAG_AMBIENT_AOD)
- fun onDozeAmountChanged_doesNotApplyBlurWithAmbientAod() {
+ fun onDozeAmountChanged_appliesBlurWithAmbientAod() {
+ notificationShadeDepthController.wallpaperSupportsAmbientMode = true
+
statusBarStateListener.onDozeAmountChanged(1f, 1f)
notificationShadeDepthController.updateBlurCallback.doFrame(0)
- verify(blurUtils).applyBlur(any(), eq(0), eq(false))
+ verify(blurUtils).applyBlur(any(), eq(maxBlur), eq(false))
}
@Test
@@ -353,6 +360,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
}
@Test
+ @RequiresFlagsDisabled(Flags.FLAG_NOTIFICATION_SHADE_BLUR)
fun updateBlurCallback_setsOpaque_whenScrim() {
scrimVisibilityCaptor.value.accept(ScrimController.OPAQUE)
notificationShadeDepthController.updateBlurCallback.doFrame(0)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt
index 7a982a30981f..6a222c619332 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt
@@ -253,6 +253,7 @@ class StatusBarStateControllerImplTest(flags: FlagsParameterization) : SysuiTest
underTest.addCallback(listener)
val currentScene by collectLastValue(sceneInteractor.currentScene)
+ val currentOverlays by collectLastValue(sceneInteractor.currentOverlays)
val deviceUnlockStatus by
collectLastValue(kosmos.deviceUnlockedInteractor.deviceUnlockStatus)
@@ -269,9 +270,9 @@ class StatusBarStateControllerImplTest(flags: FlagsParameterization) : SysuiTest
// Call start to begin hydrating based on the scene framework:
underTest.start()
- sceneInteractor.changeScene(toScene = Scenes.Bouncer, loggingReason = "reason")
+ sceneInteractor.showOverlay(overlay = Overlays.Bouncer, loggingReason = "reason")
runCurrent()
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
assertThat(statusBarState).isEqualTo(StatusBarState.KEYGUARD)
sceneInteractor.changeScene(toScene = Scenes.Shade, loggingReason = "reason")
@@ -373,13 +374,12 @@ class StatusBarStateControllerImplTest(flags: FlagsParameterization) : SysuiTest
// Call start to begin hydrating based on the scene framework:
underTest.start()
- sceneInteractor.changeScene(Scenes.Bouncer, loggingReason = "reason")
+ sceneInteractor.showOverlay(Overlays.Bouncer, loggingReason = "reason")
runCurrent()
- assertThat(currentScene).isEqualTo(Scenes.Bouncer)
- assertThat(currentOverlays).isEmpty()
+ assertThat(currentOverlays).contains(Overlays.Bouncer)
assertThat(statusBarState).isEqualTo(StatusBarState.KEYGUARD)
- sceneInteractor.changeScene(Scenes.Lockscreen, loggingReason = "reason")
+ sceneInteractor.hideOverlay(Overlays.Bouncer, loggingReason = "reason")
runCurrent()
sceneInteractor.showOverlay(Overlays.NotificationsShade, loggingReason = "reason")
@@ -507,6 +507,11 @@ class StatusBarStateControllerImplTest(flags: FlagsParameterization) : SysuiTest
testScope.runTest {
underTest.start()
underTest.setLeaveOpenOnKeyguardHide(true)
+ kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "")
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
+ runCurrent()
keyguardTransitionRepository.sendTransitionSteps(
from = KeyguardState.AOD,
@@ -515,6 +520,7 @@ class StatusBarStateControllerImplTest(flags: FlagsParameterization) : SysuiTest
)
assertThat(underTest.leaveOpenOnKeyguardHide()).isEqualTo(true)
+ kosmos.sceneInteractor.changeScene(Scenes.Gone, "")
kosmos.setTransition(
sceneTransition = Idle(Scenes.Gone),
stateTransition =
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/ui/viewmodel/OngoingActivityChipsViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/ui/viewmodel/OngoingActivityChipsViewModelTest.kt
index 626dcd5b0864..1b5b0d6ff897 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/ui/viewmodel/OngoingActivityChipsViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/chips/ui/viewmodel/OngoingActivityChipsViewModelTest.kt
@@ -22,15 +22,18 @@ import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.graphics.drawable.BitmapDrawable
import android.platform.test.annotations.DisableFlags
+import android.platform.test.annotations.EnableFlags
import android.view.View
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.Expandable
import com.android.systemui.common.shared.model.Icon
-import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.collectLastValue
+import com.android.systemui.kosmos.runTest
import com.android.systemui.kosmos.testScope
+import com.android.systemui.kosmos.useUnconfinedTestDispatcher
import com.android.systemui.mediaprojection.data.model.MediaProjectionState
import com.android.systemui.mediaprojection.data.repository.fakeMediaProjectionRepository
import com.android.systemui.mediaprojection.taskswitcher.FakeActivityTaskManager.Companion.createTask
@@ -48,16 +51,13 @@ import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.statusbar.phone.mockSystemUIDialogFactory
import com.android.systemui.statusbar.phone.ongoingcall.StatusBarChipsModernization
-import com.android.systemui.statusbar.phone.ongoingcall.data.repository.ongoingCallRepository
-import com.android.systemui.statusbar.phone.ongoingcall.shared.model.OngoingCallModel
-import com.android.systemui.statusbar.phone.ongoingcall.shared.model.inCallModel
+import com.android.systemui.statusbar.phone.ongoingcall.shared.model.OngoingCallTestHelper.addOngoingCallState
+import com.android.systemui.statusbar.phone.ongoingcall.shared.model.OngoingCallTestHelper.removeOngoingCallState
import com.android.systemui.testKosmos
import com.android.systemui.util.time.fakeSystemClock
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
-import kotlinx.coroutines.test.runCurrent
-import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -74,13 +74,11 @@ import org.mockito.kotlin.whenever
@RunWith(AndroidJUnit4::class)
@DisableFlags(StatusBarNotifChips.FLAG_NAME)
class OngoingActivityChipsViewModelTest : SysuiTestCase() {
- private val kosmos = testKosmos()
- private val testScope = kosmos.testScope
+ private val kosmos = testKosmos().useUnconfinedTestDispatcher()
private val systemClock = kosmos.fakeSystemClock
private val screenRecordState = kosmos.screenRecordRepository.screenRecordState
private val mediaProjectionState = kosmos.fakeMediaProjectionRepository.mediaProjectionState
- private val callRepo = kosmos.ongoingCallRepository
private val mockSystemUIDialog = mock<SystemUIDialog>()
private val chipBackgroundView = mock<ChipBackgroundContainer>()
@@ -96,7 +94,7 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() {
private val mockExpandable: Expandable =
mock<Expandable>().apply { whenever(dialogTransitionController(any())).thenReturn(mock()) }
- private val underTest = kosmos.ongoingActivityChipsViewModel
+ private val Kosmos.underTest by Kosmos.Fixture { ongoingActivityChipsViewModel }
@Before
fun setUp() {
@@ -111,10 +109,10 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() {
@Test
fun primaryChip_allHidden_hidden() =
- testScope.runTest {
+ kosmos.runTest {
screenRecordState.value = ScreenRecordModel.DoingNothing
mediaProjectionState.value = MediaProjectionState.NotProjecting
- callRepo.setOngoingCallState(OngoingCallModel.NoCall)
+ removeOngoingCallState("testKey")
val latest by collectLastValue(underTest.primaryChip)
@@ -123,10 +121,10 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() {
@Test
fun primaryChip_screenRecordShow_restHidden_screenRecordShown() =
- testScope.runTest {
+ kosmos.runTest {
screenRecordState.value = ScreenRecordModel.Recording
mediaProjectionState.value = MediaProjectionState.NotProjecting
- callRepo.setOngoingCallState(OngoingCallModel.NoCall)
+ removeOngoingCallState("testKey")
val latest by collectLastValue(underTest.primaryChip)
@@ -135,10 +133,10 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() {
@Test
fun primaryChip_screenRecordShowAndCallShow_screenRecordShown() =
- testScope.runTest {
+ kosmos.runTest {
screenRecordState.value = ScreenRecordModel.Recording
- callRepo.setOngoingCallState(inCallModel(startTimeMs = 34))
+ addOngoingCallState()
val latest by collectLastValue(underTest.primaryChip)
@@ -147,11 +145,11 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() {
@Test
fun primaryChip_screenRecordShowAndShareToAppShow_screenRecordShown() =
- testScope.runTest {
+ kosmos.runTest {
screenRecordState.value = ScreenRecordModel.Recording
mediaProjectionState.value =
MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE)
- callRepo.setOngoingCallState(OngoingCallModel.NoCall)
+ removeOngoingCallState("testKey")
val latest by collectLastValue(underTest.primaryChip)
@@ -160,11 +158,11 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() {
@Test
fun primaryChip_shareToAppShowAndCallShow_shareToAppShown() =
- testScope.runTest {
+ kosmos.runTest {
screenRecordState.value = ScreenRecordModel.DoingNothing
mediaProjectionState.value =
MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE)
- callRepo.setOngoingCallState(inCallModel(startTimeMs = 34))
+ addOngoingCallState()
val latest by collectLastValue(underTest.primaryChip)
@@ -173,15 +171,13 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() {
@Test
fun primaryChip_screenRecordAndShareToAppAndCastToOtherHideAndCallShown_callShown() =
- testScope.runTest {
+ kosmos.runTest {
val notificationKey = "call"
screenRecordState.value = ScreenRecordModel.DoingNothing
// MediaProjection covers both share-to-app and cast-to-other-device
mediaProjectionState.value = MediaProjectionState.NotProjecting
- callRepo.setOngoingCallState(
- inCallModel(startTimeMs = 34, notificationKey = notificationKey)
- )
+ addOngoingCallState(key = notificationKey)
val latest by collectLastValue(underTest.primaryChip)
@@ -190,12 +186,10 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() {
@Test
fun primaryChip_higherPriorityChipAdded_lowerPriorityChipReplaced() =
- testScope.runTest {
+ kosmos.runTest {
// Start with just the lowest priority chip shown
val callNotificationKey = "call"
- callRepo.setOngoingCallState(
- inCallModel(startTimeMs = 34, notificationKey = callNotificationKey)
- )
+ addOngoingCallState(key = callNotificationKey)
// And everything else hidden
mediaProjectionState.value = MediaProjectionState.NotProjecting
screenRecordState.value = ScreenRecordModel.DoingNothing
@@ -224,15 +218,13 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() {
@Test
fun primaryChip_highestPriorityChipRemoved_showsNextPriorityChip() =
- testScope.runTest {
+ kosmos.runTest {
// WHEN all chips are active
screenRecordState.value = ScreenRecordModel.Recording
mediaProjectionState.value =
MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE)
val callNotificationKey = "call"
- callRepo.setOngoingCallState(
- inCallModel(startTimeMs = 34, notificationKey = callNotificationKey)
- )
+ addOngoingCallState(key = callNotificationKey)
val latest by collectLastValue(underTest.primaryChip)
@@ -255,17 +247,15 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() {
/** Regression test for b/347726238. */
@Test
fun primaryChip_timerDoesNotResetAfterSubscribersRestart() =
- testScope.runTest {
+ kosmos.runTest {
var latest: OngoingActivityChipModel? = null
- val job1 = underTest.primaryChip.onEach { latest = it }.launchIn(this)
+ val job1 = underTest.primaryChip.onEach { latest = it }.launchIn(kosmos.testScope)
// Start a chip with a timer
systemClock.setElapsedRealtime(1234)
screenRecordState.value = ScreenRecordModel.Recording
- runCurrent()
-
assertThat((latest as OngoingActivityChipModel.Active.Timer).startTimeMs)
.isEqualTo(1234)
@@ -276,9 +266,7 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() {
systemClock.setElapsedRealtime(5678)
// WHEN we re-subscribe to the chip flow
- val job2 = underTest.primaryChip.onEach { latest = it }.launchIn(this)
-
- runCurrent()
+ val job2 = underTest.primaryChip.onEach { latest = it }.launchIn(kosmos.testScope)
// THEN the old start time is still used
assertThat((latest as OngoingActivityChipModel.Active.Timer).startTimeMs)
@@ -289,14 +277,14 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() {
@Test
fun primaryChip_screenRecordStoppedViaDialog_chipHiddenWithoutAnimation() =
- testScope.runTest {
+ kosmos.runTest {
screenRecordState.value = ScreenRecordModel.Recording
mediaProjectionState.value =
MediaProjectionState.Projecting.EntireScreen(
NORMAL_PACKAGE,
hostDeviceName = "Recording Display",
)
- callRepo.setOngoingCallState(OngoingCallModel.NoCall)
+ removeOngoingCallState("testKey")
val latest by collectLastValue(underTest.primaryChip)
@@ -319,11 +307,11 @@ class OngoingActivityChipsViewModelTest : SysuiTestCase() {
@Test
fun primaryChip_projectionStoppedViaDialog_chipHiddenWithoutAnimation() =
- testScope.runTest {
+ kosmos.runTest {
mediaProjectionState.value =
MediaProjectionState.Projecting.EntireScreen(NORMAL_PACKAGE)
screenRecordState.value = ScreenRecordModel.DoingNothing
- callRepo.setOngoingCallState(OngoingCallModel.NoCall)
+ removeOngoingCallState("testKey")
val latest by collectLastValue(underTest.primaryChip)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorControllerTest.kt
index a1772e3f62ed..510167d10db4 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorControllerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorControllerTest.kt
@@ -10,6 +10,7 @@ import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.jank.interactionJankMonitor
import com.android.systemui.kosmos.testScope
import com.android.systemui.res.R
+import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
import com.android.systemui.statusbar.notification.data.repository.NotificationLaunchAnimationRepository
@@ -165,7 +166,10 @@ class NotificationTransitionAnimatorControllerTest : SysuiTestCase() {
.setSummary(summary)
.addChild(notification.entry)
.build()
- assertSame(summary, notification.entry.parent?.summary)
+
+ val parentSummary = if (notification.entry.parent is GroupEntry)
+ (notification.entry.parent as GroupEntry).summary else null
+ assertSame(summary, parentSummary)
`when`(headsUpManager.isHeadsUpEntry(notificationKey)).thenReturn(false)
`when`(headsUpManager.isHeadsUpEntry(summary.key)).thenReturn(true)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderTest.kt
index 99bd4fc549a8..d9c91771043b 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilderTest.kt
@@ -26,6 +26,7 @@ import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder
import com.android.systemui.statusbar.notification.collection.ListEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.getAttachState
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
@@ -409,7 +410,7 @@ private fun buildSection(
): NotifSection {
return NotifSection(object : NotifSectioner("Section $index (bucket=$bucket)", bucket) {
- override fun isInSection(entry: ListEntry?): Boolean {
+ override fun isInSection(entry: PipelineEntry?): Boolean {
throw NotImplementedError("This should never be called")
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManagerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManagerTest.kt
index e6fbc725af04..4a05804f663a 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManagerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManagerTest.kt
@@ -24,6 +24,7 @@ import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder
import com.android.systemui.statusbar.notification.collection.ListEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.ShadeListBuilder
import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderEntryListener
import com.android.systemui.statusbar.notification.collection.listbuilder.OnAfterRenderGroupListener
@@ -40,6 +41,7 @@ import org.mockito.kotlin.spy
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
import org.mockito.kotlin.verifyNoMoreInteractions
+import java.nio.channels.Pipe
@SmallTest
@RunWith(AndroidJUnit4::class)
@@ -198,7 +200,7 @@ class RenderStageManagerTest : SysuiTestCase() {
)
private class FakeNotifViewRenderer : NotifViewRenderer {
- override fun onRenderList(notifList: List<ListEntry>) {}
+ override fun onRenderList(notifList: List<PipelineEntry>) {}
override fun getGroupController(group: GroupEntry): NotifGroupController = mock()
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapperTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapperTest.kt
index 081f52c4ff3b..bf6ee9253418 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapperTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapperTest.kt
@@ -75,9 +75,10 @@ class NotificationConversationTemplateViewWrapperTest : SysuiTestCase() {
// Creates a mocked out NotificationEntry of ConversationLayout type,
// with a mock imageMessage.drawable embedded in its MessagingImageMessages
// (both top level, and in a group).
- val mockDrawable = mock<AnimatedImageDrawable>()
- val mockDrawable2 = mock<AnimatedImageDrawable>()
- val mockLayoutView: View = fakeConversationLayout(mockDrawable, mockDrawable2)
+ val mockDrawableGroupMessage = mock<AnimatedImageDrawable>()
+ val mockDrawableImageMessage = mock<AnimatedImageDrawable>()
+ val mockLayoutView: View =
+ fakeConversationLayout(mockDrawableGroupMessage, mockDrawableImageMessage)
val wrapper: NotificationViewWrapper =
NotificationConversationTemplateViewWrapper(mContext, mockLayoutView, mRow)
@@ -85,8 +86,8 @@ class NotificationConversationTemplateViewWrapperTest : SysuiTestCase() {
wrapper.setAnimationsRunning(false)
// Verifies that each AnimatedImageDrawable is started animating.
- verify(mockDrawable).stop()
- verify(mockDrawable2).stop()
+ verify(mockDrawableGroupMessage).stop()
+ verify(mockDrawableImageMessage).stop()
}
private fun fakeConversationLayout(
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackStateAnimatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackStateAnimatorTest.kt
index 67415de86d9b..e7be20e7c3cb 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackStateAnimatorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/StackStateAnimatorTest.kt
@@ -88,6 +88,7 @@ class StackStateAnimatorTest : SysuiTestCase() {
/* delay= */ 0L,
/* duration= */ ANIMATION_DURATION_HEADS_UP_APPEAR.toLong(),
/* isHeadsUpAppear= */ true,
+ /* isHeadsUpCycling= */ false,
/* onEndRunnable= */ null,
)
}
@@ -111,6 +112,7 @@ class StackStateAnimatorTest : SysuiTestCase() {
/* delay= */ 0L,
/* duration= */ ANIMATION_DURATION_HEADS_UP_APPEAR.toLong(),
/* isHeadsUpAppear= */ true,
+ /* isHeadsUpCycling= */ false,
/* onEndRunnable= */ null,
)
}
@@ -128,6 +130,7 @@ class StackStateAnimatorTest : SysuiTestCase() {
/* delay= */ eq(0L),
/* translationDirection= */ eq(0f),
/* isHeadsUpAnimation= */ eq(true),
+ /* isHeadsUpCycling= */ eq(false),
/* onStartedRunnable= */ any(),
/* onFinishedRunnable= */ runnableCaptor.capture(),
/* animationListener= */ any(),
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt
index c630a1c1e006..e7c571dfcaf3 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/SharedNotificationContainerViewModelTest.kt
@@ -62,6 +62,8 @@ import com.android.systemui.res.R
import com.android.systemui.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.Transition
import com.android.systemui.scene.data.repository.setTransition
+import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.domain.interactor.enableDualShade
@@ -363,6 +365,8 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S
assertThat(alpha).isEqualTo(1f)
// Start transitioning to glanceable hub
+ kosmos.sceneInteractor.changeScene(Scenes.Lockscreen, "")
+
val progress = 0.6f
kosmos.setTransition(
sceneTransition = Transition(from = Scenes.Lockscreen, to = Scenes.Communal),
@@ -396,6 +400,7 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S
assertThat(alpha).isIn(Range.closed(0f, 1f))
// Finish transition to glanceable hub
+ kosmos.sceneInteractor.changeScene(Scenes.Communal, "")
kosmos.setTransition(
sceneTransition = Idle(Scenes.Communal),
stateTransition =
@@ -432,6 +437,8 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S
assertThat(alpha).isEqualTo(1f)
// Start transitioning to glanceable hub
+ kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "")
+
val progress = 0.6f
kosmos.setTransition(
sceneTransition = Transition(from = Scenes.Lockscreen, to = Scenes.Communal),
@@ -464,6 +471,7 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S
assertThat(alpha).isEqualTo(0)
// Finish transition to glanceable hub
+ kosmos.sceneInteractor.changeScene(Scenes.Communal, "")
kosmos.setTransition(
sceneTransition = Idle(Scenes.Communal),
stateTransition =
@@ -492,6 +500,8 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S
assertThat(alpha).isEqualTo(0f)
// Start transitioning to glanceable hub
+ kosmos.sceneInteractor.changeScene(Scenes.Lockscreen, "")
+
val progress = 0.6f
kosmos.setTransition(
sceneTransition = Transition(from = Scenes.Lockscreen, to = Scenes.Communal),
@@ -524,6 +534,7 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S
assertThat(alpha).isEqualTo(0)
// Finish transition to glanceable hub
+ kosmos.sceneInteractor.changeScene(Scenes.Communal, "")
kosmos.setTransition(
sceneTransition = Idle(Scenes.Communal),
stateTransition =
@@ -587,7 +598,7 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S
assertThat(isOnLockscreen).isTrue()
kosmos.setTransition(
- sceneTransition = Idle(Scenes.Bouncer),
+ sceneTransition = Idle(Scenes.Lockscreen, setOf(Overlays.Bouncer)),
stateTransition = TransitionStep(from = LOCKSCREEN, to = PRIMARY_BOUNCER),
)
assertThat(isOnLockscreen).isTrue()
@@ -601,7 +612,7 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S
val isOnLockscreen by collectLastValue(underTest.isOnLockscreen)
setTransition(
- sceneTransition = Idle(Scenes.Bouncer),
+ sceneTransition = Idle(Scenes.Lockscreen, setOf(Overlays.Bouncer)),
stateTransition = TransitionStep(from = LOCKSCREEN, to = PRIMARY_BOUNCER),
)
assertThat(isOnLockscreen).isTrue()
@@ -659,6 +670,7 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S
assertThat(isOnGlanceableHubWithoutShade).isFalse()
// Move to glanceable hub
+ kosmos.sceneInteractor.changeScene(Scenes.Communal, "")
kosmos.setTransition(
sceneTransition = Idle(Scenes.Communal),
stateTransition = TransitionStep(from = LOCKSCREEN, to = GLANCEABLE_HUB),
@@ -681,6 +693,7 @@ class SharedNotificationContainerViewModelTest(flags: FlagsParameterization) : S
shadeTestUtil.setQsExpansion(0f)
shadeTestUtil.setLockscreenShadeExpansion(0f)
+ kosmos.sceneInteractor.changeScene(Scenes.Communal, "")
kosmos.setTransition(
sceneTransition = Idle(Scenes.Communal),
stateTransition = TransitionStep(from = LOCKSCREEN, to = GLANCEABLE_HUB),
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/domain/interactor/KeyguardBypassInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/domain/interactor/KeyguardBypassInteractorTest.kt
index 091fbb65bcf9..c966f52b6c73 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/domain/interactor/KeyguardBypassInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/domain/interactor/KeyguardBypassInteractorTest.kt
@@ -29,6 +29,7 @@ import com.android.systemui.keyguard.domain.interactor.keyguardQuickAffordanceIn
import com.android.systemui.keyguard.domain.interactor.pulseExpansionInteractor
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.shadeTestUtil
import com.android.systemui.testKosmos
@@ -147,10 +148,11 @@ class KeyguardBypassInteractorTest : SysuiTestCase() {
}
private fun setScene(bouncerShowing: Boolean, onLockscreenScene: Boolean) {
- if (bouncerShowing) {
- kosmos.sceneInteractor.changeScene(Scenes.Bouncer, "reason")
- } else if (onLockscreenScene) {
+ if (onLockscreenScene) {
kosmos.sceneInteractor.changeScene(Scenes.Lockscreen, "reason")
+ if (bouncerShowing) {
+ kosmos.sceneInteractor.showOverlay(Overlays.Bouncer, "reason")
+ }
} else {
kosmos.sceneInteractor.changeScene(Scenes.Shade, "reason")
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt
index 8ea888e47ffc..1c530f1eab7e 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModelTest.kt
@@ -252,6 +252,21 @@ class MobileIconViewModelTest : SysuiTestCase() {
}
@Test
+ fun isVisible_satellite_respectsAirplaneMode() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.isVisible)
+
+ repository.isNonTerrestrial.value = true
+ airplaneModeInteractor.setIsAirplaneMode(false)
+
+ assertThat(latest).isTrue()
+
+ airplaneModeInteractor.setIsAirplaneMode(true)
+
+ assertThat(latest).isFalse()
+ }
+
+ @Test
fun contentDescription_notInService_usesNoPhone() =
testScope.runTest {
val latest by collectLastValue(underTest.contentDescription)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt
index 8a796fc33608..7e8ee1b156df 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/shared/ui/viewmodel/HomeStatusBarViewModelImplTest.kt
@@ -522,11 +522,12 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
}
@Test
- fun isHomeStatusBarAllowedByScene_sceneBouncer_false() =
+ fun isHomeStatusBarAllowedByScene_overlayBouncer_false() =
kosmos.runTest {
val latest by collectLastValue(underTest.isHomeStatusBarAllowedByScene)
- kosmos.sceneContainerRepository.snapToScene(Scenes.Bouncer)
+ kosmos.sceneContainerRepository.snapToScene(Scenes.Lockscreen)
+ kosmos.sceneContainerRepository.showOverlay(Overlays.Bouncer)
assertThat(latest).isFalse()
}
@@ -1052,7 +1053,8 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
val notifIconsVisible by collectLastValue(underTest.isNotificationIconContainerVisible)
val systemInfoVisible by collectLastValue(underTest.systemInfoCombinedVis)
- kosmos.sceneContainerRepository.snapToScene(Scenes.Bouncer)
+ kosmos.sceneContainerRepository.snapToScene(Scenes.Lockscreen)
+ kosmos.sceneContainerRepository.showOverlay(Overlays.Bouncer)
assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE)
assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModelTest.kt
index 4ab1c0b1af6b..fea0320fc7e3 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModelTest.kt
@@ -154,7 +154,8 @@ class KeyguardStatusBarViewModelTest(flags: FlagsParameterization) : SysuiTestCa
testScope.runTest {
val latest by collectLastValue(underTest.isVisible)
- kosmos.sceneContainerRepository.snapToScene(Scenes.Bouncer)
+ kosmos.sceneContainerRepository.snapToScene(Scenes.Lockscreen)
+ kosmos.sceneContainerRepository.showOverlay(Overlays.Bouncer)
assertThat(latest).isFalse()
}
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QS.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QS.java
index a0bf7f00b11c..d3218ad8c9fb 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QS.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QS.java
@@ -203,8 +203,6 @@ public interface QS extends FragmentBase {
*/
void setIsNotificationPanelFullWidth(boolean isFullWidth);
- default void setQSExpandingOrCollapsing(boolean isQSExpandingOrCollapsing) {}
-
/**
* Callback for when QSPanel container is scrolled
*/
diff --git a/packages/SystemUI/pods/Android.bp b/packages/SystemUI/pods/Android.bp
index e45f3170d9ad..588a074ef80c 100644
--- a/packages/SystemUI/pods/Android.bp
+++ b/packages/SystemUI/pods/Android.bp
@@ -20,3 +20,14 @@ package {
// specify default_visibility:
default_visibility: ["//visibility:private"],
}
+
+java_defaults {
+ name: "SystemUI_pod_defaults",
+ libs: [
+ "jsr330",
+ ],
+ kotlincflags: [
+ "-Xjvm-default=all",
+ ],
+ defaults_visibility: [":__subpackages__"],
+}
diff --git a/packages/SystemUI/pods/com/android/systemui/dagger/Android.bp b/packages/SystemUI/pods/com/android/systemui/dagger/Android.bp
index df90be8ecb97..72c41bb65240 100644
--- a/packages/SystemUI/pods/com/android/systemui/dagger/Android.bp
+++ b/packages/SystemUI/pods/com/android/systemui/dagger/Android.bp
@@ -14,21 +14,18 @@
// limitations under the License.
//
-soong_namespace {
-}
-
package {
default_applicable_licenses: ["frameworks_base_packages_SystemUI_license"],
}
java_library {
- name: "api",
+ name: "com.android.systemui.dagger-api",
srcs: [
"**/*.java",
"**/*.kt",
],
- libs: [
- "jsr330",
+ defaults: [
+ "SystemUI_pod_defaults",
],
visibility: ["//frameworks/base/packages/SystemUI:__subpackages__"],
}
diff --git a/packages/SystemUI/pods/com/android/systemui/retail/Android.bp b/packages/SystemUI/pods/com/android/systemui/retail/Android.bp
index f04784885c10..639eae9003cd 100644
--- a/packages/SystemUI/pods/com/android/systemui/retail/Android.bp
+++ b/packages/SystemUI/pods/com/android/systemui/retail/Android.bp
@@ -14,25 +14,24 @@
// limitations under the License.
//
-soong_namespace {
-}
-
package {
default_applicable_licenses: ["frameworks_base_packages_SystemUI_license"],
}
java_library {
- name: "impl",
+ name: "com.android.systemui.retail-impl",
srcs: ["*.kt"],
libs: [
- "jsr330",
"dagger2",
"SystemUICommon",
"kotlinx_coroutines",
],
+ defaults: [
+ "SystemUI_pod_defaults",
+ ],
static_libs: [
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail/data:impl",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail/domain:impl",
+ "com.android.systemui.retail.data-impl",
+ "com.android.systemui.retail.domain-impl",
],
- visibility: ["//frameworks/base/packages/SystemUI"],
+ visibility: ["//frameworks/base/packages/SystemUI:__pkg__"],
}
diff --git a/packages/SystemUI/pods/com/android/systemui/retail/data/Android.bp b/packages/SystemUI/pods/com/android/systemui/retail/data/Android.bp
index f148a7c69ecc..1aa41e4867bb 100644
--- a/packages/SystemUI/pods/com/android/systemui/retail/data/Android.bp
+++ b/packages/SystemUI/pods/com/android/systemui/retail/data/Android.bp
@@ -14,42 +14,44 @@
// limitations under the License.
//
-soong_namespace {
-}
-
package {
default_applicable_licenses: ["frameworks_base_packages_SystemUI_license"],
}
java_library {
- name: "api",
+ name: "com.android.systemui.retail.data-api",
srcs: ["repository/*.kt"],
libs: [
"kotlinx_coroutines",
],
+ defaults: [
+ "SystemUI_pod_defaults",
+ ],
visibility: [
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail/dagger",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail/domain",
+ "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail:__pkg__",
+ "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail/dagger:__pkg__",
+ "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail/domain:__pkg__",
],
}
java_library {
- name: "impl",
+ name: "com.android.systemui.retail.data-impl",
srcs: ["repository/impl/*.kt"],
libs: [
- "jsr330",
"kotlinx_coroutines",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/dagger:api",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/util/settings:api",
+ "com.android.systemui.dagger-api",
+ "com.android.systemui.util.settings-api",
"SystemUICommon",
],
static_libs: [
- "api",
+ "com.android.systemui.retail.data-api",
+ ],
+ defaults: [
+ "SystemUI_pod_defaults",
],
visibility: [
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail/dagger",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail/domain",
+ "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail:__pkg__",
+ "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail/dagger:__pkg__",
+ "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail/domain:__pkg__",
],
}
diff --git a/packages/SystemUI/pods/com/android/systemui/retail/domain/Android.bp b/packages/SystemUI/pods/com/android/systemui/retail/domain/Android.bp
index 787861ce5eb8..64b0e2254c52 100644
--- a/packages/SystemUI/pods/com/android/systemui/retail/domain/Android.bp
+++ b/packages/SystemUI/pods/com/android/systemui/retail/domain/Android.bp
@@ -14,33 +14,35 @@
// limitations under the License.
//
-soong_namespace {
-}
-
package {
default_applicable_licenses: ["frameworks_base_packages_SystemUI_license"],
}
java_library {
- name: "api",
+ name: "com.android.systemui.retail.domain-api",
srcs: ["interactor/*.kt"],
+ defaults: [
+ "SystemUI_pod_defaults",
+ ],
visibility: [
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail",
+ "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail:__pkg__",
],
}
java_library {
- name: "impl",
+ name: "com.android.systemui.retail.domain-impl",
srcs: ["interactor/impl/*.kt"],
libs: [
- "jsr330",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/dagger:api",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail/data:api",
+ "com.android.systemui.dagger-api",
+ "com.android.systemui.retail.data-api",
],
static_libs: [
- "api",
+ "com.android.systemui.retail.domain-api",
+ ],
+ defaults: [
+ "SystemUI_pod_defaults",
],
visibility: [
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail",
+ "//frameworks/base/packages/SystemUI/pods/com/android/systemui/retail:__pkg__",
],
}
diff --git a/packages/SystemUI/pods/com/android/systemui/util/settings/Android.bp b/packages/SystemUI/pods/com/android/systemui/util/settings/Android.bp
index 1aa772961408..d97ff1371f4e 100644
--- a/packages/SystemUI/pods/com/android/systemui/util/settings/Android.bp
+++ b/packages/SystemUI/pods/com/android/systemui/util/settings/Android.bp
@@ -14,27 +14,25 @@
// limitations under the License.
//
-soong_namespace {
-}
-
package {
default_applicable_licenses: ["frameworks_base_packages_SystemUI_license"],
}
java_library {
- name: "api",
+ name: "com.android.systemui.util.settings-api",
srcs: [
"*.java",
"*.kt",
],
libs: [
"//frameworks/libs/systemui:tracinglib-platform",
- "//frameworks/base/packages/SystemUI/pods/com/android/systemui/dagger:api",
+ "com.android.systemui.dagger-api",
"SystemUICommon",
"androidx.annotation_annotation",
"kotlinx_coroutines_android",
- "jsr330",
],
- kotlincflags: ["-Xjvm-default=all"],
+ defaults: [
+ "SystemUI_pod_defaults",
+ ],
visibility: ["//frameworks/base/packages/SystemUI:__subpackages__"],
}
diff --git a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
index e7116d63d5fc..7e5ff8c017d2 100644
--- a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml
@@ -21,11 +21,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="keyguard_enter_your_pin" msgid="5429932527814874032">"Ingresa tu PIN"</string>
- <string name="keyguard_enter_pin" msgid="8114529922480276834">"Ingresar PIN"</string>
+ <string name="keyguard_enter_pin" msgid="8114529922480276834">"Ingresa el PIN"</string>
<string name="keyguard_enter_your_pattern" msgid="351503370332324745">"Ingresa tu patrón"</string>
- <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Dibujar patrón"</string>
+ <string name="keyguard_enter_pattern" msgid="7616595160901084119">"Dibuja el patrón"</string>
<string name="keyguard_enter_your_password" msgid="7225626204122735501">"Ingresa tu contraseña"</string>
- <string name="keyguard_enter_password" msgid="6483623792371009758">"Ingresar contraseña"</string>
+ <string name="keyguard_enter_password" msgid="6483623792371009758">"Ingresa la contraseña"</string>
<string name="keyguard_sim_error_message_short" msgid="633630844240494070">"Tarjeta no válida"</string>
<string name="keyguard_charged" msgid="5478247181205188995">"Cargada"</string>
<string name="keyguard_plugged_in_wireless" msgid="2537874724955057383">"<xliff:g id="PERCENTAGE">%s</xliff:g> • Cargando de manera inalámbrica"</string>
@@ -62,9 +62,9 @@
<string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Vuelve a intentarlo o ingresa el PIN"</string>
<string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Vuelve a intentarlo o ingresa la contraseña"</string>
<string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Vuelve a intentarlo o dibuja el patrón"</string>
- <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Se requiere PIN luego de demasiados intentos"</string>
- <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Se requiere contraseña luego de demasiados intentos"</string>
- <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Se requiere patrón luego de demasiados intentos"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Debes ingresar un PIN luego de demasiados intentos"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Debes ingresar una contraseña luego de demasiados intentos"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Debes ingresar un patrón luego de demasiados intentos"</string>
<string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Desbloquear con PIN o huella dactilar"</string>
<string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Desbloq. contraseña/huella"</string>
<string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Desbloq. patrón/huella"</string>
@@ -104,7 +104,7 @@
<string name="kg_password_pin_failed" msgid="5136259126330604009">"Se produjo un error al desbloquear la tarjeta SIM con el PIN."</string>
<string name="kg_password_puk_failed" msgid="6778867411556937118">"Se produjo un error al desbloquear la tarjeta SIM con el PUK."</string>
<string name="accessibility_ime_switch_button" msgid="9082358310194861329">"Cambiar método de entrada"</string>
- <string name="airplane_mode" msgid="2528005343938497866">"Modo de avión"</string>
+ <string name="airplane_mode" msgid="2528005343938497866">"Modo avión"</string>
<string name="kg_prompt_reason_restart_pattern" msgid="3321211830602827742">"Se requiere patrón tras reiniciar dispositivo"</string>
<string name="kg_prompt_reason_restart_pin" msgid="2672166323886110512">"Se requiere PIN tras reiniciar dispositivo"</string>
<string name="kg_prompt_reason_restart_password" msgid="3967993994418885887">"Se requiere contraseña tras reiniciar dispositivo"</string>
diff --git a/packages/SystemUI/res-keyguard/values-es/strings.xml b/packages/SystemUI/res-keyguard/values-es/strings.xml
index 33a7346b3769..0e0f9ebe7eca 100644
--- a/packages/SystemUI/res-keyguard/values-es/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-es/strings.xml
@@ -62,9 +62,9 @@
<string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Vuelve a intentarlo o introduce el PIN"</string>
<string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Vuelve a intentarlo o escribe la contraseña"</string>
<string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Vuelve a intentarlo o dibuja el patrón"</string>
- <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Demasiados intentos, se necesita el PIN"</string>
- <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Demasiados intentos, se necesita la contraseña"</string>
- <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Demasiados intentos, se necesita el patrón"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Tras demasiados intentos, es necesario introducir el PIN"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Tras demasiados intentos, es necesario introducir la contraseña"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Tras demasiados intentos, es necesario dibujar el patrón"</string>
<string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Desbloquea con PIN o huella digital"</string>
<string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Desbloquea con contraseña o huella digital"</string>
<string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Desbloquea con tu patrón o huella digital"</string>
diff --git a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml
index 82a553cea058..cb6f5b4c8fa8 100644
--- a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml
@@ -62,9 +62,9 @@
<string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Réessayez ou entrez le NIP"</string>
<string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Réessayez ou entrez le mot de passe"</string>
<string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Réessayez ou dessinez le schéma"</string>
- <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Le NIP est requis (trop de tentatives)"</string>
- <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Le mot de passe est requis (trop de tentatives)"</string>
- <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Le schéma est requis (trop de tentatives)"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Le NIP est requis après trop de tentatives"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Le mot de passe est requis après trop de tentatives"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Le schéma est requis après trop de tentatives"</string>
<string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Déverr. par NIP ou empr. dig."</string>
<string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Déverr. par MDP ou empr. dig."</string>
<string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Déverr. par schéma ou empr. dig."</string>
diff --git a/packages/SystemUI/res-keyguard/values-hi/strings.xml b/packages/SystemUI/res-keyguard/values-hi/strings.xml
index d9055817a764..9eb89b67fdde 100644
--- a/packages/SystemUI/res-keyguard/values-hi/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-hi/strings.xml
@@ -62,9 +62,9 @@
<string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"फिर से कोशिश करें या पिन डालें"</string>
<string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"फिर से कोशिश करें या पासवर्ड डालें"</string>
<string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"फिर से कोशिश करें या पैटर्न ड्रॉ करें"</string>
- <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"कई बार कोशिश की जा चुकी है, इसलिए पिन डालें"</string>
- <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"कई बार कोशिश की जा चुकी है, इसलिए पासवर्ड डालें"</string>
- <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"कई बार कोशिश की जा चुकी है, इसलिए पैटर्न ड्रा करें"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"कई बार कोशिश करने के बाद पिन डालना ज़रूरी है"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"कई बार कोशिश करने के बाद पासवर्ड डालना ज़रूरी है"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"कई बार कोशिश करने के बाद पैटर्न ड्रा करना ज़रूरी है"</string>
<string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"पिन/फ़िंगरप्रिंट से अनलॉक करें"</string>
<string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"पासवर्ड/फ़िंगरप्रिंट से अनलॉक करें"</string>
<string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"पैटर्न/फ़िंगरप्रिंट से अनलॉक करें"</string>
diff --git a/packages/SystemUI/res-keyguard/values-km/strings.xml b/packages/SystemUI/res-keyguard/values-km/strings.xml
index 733e29c75de7..5f2bffbdc94e 100644
--- a/packages/SystemUI/res-keyguard/values-km/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-km/strings.xml
@@ -62,9 +62,9 @@
<string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"ព្យាយាមម្ដងទៀត ឬបញ្ចូលកូដ PIN"</string>
<string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"ព្យាយាមម្ដងទៀត ឬបញ្ចូលពាក្យសម្ងាត់"</string>
<string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"ព្យាយាមម្ដងទៀត ឬគូរលំនាំ"</string>
- <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"ត្រូវការកូដ PIN បន្ទាប់ពីព្យាយាមច្រើនដងពេក"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"តម្រូវឱ្យមាន PIN បន្ទាប់ពីព្យាយាមច្រើនដងពេក"</string>
<string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"ត្រូវការពាក្យសម្ងាត់ បន្ទាប់ពីព្យាយាមច្រើនដងពេក"</string>
- <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"ត្រូវការលំនាំ បន្ទាប់ពីព្យាយាមច្រើនដងពេក"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"តម្រូវឱ្យមាន​លំនាំ បន្ទាប់ពីព្យាយាមច្រើនដងពេក"</string>
<string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"ដោះសោដោយប្រើកូដ PIN ឬស្នាមម្រាមដៃ"</string>
<string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"ដោះសោដោយប្រើពាក្យសម្ងាត់ ឬស្នាមម្រាមដៃ"</string>
<string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"ដោះសោដោយប្រើលំនាំ ឬស្នាមម្រាមដៃ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ky/strings.xml b/packages/SystemUI/res-keyguard/values-ky/strings.xml
index 544adee82152..addb01ead30e 100644
--- a/packages/SystemUI/res-keyguard/values-ky/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ky/strings.xml
@@ -62,9 +62,9 @@
<string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Кайталап көрүңүз же PIN кодду киргизиңиз"</string>
<string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Кайра аракет кылыңыз же сырсөздү киргизиңиз"</string>
<string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Кайра аракет кылыңыз же графикалык ачкычты тартыңыз"</string>
- <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Өтө көп аракеттен кийин PIN код талап кылынат"</string>
- <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Өтө көп аракеттен кийин сырсөз талап кылынат"</string>
- <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Өтө көп аракеттен кийин графикалык ачкыч талап клынт"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Өтө көп жолу аракет кылдыңыз. PIN кодду киргизиңиз."</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Өтө көп жолу аракет кылдыңыз. Сырсөздү киргизиңиз."</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Өтө көп жолу аракет кылдыңыз. Графикалык ачкычты киргизиңиз."</string>
<string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN кд же мнжа изи мнен клпусн ачңыз"</string>
<string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Срсөз же мнжа изи мнен клпусн ачңз"</string>
<string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Грфиклык ачкч же мнжа изи менн клпусн ачңз"</string>
diff --git a/packages/SystemUI/res-keyguard/values-mn/strings.xml b/packages/SystemUI/res-keyguard/values-mn/strings.xml
index 83ce6988ec4e..cd187bc07cbc 100644
--- a/packages/SystemUI/res-keyguard/values-mn/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-mn/strings.xml
@@ -62,9 +62,9 @@
<string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Дахин оролдох эсвэл ПИН оруулна уу"</string>
<string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Дахин оролдох эсвэл нууц үг оруулна уу"</string>
<string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Дахин оролдох эсвэл хээ зурна уу"</string>
- <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Хэт олон оролдлогын дараа ПИН шаардлагатай"</string>
- <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Хэт олон оролдлогын дараа нууц үг шаардлагатай"</string>
- <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Хэт олон оролдлогын дараа хээ шаардлагатай"</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Хэт олон оролдлогын дараа ПИН оруулахыг шаардана"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Хэт олон оролдлогын дараа нууц үг оруулахыг шаардана"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Хэт олон оролдлогын дараа хээ оруулахыг шаардана"</string>
<string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"ПИН эсвэл хурууны хээгээр түгжээ тайл"</string>
<string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Нууц үг эсвэл хурууны хээгээр түгжээ тайл"</string>
<string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Хээ эсвэл хурууны хээгээр түгжээ тайл"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ne/strings.xml b/packages/SystemUI/res-keyguard/values-ne/strings.xml
index 2fd42f4b52ab..502c42d20560 100644
--- a/packages/SystemUI/res-keyguard/values-ne/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ne/strings.xml
@@ -23,7 +23,7 @@
<string name="keyguard_enter_your_pin" msgid="5429932527814874032">"आफ्नो PIN हाल्नुहोस्"</string>
<string name="keyguard_enter_pin" msgid="8114529922480276834">"PIN हाल्नुहोस्"</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-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml
index 3411571a99f7..ea958e5ed1ec 100644
--- a/packages/SystemUI/res-keyguard/values-pa/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml
@@ -64,7 +64,7 @@
<string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜਾਂ ਪੈਟਰਨ ਬਣਾਓ"</string>
<string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਅਦ ਪਿੰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
<string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਅਦ ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
- <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਅਦ ਪੈਟਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਤੋਂ ਬਾਅਦ ਪੈਟਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ"</string>
<string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"ਪਿੰਨ ਜਾਂ ਫਿੰਗਰਪ੍ਰਿੰਟ ਨਾਲ ਅਣਲਾਕ ਕਰੋ"</string>
<string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"ਪਾਸਵਰਡ ਜਾਂ ਫਿੰਗਰਪ੍ਰਿੰਟ ਨਾਲ ਅਣਲਾਕ ਕਰੋ"</string>
<string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"ਪੈਟਰਨ ਜਾਂ ਫਿੰਗਰਪ੍ਰਿੰਟ ਨਾਲ ਅਣਲਾਕ ਕਰੋ"</string>
diff --git a/packages/SystemUI/res-keyguard/values-ru/strings.xml b/packages/SystemUI/res-keyguard/values-ru/strings.xml
index cab9cb950169..d066292bde7a 100644
--- a/packages/SystemUI/res-keyguard/values-ru/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-ru/strings.xml
@@ -64,7 +64,7 @@
<string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Повторите попытку или введите графический ключ."</string>
<string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Слишком много попыток. Необходимо ввести PIN-код."</string>
<string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Слишком много попыток. Необходимо ввести пароль."</string>
- <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Слишком много попыток. Необходимо ввести граф. ключ."</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Слишком много попыток. Необходимо ввести графический ключ."</string>
<string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Используйте PIN-код или отпечаток пальца"</string>
<string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Используйте пароль или отпечаток пальца"</string>
<string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Используйте граф. ключ или отпечаток пальца"</string>
diff --git a/packages/SystemUI/res-keyguard/values-sk/strings.xml b/packages/SystemUI/res-keyguard/values-sk/strings.xml
index 4dffd971dd27..3cccb9c1b1df 100644
--- a/packages/SystemUI/res-keyguard/values-sk/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-sk/strings.xml
@@ -62,9 +62,9 @@
<string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"Skúste to znova alebo zadajte PIN"</string>
<string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"Skúste to znova alebo zadajte heslo"</string>
<string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"Skúste to znova alebo nakreslite vzor"</string>
- <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Príliš veľký počet pokusov. Vyžaduje sa PIN."</string>
- <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Príliš veľký počet pokusov. Vyžaduje sa heslo."</string>
- <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Príliš veľký počet pokusov. Vyžaduje sa vzor."</string>
+ <string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"Príliš veľa pokusov. Vyžaduje sa PIN."</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"Príliš veľa pokusov. Vyžaduje sa heslo."</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"Príliš veľa pokusov. Vyžaduje sa vzor."</string>
<string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"Odomknúť kódom PIN/odtlačkom"</string>
<string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"Odomknúť heslom/odtlačkom"</string>
<string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"Odomknúť vzorom/odtlačkom"</string>
diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml
index 0a6476fcc438..b0beca68f66a 100644
--- a/packages/SystemUI/res-keyguard/values-te/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-te/strings.xml
@@ -57,14 +57,14 @@
<string name="kg_wrong_pin" msgid="4160978845968732624">"PIN తప్పు"</string>
<string name="kg_wrong_pin_try_again" msgid="3129729383303430190">"PIN తప్పు. రీట్రై చేయండి."</string>
<string name="kg_wrong_input_try_fp_suggestion" msgid="3143861542242024833">"లేదా వేలిముద్రతో అన్‌లాక్ చేయండి"</string>
- <string name="kg_fp_not_recognized" msgid="5183108260932029241">"వేలిముద్ర గుర్తించబడలేదు"</string>
+ <string name="kg_fp_not_recognized" msgid="5183108260932029241">"వేలిముద్ర (ఫింగర్-ప్రింట్) మ్యాచ్ కాలేదు"</string>
<string name="bouncer_face_not_recognized" msgid="1666128054475597485">"ముఖం గుర్తించబడలేదు"</string>
<string name="kg_bio_try_again_or_pin" msgid="4752168242723808390">"మళ్లీ ట్రై చేయండి లేదా PINని ఎంటర్ చేయండి"</string>
<string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"మళ్లీ ట్రై చేయండి లేదా పాస్‌వర్డ్‌ను ఎంటర్ చేయండి"</string>
<string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"మళ్లీ ట్రై చేయండి లేదా ఆకృతిని గీయండి"</string>
<string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"చాలా సార్లు ట్రై చేసిన తర్వాత PIN అవసరం అవుతుంది"</string>
<string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"చాలా సార్లు ట్రై చేసిన తర్వాత పాస్‌వర్డ్ అవసరం"</string>
- <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"చాలా సార్లు ట్రై చేసిన తర్వాత ఆకృతి అవసరం అవుతుంది"</string>
+ <string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"చాలా సార్లు ట్రై చేసిన తర్వాత ఆకృతి (ప్యాటర్న్‌) అవసరం అవుతుంది"</string>
<string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"PIN/వేలిముద్రతో తెరవండి"</string>
<string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"పాస్‌వర్డ్/వేలిముద్రతో తెరవండి"</string>
<string name="kg_unlock_with_pattern_or_fp" msgid="2391870539909135046">"ఆకృతి/వేలిముద్రతో తెరవండి"</string>
diff --git a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml
index 196df2889944..6b08a3a420cc 100644
--- a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml
@@ -63,7 +63,7 @@
<string name="kg_bio_try_again_or_password" msgid="1473132729225398039">"请重试,或输入密码"</string>
<string name="kg_bio_try_again_or_pattern" msgid="4867893307468801501">"请重试,或绘制解锁图案"</string>
<string name="kg_bio_too_many_attempts_pin" msgid="5850845723433047605">"如果出错的尝试次数太多,必须输入 PIN 码才能解锁"</string>
- <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"如果出错的尝试次数太多,必须输入密码才能解锁"</string>
+ <string name="kg_bio_too_many_attempts_password" msgid="5551690347827728042">"如果多次尝试失败,必须输入密码才能解锁"</string>
<string name="kg_bio_too_many_attempts_pattern" msgid="736884689355181602">"如果出错的尝试次数太多,必须绘制图案才能解锁"</string>
<string name="kg_unlock_with_pin_or_fp" msgid="5635161174698729890">"请使用 PIN 码或指纹解锁"</string>
<string name="kg_unlock_with_password_or_fp" msgid="2251295907826814237">"请使用密码或指纹解锁"</string>
diff --git a/packages/SystemUI/res/anim/volume_dialog_ringer_close.xml b/packages/SystemUI/res/anim/volume_dialog_ringer_close.xml
new file mode 100644
index 000000000000..e7ba52c3fae0
--- /dev/null
+++ b/packages/SystemUI/res/anim/volume_dialog_ringer_close.xml
@@ -0,0 +1,22 @@
+<?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.
+ -->
+
+<pathInterpolator
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:controlX1="0.20"
+ android:controlY1="0.00"
+ android:controlX2="0.00"
+ android:controlY2="1.00" /> \ No newline at end of file
diff --git a/packages/SystemUI/res/anim/volume_dialog_ringer_open.xml b/packages/SystemUI/res/anim/volume_dialog_ringer_open.xml
new file mode 100644
index 000000000000..3b18eefc2552
--- /dev/null
+++ b/packages/SystemUI/res/anim/volume_dialog_ringer_open.xml
@@ -0,0 +1,22 @@
+<?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.
+ -->
+
+<pathInterpolator
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:controlX1="0.05"
+ android:controlY1="0.70"
+ android:controlX2="0.10"
+ android:controlY2="1.00" /> \ No newline at end of file
diff --git a/packages/SystemUI/res/layout/media_output_list_group_divider.xml b/packages/SystemUI/res/layout/media_output_list_group_divider.xml
index c351912de295..fa5ad0d981c1 100644
--- a/packages/SystemUI/res/layout/media_output_list_group_divider.xml
+++ b/packages/SystemUI/res/layout/media_output_list_group_divider.xml
@@ -20,14 +20,14 @@
android:id="@+id/device_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/media_output_dialog_margin_horizontal"
+ android:layout_marginEnd="56dp"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="36dp"
android:layout_gravity="center_vertical|start"
- android:layout_marginStart="@dimen/media_output_dialog_margin_horizontal"
- android:layout_marginEnd="56dp"
android:ellipsize="end"
android:maxLines="1"
android:fontFamily="@*android:string/config_headlineFontFamilyMedium"
diff --git a/packages/SystemUI/res/layout/media_output_list_item_advanced.xml b/packages/SystemUI/res/layout/media_output_list_item_advanced.xml
index d297ec46e1e1..6b868b3c7379 100644
--- a/packages/SystemUI/res/layout/media_output_list_item_advanced.xml
+++ b/packages/SystemUI/res/layout/media_output_list_item_advanced.xml
@@ -20,7 +20,8 @@
android:id="@+id/device_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingHorizontal="@dimen/media_output_dialog_margin_horizontal"
+ android:layout_marginHorizontal="@dimen/media_output_dialog_margin_horizontal"
+ android:focusable="true"
android:baselineAligned="false">
<FrameLayout
android:layout_weight="1"
@@ -77,6 +78,7 @@
</FrameLayout>
<LinearLayout
+ android:id="@+id/text_content"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_gravity="center_vertical|start"
@@ -86,7 +88,7 @@
android:layout_marginStart="72dp">
<TextView
android:id="@+id/title"
- android:importantForAccessibility="no"
+ android:focusable="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
@@ -96,6 +98,7 @@
android:textSize="16sp"/>
<TextView
android:id="@+id/subtitle"
+ android:focusable="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:marqueeRepeatLimit="marquee_forever"
@@ -124,7 +127,6 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="16dp"
- android:indeterminate="true"
android:layout_gravity="end|center"
android:indeterminateOnly="true"
android:importantForAccessibility="no"
@@ -135,30 +137,23 @@
android:layout_width="@dimen/media_output_dialog_item_height"
android:layout_height="@dimen/media_output_dialog_item_height"
android:visibility="gone"
- android:layout_marginBottom="6dp"
android:layout_marginStart="7dp"
- android:layout_gravity="end|center"
- android:gravity="center"
android:background="@drawable/media_output_item_background_active">
<CheckBox
android:id="@+id/check_box"
- android:focusable="false"
- android:importantForAccessibility="no"
- android:layout_gravity="center"
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:button="@drawable/media_output_item_check_box"
+ android:foreground="@drawable/media_output_item_check_box"
+ android:foregroundGravity="center"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:button="@null"
android:visibility="gone"
/>
- <ImageView
- android:id="@+id/media_output_item_end_click_icon"
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:focusable="false"
- android:importantForAccessibility="no"
- android:layout_gravity="center"
- android:indeterminate="true"
- android:indeterminateOnly="true"
+ <ImageButton
+ android:id="@+id/end_area_image_button"
+ android:background="@android:color/transparent"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:contentDescription="@null"
android:visibility="gone"/>
</FrameLayout>
</LinearLayout> \ No newline at end of file
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 538d9e23e5c2..d9a28a6bbaf8 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth gekoppel."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth-toestelikoon"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klik om toestelbesonderhede op te stel."</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Klik om alle toestelle te sien"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Klik om met nuwe toestel te koppel"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Invoer"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Gehoortoestelle"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Skakel tans aan …"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Kan nie helderheid verstel nie omdat dit\n deur die topapp beheer word"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Kan nie helderheid verstel nie omdat dit deur die topapp beheer word"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Outodraai"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Outodraai skerm"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Ligging"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> steun nie gesprekskenmerke nie"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Terugvoer"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Maak toe"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Moenie as vasgespeld wys nie"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Wys tans regstreekse opdaterings"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Vasgespelde kennisgewings wys regstreekse inligting vanaf apps en verskyn altyd op die statusbalk en sluitskerm"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Hierdie kennisgewings kan nie gewysig word nie."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Oproepkennisgewings kan nie gewysig word nie."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Hierdie groep kennisgewings kan nie hier opgestel word nie"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Verrigting van veelvuldige take"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Gebruik verdeelde skerm met app aan die regterkant"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Gebruik verdeelde skerm met app aan die linkerkant"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Skakel oor na volskerm"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Skakel oor na app regs of onder terwyl jy verdeelde skerm gebruik"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Skakel oor na app links of bo terwyl jy verdeelde skerm gebruik"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Tydens verdeelde skerm: verplaas ’n app van een skerm na ’n ander"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Wys laeprioriteit-kennisgewingikone"</string>
<string name="other" msgid="429768510980739978">"Ander"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"verwyder teël"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"voeg teël by die laaste posisie"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Skuif teël"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Bekyk onlangse apps"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Wissel apps"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Klaar"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Probeer weer!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Gaan terug"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Swiep links of regs met drie vingers op jou raakpaneel"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Swiep op en hou met drie vingers op die raakpaneel om onlangse apps te bekyk"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Druk die handelingsleutel op jou sleutelbord om al jou apps te bekyk"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Gewysig"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Ontsluit om te kyk"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstuele opvoeding"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Gebruik jou raakpaneel om terug te gaan"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Swiep links of regs met drie vingers. Tik om meer gebare te leer."</string>
diff --git a/packages/SystemUI/res/values-af/tiles_states_strings.xml b/packages/SystemUI/res/values-af/tiles_states_strings.xml
index 3d0dbb59ddaf..fde914fa292c 100644
--- a/packages/SystemUI/res/values-af/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-af/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Af"</item>
<item msgid="5908720590832378783">"Aan"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Onbeskikbaar"</item>
+ <item msgid="6641673879029894995">"Af"</item>
+ <item msgid="5806682401126108403">"Aan"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index f1b9fca25975..ba1c3eda2135 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ብሉቱዝ ተያይዟል።"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"የብሉቱዝ መሣሪያ አዶ"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"የመሣሪያ ዝርዝርን ለማዋቀር ጠቅ ያድርጉ"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"ሁሉንም መሣሪያዎች ለማየት ጠቅ ያድርጉ"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"ከአዲስ መሣሪያ ጋር ለማጣመር ጠቅ ያድርጉ"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ግቤት"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"መስሚያ አጋዥ መሣሪያዎች"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"በማብራት ላይ..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ከላይ ባለው መተግበሪያ ቁጥጥር ላይ ስለሆነ\n ብሩህነትን ማስተካከል አልተቻለም"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ከላይ ባለው መተግበሪያ ቁጥጥር ላይ ስለሆነ ብሩህነትን ማስተካከል አልተቻለም"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"በራስ ሰር አሽከርክር"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ማያ ገጽን በራስ-አሽከርክር"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"አካባቢ"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> የውይይት ባህሪያትን አይደግፍም"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ግብረመልስ"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"አሰናብት"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"ፒን እንደተደረገ አታሳይ"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"የቀጥታ ዝማኔዎችን በማሳየት ላይ"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"ፒን የተደረጉ ማሳወቂያዎች ከመተግበሪያዎች ላይ Live መረጃ ያሳያሉ እና በሁኔታ አሞሌ እና ማያ ገፅ ቁልፍ ላይ ሁልጊዜ ይታያሉ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"እነዚህ ማሳወቂያዎች ሊሻሻሉ አይችሉም።"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"የጥሪ ማሳወቂያዎች ሊቀየሩ አይችሉም።"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"የማሳወቂያዎች ይህ ቡድን እዚህ ላይ ሊዋቀር አይችልም"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ብዙ ተግባራትን በተመሳሳይ ጊዜ ማከናወን"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"መተግበሪያ በስተቀኝ ላይ ሆኖ የተከፈለ ማያ ገፅን ይጠቀሙ"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"መተግበሪያ በስተግራ ላይ ሆኖ የተከፈለ ማያ ገፅን ይጠቀሙ"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"ወደ ሙሉ ገፅ ዕይታ ይቀይሩ"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"የተከፈለ ማያ ገጽን ሲጠቀሙ በቀኝ ወይም ከታች ወዳለ መተግበሪያ ይቀይሩ"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"የተከፈለ ማያ ገጽን ሲጠቀሙ በቀኝ ወይም ከላይ ወዳለ መተግበሪያ ይቀይሩ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"በተከፈለ ማያ ገጽ ወቅት፡- መተግበሪያን ከአንዱ ወደ ሌላው ተካ"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"አነስተኛ ቅድሚያ ያላቸው የማሳወቂያ አዶዎችን አሳይ"</string>
<string name="other" msgid="429768510980739978">"ሌላ"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ሰቅ አስወግድ"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"በመጨረሻው ቦታ ላይ ሰቅ ያክሉ"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ሰቁን ውሰድ"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"የቅርብ ጊዜ መተግበሪያዎችን አሳይ"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"መተግበሪያዎችን ይቀያይሩ"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"ተከናውኗል"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"እንደገና ይሞክሩ!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ወደኋላ ተመለስ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"የመዳሰሻ ሰሌዳዎ ላይ ሦስት ጣቶችን በመጠቀም ወደ ግራ ወይም ወደ ቀኝ ያንሸራትቱ"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"የቅርብ ጊዜ መተግበሪያዎችን ለማየት የመዳሰሻ ሰሌዳው ላይ በሦስት ጣቶች ወደላይ ያንሸራትቱ እና ይያዙ"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"ሁሉንም መተግበሪያዎችዎን ለማየት በቁልፍ ሰሌዳዎ ላይ ያለውን የተግባር ቁልፍ ይጫኑ"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"ጽሁፍ ተቀይሯል"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"ለመመልከት ይክፈቱ"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"የዓውድ ትምህርት"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"ለመመለስ የመዳሰሻ ሰሌዳዎን ይጠቀሙ"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"ሦስት ጣቶችን በመጠቀም ወደ ግራ ወይም ወደ ቀኝ ያንሸራትቱ። ምልክቶችን የበለጠ ለማወቅ መታ ያድርጉ።"</string>
diff --git a/packages/SystemUI/res/values-am/tiles_states_strings.xml b/packages/SystemUI/res/values-am/tiles_states_strings.xml
index 31a7d962f39a..f8e7a4387411 100644
--- a/packages/SystemUI/res/values-am/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-am/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"ጠፍቷል"</item>
<item msgid="5908720590832378783">"በርቷል"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"አይገኝም"</item>
+ <item msgid="6641673879029894995">"ጠፍቷል"</item>
+ <item msgid="5806682401126108403">"በርቷል"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 7d55b85db2bb..905183ca9825 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"تم توصيل البلوتوث."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"رمز الجهاز الذي يتضمّن بلوتوث"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"انقر هنا لضبط إعدادات الجهاز."</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"انقر لعرض جميع الأجهزة."</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"انقر لإقران جهاز جديد."</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"الإدخال"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"سماعات الأذن الطبية"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"جارٍ التفعيل…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"لا يمكن ضبط مستوى السطوع لأنّ\n التطبيق الأول يتحكّم فيه"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"لا يمكن ضبط مستوى السطوع لأنّ التطبيق الأول يتحكّم فيه"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"التدوير التلقائي"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"التدوير التلقائي للشاشة"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"الموقع الجغرافي"</string>
@@ -471,7 +475,7 @@
<string name="zen_silence_introduction" msgid="6117517737057344014">"سيؤدي هذا إلى حظر جميع الأصوات والاهتزازات، بما في ذلك ما يرد من التنبيهات والموسيقى والفيديو والألعاب."</string>
<string name="notification_tap_again" msgid="4477318164947497249">"انقر مرة أخرى للفتح"</string>
<string name="tap_again" msgid="1315420114387908655">"انقر مرة أخرى"</string>
- <string name="keyguard_unlock" msgid="8031975796351361601">"التمرير إلى الأعلى لفتح القفل"</string>
+ <string name="keyguard_unlock" msgid="8031975796351361601">"مرِّر إلى الأعلى لفتح القفل"</string>
<string name="keyguard_unlock_press" msgid="9140109453735019209">"اضغط على رمز فتح القفل لفتح قفل الشاشة."</string>
<string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"تم فتح قفل جهازك عند تقريبه من وجهك. مرِّر سريعًا للأعلى لفتح الجهاز."</string>
<string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"تم فتح القفل ببصمة وجهك. لفتح الجهاز، اضغط على رمز فتح القفل."</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"لا يدعم تطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> ميزات المحادثات."</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"الملاحظات"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"إغلاق"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"عدم العرض كإشعار مثبَّت"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"عرض تغطية مباشرة للأخبار"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"تعرِض الإشعارات المثبَّتة معلومات مباشرة من التطبيقات، وتظهر دائمًا في شريط الحالة وعلى شاشة القفل"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"يتعذّر تعديل هذه الإشعارات."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"لا يمكن تعديل إشعارات المكالمات."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"يتعذّر ضبط مجموعة الإشعارات هذه هنا."</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"تعدُّد المهام"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"استخدام \"وضع تقسيم الشاشة\" مع تثبيت التطبيق على اليمين"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"استخدام \"وضع تقسيم الشاشة\" مع تثبيت التطبيق على اليسار"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"التبديل إلى وضع ملء الشاشة"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"التبديل إلى التطبيق على اليسار أو الأسفل أثناء استخدام \"تقسيم الشاشة\""</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"التبديل إلى التطبيق على اليمين أو الأعلى أثناء استخدام \"تقسيم الشاشة\""</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"استبدال تطبيق بآخر في وضع \"تقسيم الشاشة\""</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"إظهار رموز الإشعارات ذات الأولوية المنخفضة"</string>
<string name="other" msgid="429768510980739978">"غير ذلك"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"إزالة بطاقة"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"إضافة مربّع إلى الموضع الأخير"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"نقل بطاقة"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"عرض التطبيقات المستخدَمة مؤخرًا"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"التبديل بين التطبيقات"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"تم"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"يُرجى إعادة المحاولة"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"رجوع"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"مرِّر سريعًا لليمين أو لليسار باستخدام 3 أصابع على لوحة اللمس"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"لعرض التطبيقات المستخدَمة مؤخرًا، مرِّر سريعًا للأعلى مع استمرار الضغط على لوحة اللمس باستخدام 3 أصابع"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"لعرض جميع التطبيقات، اضغط على مفتاح الإجراء في لوحة المفاتيح"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"إشعار مخفي"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"افتح القفل لعرض المعلومات"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"التعليم السياقي"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"استخدِم لوحة اللمس للرجوع"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"مرِّر سريعًا لليمين أو لليسار باستخدام 3 أصابع. انقر للتعرّف على المزيد من الإيماءات."</string>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index 74c4e3e17982..784dfeeaeb07 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ব্লুটুথ সংযোগ হ’ল।"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ব্লুটুথ ডিভাইচৰ চিহ্ন"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ডিভাইচৰ সবিশেষ কনফিগাৰ কৰিবলৈ ক্লিক কৰক"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"আটাইবোৰ ডিভাইচ চাবলৈ ক্লিক কৰক"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"নতুন ডিভাইচ পেয়াৰ কৰিবলৈ ক্লিক কৰক"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ বাৰ্তালাপৰ সুবিধাসমূহ সমৰ্থন নকৰে"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"মতামত"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"অগ্ৰাহ্য কৰক"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"পিন কৰা হিচাপে নেদেখুৱাব"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"লাইভ আপডে’ট দেখুওৱা"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"পিন কৰি থোৱা জাননীসমূহে এপৰ পৰা লাইভ তথ্য দেখুৱায় আৰু সেয়া সদায় স্থিতি দণ্ড আৰু লক স্ক্ৰীনত ওলায়"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"এই জাননীসমূহ সংশোধন কৰিব নোৱাৰি।"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"কলৰ জাননীসমূহ সংশোধন কৰিব নোৱাৰি।"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"এই ধৰণৰ জাননীবোৰ ইয়াত কনফিগাৰ কৰিব পৰা নাযায়"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"মাল্টিটাস্কিং"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"সোঁফালে থকা এপ্‌টোৰ সৈতে বিভাজিত স্ক্ৰীন ব্যৱহাৰ কৰক"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"বাওঁফালে থকা এপ্‌টোৰ সৈতে বিভাজিত স্ক্ৰীন ব্যৱহাৰ কৰক"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"পূৰ্ণ স্ক্ৰীনলৈ সলনি কৰক"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"বিভাজিত স্ক্ৰীন ব্যৱহাৰ কৰাৰ সময়ত সোঁফালে অথবা তলত থকা এপলৈ সলনি কৰক"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"বিভাজিত স্ক্ৰীন ব্যৱহাৰ কৰাৰ সময়ত বাওঁফালে অথবা ওপৰত থকা এপলৈ সলনি কৰক"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"বিভাজিত স্ক্ৰীনৰ ব্যৱহাৰ কৰাৰ সময়ত: কোনো এপ্ এখন স্ক্ৰীনৰ পৰা আনখনলৈ নিয়ক"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"কম গুৰুত্বপূৰ্ণ জাননীৰ আইকনসমূহ দেখুৱাওক"</string>
<string name="other" msgid="429768510980739978">"অন্যান্য"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"টাইল আঁতৰাবলৈ"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"অন্তিম স্থানত টাইল যোগ দিয়ক"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"টাইল স্থানান্তৰ কৰক"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"শেহতীয়া এপ্‌সমূহ চাওক"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"এপ্‌সমূহ সলনি কৰক"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"হ’ল"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"পুনৰ চেষ্টা কৰক!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"উভতি যাওক"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"আপোনাৰ টাচ্চপেডত তিনিটা আঙুলি ব্যৱহাৰ কৰি বাওঁফাললৈ বা সোঁফাললৈ ছোৱাইপ কৰক"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"শেহতীয়া এপ্‌সমূহ চাবলৈ টাচ্চপেডখনত তিনিটা আঙুলিৰে ওপৰলৈ ছোৱাইপ কৰি ধৰি ৰাখক"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"আপোনাৰ আটাইবোৰ এপ্‌ চাবলৈ আপোনাৰ কীব’ৰ্ডৰ কাৰ্য কীটোত টিপক"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"সম্পাদনা কৰা হৈছে"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"চাবলৈ আনলক কৰক"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"প্ৰাসংগিক শিক্ষা"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"উভতি যাবলৈ আপোনাৰ টাচ্চপেড ব্যৱহাৰ কৰক"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"তিনিটা আঙুলি ব্যৱহাৰ কৰি বাওঁফাললৈ বা সোঁফাললৈ ছোৱাইপ কৰক। অধিক নিৰ্দেশ শিকিবলৈ টিপক।"</string>
diff --git a/packages/SystemUI/res/values-as/tiles_states_strings.xml b/packages/SystemUI/res/values-as/tiles_states_strings.xml
index 68212e0163b6..ba30c1e7db0a 100644
--- a/packages/SystemUI/res/values-as/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-as/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"অফ আছে"</item>
<item msgid="5908720590832378783">"অন আছে"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"উপলব্ধ নহয়"</item>
+ <item msgid="6641673879029894995">"অফ আছে"</item>
+ <item msgid="5806682401126108403">"অন আছে"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 4b316b67bb7a..20f3e37beec1 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth qoşulub."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth cihazı ikonası"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Cihaz təfərrüatlarını konfiqurasiya etmək üçün klikləyin"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Bütün cihazları görmək üçün klikləyin"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Yeni cihazı birləşdirmək üçün klikləyin"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Giriş"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Eşitmə aparatları"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aktiv edilir..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Yuxarıdakı tətbiq tərəfindən idarə olunduğu üçün\n parlaqlığı tənzimləmək mümkün deyil"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Yuxarıdakı tətbiq tərəfindən idarə olunduğu üçün parlaqlığı tənzimləmək mümkün deyil"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Avtodönüş"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Ekranın avtomatik dönməsi"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Məkan"</string>
@@ -808,12 +812,9 @@
<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>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Rəy"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Rədd edin"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Bərkidilmiş kimi göstərməyin"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Canlı güncəlləmələr göstərilir"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Bərkidilmiş bildirişlər tətbiqlərdəki canlı məlumatları göstərir, həmişə status panelində və kilidli ekranda görünür"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirişlər dəyişdirilə bilməz."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Zəng bildirişləri dəyişdirilə bilməz."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Bu bildiriş qrupunu burada konfiqurasiya etmək olmaz"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Çoxsaylı tapşırıq icrası"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Tətbiq sağda olmaqla bölünmüş ekranı istifadə edin"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Tətbiq solda olmaqla bölünmüş ekranı istifadə edin"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Tam ekran rejiminə keçin"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Bölünmüş ekran istifadə edərkən sağda və ya aşağıda tətbiqə keçin"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Bölünmüş ekran istifadə edərkən solda və ya yuxarıda tətbiqə keçin"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Bölünmüş ekran rejimində: tətbiqi birindən digərinə dəyişin"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Aşağı prioritet bildiriş işarələrini göstərin"</string>
<string name="other" msgid="429768510980739978">"Digər"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"lövhəni silin"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"son mövqeyə mozaik əlavə edin"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Lövhəni köçürün"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Son tətbiqlərə baxın"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Başqa tətbiqə keçin"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Hazırdır"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Yenidən cəhd edin!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Geri qayıdın"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Taçpeddə üç barmaqla sola və ya sağa sürüşdürün"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Son tətbiqlərə baxmaq üçün taçpeddə üç barmağınızla yuxarı çəkib saxlayın"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Bütün tətbiqlərə baxmaq üçün klaviaturada fəaliyyət açarını basın"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Çıxarılıb"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Baxmaq üçün kiliddən çıxarın"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstual təhsil"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Geri qayıtmaq üçün taçped istifadə edin"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Üç barmaqla sola və ya sağa çəkin. Daha çox jest öyrənmək üçün toxunun."</string>
diff --git a/packages/SystemUI/res/values-az/tiles_states_strings.xml b/packages/SystemUI/res/values-az/tiles_states_strings.xml
index 696fad22a991..74b95e2842e2 100644
--- a/packages/SystemUI/res/values-az/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-az/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Deaktiv"</item>
<item msgid="5908720590832378783">"Aktiv"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Əlçatan deyil"</item>
+ <item msgid="6641673879029894995">"Sönülü"</item>
+ <item msgid="5806682401126108403">"Yanılı"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index 9a5bc490764c..69ebc70b6474 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth je priključen."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikona Bluetooth uređaja"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kliknite da biste konfigurisali detalje o uređaju"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Kliknite da biste videli sve uređaje"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Kliknite da biste uparili nov uređaj"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfigurišite detalje o uređaju"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Pogledajte sve uređaje"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Uparite novi uređaj"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Procenat napunjenosti baterije nije poznat."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Povezani ste sa <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Povezani smo sa uređajem <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Unos"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Slušni aparati"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Uključuje se..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ne možete da prilagodite osvetljenost jer je\n kontroliše aplikacija u vrhu"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ne možete da prilagodite osvetljenost jer je kontroliše aplikacija u vrhu"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatska rotacija"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatsko rotiranje ekrana"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokacija"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ne podržava funkcije konverzacije"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Povratne informacije"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Odbaci"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Ne prikazuj kao zakačeno"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Prikazuju se novosti uživo"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Zakačena obaveštenja prikazuju informacije uživo iz aplikacija i uvek se pojavljuju na statusnoj traci i zaključanom ekranu"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ova obaveštenja ne mogu da se menjaju."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Obaveštenja o pozivima ne mogu da se menjaju."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Ova grupa obaveštenja ne može da se konfiguriše ovde"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Obavljanje više zadataka istovremeno"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Koristi podeljeni ekran sa aplikacijom s desne strane"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Koristi podeljeni ekran sa aplikacijom s leve strane"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Pređi na režim preko celog ekrana"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Koristi prikaz preko celog ekrana"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Koristi prikaz za računare"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Pređi u aplikaciju zdesna ili ispod dok je podeljen ekran"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Pređite u aplikaciju sleva ili iznad dok koristite podeljeni ekran"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"U režimu podeljenog ekrana: zamena jedne aplikacije drugom"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Prikaži ikone obaveštenja niskog prioriteta"</string>
<string name="other" msgid="429768510980739978">"Drugo"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"uklonili pločicu"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"dodali pločicu na poslednju poziciju"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Premestite pločicu"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Prikaži nedavno korišćene aplikacije"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Pređi na drugu aplikaciju"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Gotovo"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Dalje"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Probajte ponovo."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Nazad"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Prevucite ulevo ili udesno sa tri prsta na tačpedu"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Da biste pregledali nedavne aplikacije, prevucite nagore i zadržite sa tri prsta na tačpedu"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Da biste pogledali sve aplikacije, pritisnite taster radnji na tastaturi"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Redigovano"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Otključajte za prikaz"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstualno obrazovanje"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Koristite tačped za vraćanje nazad"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Prevucite ulevo ili udesno sa tri prsta. Dodirnite da biste videli više pokreta."</string>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/tiles_states_strings.xml b/packages/SystemUI/res/values-b+sr+Latn/tiles_states_strings.xml
index 3b9901937dd3..51b667c3fafd 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Isključeno"</item>
<item msgid="5908720590832378783">"Uključeno"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Nedostupno"</item>
+ <item msgid="6641673879029894995">"Isključeno"</item>
+ <item msgid="5806682401126108403">"Uključeno"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 5fc56bc798c8..7c7c364fe502 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth-сувязь."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Значок прылады з Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Націсніце, каб задаць падрабязныя налады прылады"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Націсніце, каб пабачыць усе прылады"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Націсніце, каб спалучыць новую прыладу"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Наладзіць звесткі пра прыладу"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Паглядзець усе прылады"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Спалучыць новую прыладу"</string>
<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>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Увод"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слыхавыя апараты"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Уключэнне…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Не ўдаецца адрэгуляваць яркасць, бо яна\nкантралюецца асноўнай праграмай"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Не ўдаецца адрэгуляваць яркасць, бо янакантралюецца асноўнай праграмай"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Аўтапаварот"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Аўтаматычны паварот экрана"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Месцазнаходжанне"</string>
@@ -471,7 +472,7 @@
<string name="zen_silence_introduction" msgid="6117517737057344014">"Гэта заблакіруе ЎСЕ гукі і вібрацыі, у тым ліку ад будзільнікаў, музыкі, відэа і гульняў."</string>
<string name="notification_tap_again" msgid="4477318164947497249">"Дакраніцеся яшчэ раз, каб адкрыць"</string>
<string name="tap_again" msgid="1315420114387908655">"Націсніце яшчэ раз"</string>
- <string name="keyguard_unlock" msgid="8031975796351361601">"Каб адкрыць, прагарніце ўверх"</string>
+ <string name="keyguard_unlock" msgid="8031975796351361601">"Каб адкрыць, правядзіце пальцам уверх"</string>
<string name="keyguard_unlock_press" msgid="9140109453735019209">"Каб адкрыць, націсніце значок разблакіроўкі"</string>
<string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Твар распазнаны. Каб адкрыць, прагарніце ўверх."</string>
<string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Твар распазнаны. Для адкрыцця націсніце значок разблакіроўкі"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> не падтрымлівае функцыі размовы"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Водгук"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Закрыць"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Не паказваць як замацаванае"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Паказ навін у рэальным часе"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Замацаваныя апавяшчэнні паказваюць актуальную інфармацыю з праграм і заўсёды з’яўляюцца на панэлі стану і экране блакіроўкі"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Гэтыя апавяшчэнні нельга змяніць."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Апавяшчэнні пра выклікі нельга змяніць."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Тут канфігурыраваць гэту групу апавяшчэнняў забаронена"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Шматзадачнасць"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Падзяліць экран і памясціць праграму справа"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Падзяліць экран і памясціць праграму злева"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Уключыць поўнаэкранны рэжым"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Выкарыстоўваць поўнаэкранны рэжым"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Выкарыстоўваць версію для камп’ютараў"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Пераключыцца на праграму справа або ўнізе на падзеленым экране"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Пераключыцца на праграму злева або ўверсе на падзеленым экране"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"У рэжыме падзеленага экрана замяніць адну праграму на іншую"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Паказваць значкі апавяшчэнняў з нізкім прыярытэтам"</string>
<string name="other" msgid="429768510980739978">"Іншае"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"выдаліць плітку"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"дадаць плітку ў апошнюю пазіцыю"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Перамясціць плітку"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Прагляд нядаўніх праграм"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Пераключэнне праграм"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Гатова"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Далей"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Паспрабуйце яшчэ раз!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Назад"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Правядзіце па сэнсарнай панэлі трыма пальцамі ўлева ці ўправа"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Для прагляду нядаўніх праграм правядзіце па сэнсарнай панэлі трыма пальцамі ўверх і затрымайцеся"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Каб праглядзець усе праграмы, націсніце на клавішу дзеяння на клавіятуры"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Схавана"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Разблакіруйце экран, каб праглядзець"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Кантэкстнае навучанне"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Выкарыстайце сэнсарную панэль для вяртання"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Правядзіце ўлева ці ўправа трыма пальцамі. Націсніце, каб азнаёміцца з іншымі жэстамі."</string>
diff --git a/packages/SystemUI/res/values-be/tiles_states_strings.xml b/packages/SystemUI/res/values-be/tiles_states_strings.xml
index 9f520da995ff..cbbfe925c893 100644
--- a/packages/SystemUI/res/values-be/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-be/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Выключана"</item>
<item msgid="5908720590832378783">"Уключана"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Недаступна"</item>
+ <item msgid="6641673879029894995">"Выключана"</item>
+ <item msgid="5806682401126108403">"Уключана"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 339d751b1594..0f2ab1783fc7 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth е включен."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Икона за устройство с Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Кликнете, за да конфигурирате подробностите за устройството"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Кликнете, за да видите всички устройства"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Кликнете за сдвояване на ново устройство"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Вход"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слухови апарати"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Включва се..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Яркостта не може да се коригира, защото се контролира\n от приложението на екрана"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Яркостта не може да се коригира, защото се контролира от приложението на екрана"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Авт. ориентация"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоматично завъртане на екрана"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Местоположение"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> не поддържа функциите за разговор"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Отзиви"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Отхвърляне"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Без показване като фиксирано"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Показване на актуализации на живо"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Фиксираните известия показват информация в реално време от приложенията и винаги се показват в лентата на състоянието и на заключения екран"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Тези известия не могат да бъдат променяни."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Известията за обаждания не могат да бъдат променяни."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Тази група от известия не може да бъде конфигурирана тук"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Няколко задачи едновременно"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Използване на разделен екран с приложението вдясно"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Използване на разделен екран с приложението вляво"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Превключване на цял екран"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Превключване към приложението вдясно/отдолу в режима на разделен екран"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Превключване към приложението вляво/отгоре в режима на разделен екран"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"При разделен екран: замяна на дадено приложение с друго"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Показване на иконите за известията с нисък приоритет"</string>
<string name="other" msgid="429768510980739978">"Друго"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"премахване на панел"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"добавяне на панела на последната позиция"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Преместване на панел"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Преглед на скорошните приложения"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Превключване на приложенията"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Готово"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Опитайте отново!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Назад"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Плъзнете три пръста наляво или надясно по сензорния панел"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"За да прегледате скорошните приложения, плъзнете нагоре по сензорния панел с три пръста и задръжте"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"За да прегледате всичките си приложения, натиснете клавиша за действия на клавиатурата си"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Скрито"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Отключете за преглед"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Контекстуално обучение"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Използвайте сензорния панел, за да се върнете назад"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Плъзнете три пръста наляво или надясно. Докоснете, за да научите повече жестове."</string>
diff --git a/packages/SystemUI/res/values-bg/tiles_states_strings.xml b/packages/SystemUI/res/values-bg/tiles_states_strings.xml
index e598f928aad1..636585d2a22b 100644
--- a/packages/SystemUI/res/values-bg/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-bg/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Изкл."</item>
<item msgid="5908720590832378783">"Вкл."</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Не е налице"</item>
+ <item msgid="6641673879029894995">"Изкл."</item>
+ <item msgid="5806682401126108403">"Вкл."</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index ef1253b55de0..10a1fd63c22e 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ব্লুটুথ সংযুক্ত হয়েছে৷"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ব্লুটুথ ডিভাইসের আইকন"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ডিভাইসের বিবরণ কনফিগার করতে ক্লিক করুন"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"সব ডিভাইস দেখতে ক্লিক করুন"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"নতুন ডিভাইস পেয়ার করতে ক্লিক করুন"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ইনপুট"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"হিয়ারিং এড"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"চালু করা হচ্ছে…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"উজ্জ্বলতা টপ অ্যাপ নিয়ন্ত্রণ করায়\n এটিকে অ্যাডজাস্ট করা যাচ্ছে না"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"উজ্জ্বলতা টপ অ্যাপ নিয়ন্ত্রণ করায় এটিকে অ্যাডজাস্ট করা যাচ্ছে না"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"নিজে থেকে ঘুরবে"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"অটো-রোটেট স্ক্রিন"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"লোকেশন"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g>-এ কথোপকথন ফিচার কাজ করে না"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"মতামত"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"বাতিল করুন"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"পিন করা হিসেবে দেখতে চাই না"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"লাইভ আপডেট দেখানো হচ্ছে"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"পিন করা বিজ্ঞপ্তিগুলি অ্যাপ থেকে লাইভ তথ্য দেখায় এবং তা সর্বদা স্ট্যাটাস বার ও লক স্ক্রিনে দেখানো হয়"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"এই বিজ্ঞপ্তিগুলি পরিবর্তন করা যাবে না।"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"কল বিজ্ঞপ্তি পরিবর্তন করা যাবে না।"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"এই সমস্ত বিজ্ঞপ্তিকে এখানে কনফিগার করা যাবে না"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"মাল্টিটাস্কিং"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ডানদিকে বর্তমান অ্যাপে স্প্লিট স্ক্রিন ব্যবহার করুন"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"বাঁদিকে বর্তমান অ্যাপে স্প্লিট স্ক্রিন ব্যবহার করুন"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"ফুল-স্ক্রিন মোডে সুইচ করুন"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"স্প্লিট স্ক্রিন ব্যবহার করার সময় ডানদিকের বা নিচের অ্যাপে পাল্টে নিন"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"স্প্লিট স্ক্রিন ব্যবহার করার সময় বাঁদিকের বা উপরের অ্যাপে পাল্টে নিন"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"\'স্প্লিট স্ক্রিন\' থাকাকালীন: একটি অ্যাপ থেকে অন্যটিতে পাল্টান"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"কম-গুরুত্বপূর্ণ বিজ্ঞপ্তির আইকন দেখুন"</string>
<string name="other" msgid="429768510980739978">"অন্যান্য"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"টাইল সরান"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"শেষ জায়গাতে টাইল যোগ করুন"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"টাইল সরান"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"সম্প্রতি ব্যবহার করা হয়েছে এমন অ্যাপ দেখুন"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"অ্যাপ পরিবর্তন করুন"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"হয়ে গেছে"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"আবার চেষ্টা করুন!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ফিরে যান"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"আপনার টাচপ্যাডে তিনটি আঙুল ব্যবহার করে বাঁদিকে বা ডানদিকে সোয়াইপ করুন"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"সম্প্রতি ব্যবহার করা অ্যাপ দেখতে, টাচপ্যাডে তিনটি আঙুল ব্যবহার করে উপরের দিকে সোয়াইপ করে ধরে রাখুন"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"আপনার সব অ্যাপ দেখতে, কীবোর্ডে অ্যাকশন কী প্রেস করুন"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"রিড্যাক্ট করা হয়েছে"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"দেখার জন্য আনলক করুন"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"প্রাসঙ্গিক শিক্ষা"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"ফিরে যেতে টাচপ্যাড ব্যবহার করুন"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"তিনটি আঙুলের ব্যবহার করে ডান বা বাঁদিকে সোয়াইপ করুন। আরও জেসচার সম্পর্কে জানতে ট্যাপ করুন।"</string>
diff --git a/packages/SystemUI/res/values-bn/tiles_states_strings.xml b/packages/SystemUI/res/values-bn/tiles_states_strings.xml
index 38d9ee72e56d..08231e4f8649 100644
--- a/packages/SystemUI/res/values-bn/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-bn/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"বন্ধ আছে"</item>
<item msgid="5908720590832378783">"চালু আছে"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"উপলভ্য নেই"</item>
+ <item msgid="6641673879029894995">"বন্ধ আছে"</item>
+ <item msgid="5806682401126108403">"চালু আছে"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index aa036d453428..8eadd4d5a6cc 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth je povezan."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikona Bluetooth uređaja"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kliknite da konfigurirate detalje uređaja"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Pregled svih uređaja klikom"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Uparivanje novog uređaja klikom"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfigurirajte pojedinosti o uređaju"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Pogledajte sve uređaje"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Upari novi uređaj"</string>
<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>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Ulaz"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Slušni aparati"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Uključivanje…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nije moguće podesiti osvijetljenost\n jer njome upravlja aplikacija pri vrhu"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nije moguće podesiti osvijetljenost jer njome upravlja aplikacija pri vrhu"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatsko rotiranje"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatsko rotiranje ekrana"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokacija"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> ne podržava funkcije razgovora"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Povratne informacije"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Odbaci"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Ne prikazuj kao zakačeno"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Prikazivanje novosti uživo"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Zakačena obavještenja prikazuju informacije uživo iz aplikacija i uvijek se prikazuju na statusnoj traci i zaključanom ekranu"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ta obavještenja se ne mogu izmijeniti."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Nije moguće izmijeniti obavještenja o pozivima."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Ovu grupu obavještenja nije moguće konfigurirati ovdje"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Korištenje podijeljenog ekrana s aplikacijom na desnoj strani"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Korištenje podijeljenog ekrana s aplikacijom na lijevoj strani"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Prelazak na prikaz preko cijelog ekrana"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Upotreba prikaza na cijelom zaslonu"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Upotreba prikaza na računalu"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Prelazak u aplikaciju desno ili ispod uz podijeljeni ekran"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Pređite u aplikaciju lijevo ili iznad dok koristite podijeljeni ekran"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Za vrijeme podijeljenog ekrana: zamjena jedne aplikacije drugom"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Prikaži ikone obavještenja niskog prioriteta"</string>
<string name="other" msgid="429768510980739978">"Ostalo"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"uklanjanje kartice"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"dodavanje kartice na posljednji položaj"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Pomjeranje kartice"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Prikaži nedavne aplikacije"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Promijenite aplikaciju"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Gotovo"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Dalje"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Pokušajte ponovo!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Nazad"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Prevucite ulijevo ili udesno s tri prsta na dodirnoj podlozi"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Da pregledate nedavne aplikacije, prevucite nagore i zadržite s tri prsta na dodirnoj podlozi"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Da pregledate sve aplikacije, pritisnite tipku radnji na tastaturi"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Redigovano"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Otključajte da pregledate"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstualno obrazovanje"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Koristite dodirnu podlogu da se vratite"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Prevucite ulijevo ili udesno s tri prsta. Dodirnite da naučite više pokreta."</string>
diff --git a/packages/SystemUI/res/values-bs/tiles_states_strings.xml b/packages/SystemUI/res/values-bs/tiles_states_strings.xml
index 3b9901937dd3..51b667c3fafd 100644
--- a/packages/SystemUI/res/values-bs/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-bs/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Isključeno"</item>
<item msgid="5908720590832378783">"Uključeno"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Nedostupno"</item>
+ <item msgid="6641673879029894995">"Isključeno"</item>
+ <item msgid="5806682401126108403">"Uključeno"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 15d928308e69..8e4da1db7327 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth connectat."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icona de dispositiu Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Fes clic per configurar els detalls del dispositiu"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Fes clic per veure tots els dispositius"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Fes clic per vincular un dispositiu nou"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audiòfons"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"S\'està activant…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"No es pot ajustar la brillantor perquè\n està controlada per l\'aplicació superior"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"No es pot ajustar la brillantor perquè està controlada per l\'aplicació superior"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Gira automàticament"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Gira la pantalla automàticament"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Ubicació"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> no admet les funcions de converses"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Suggeriments"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Ignora"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"No mostris com a fixat"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"S\'estan mostrant les actualitzacions en temps real"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Les notificacions fixades mostren informació en temps real de les aplicacions i sempre es mostren a la barra d\'estat i a la pantalla de bloqueig"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Aquestes notificacions no es poden modificar."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Les notificacions de trucades no es poden modificar."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Aquest grup de notificacions no es pot configurar aquí"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasca"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Utilitzar la pantalla dividida amb l\'aplicació a la dreta"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Utilitzar la pantalla dividida amb l\'aplicació a l\'esquerra"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Canviar a pantalla completa"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Canvia a l\'aplicació de la dreta o de sota amb la pantalla dividida"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Canvia a l\'aplicació de l\'esquerra o de dalt amb la pantalla dividida"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Durant el mode de pantalla dividida: substitueix una app per una altra"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Mostra les icones de notificació amb prioritat baixa"</string>
<string name="other" msgid="429768510980739978">"Altres"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"suprimir el mosaic"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"afegir una icona a la darrera posició"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mou el mosaic"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Mostra les aplicacions recents"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Canviar d\'aplicació"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Fet"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Torna-ho a provar"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Torna"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Llisca cap a l\'esquerra o cap a la dreta amb tres dits al ratolí tàctil"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Per veure les aplicacions recents, llisca cap amunt amb tres dits i mantén premut al ratolí tàctil"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Per veure totes les aplicacions, prem la tecla d\'acció al teclat"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Emmascarat"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Desbloqueja per veure"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Educació contextual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Utilitza el ratolí tàctil per tornar enrere"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Fes lliscar tres dits cap a l\'esquerra o cap a la dreta. Toca per aprendre més gestos."</string>
diff --git a/packages/SystemUI/res/values-ca/tiles_states_strings.xml b/packages/SystemUI/res/values-ca/tiles_states_strings.xml
index e0c3fb9c7c73..3b0b9d7cc434 100644
--- a/packages/SystemUI/res/values-ca/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ca/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Desactivat"</item>
<item msgid="5908720590832378783">"Activat"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"No disponible"</item>
+ <item msgid="6641673879029894995">"Desactivat"</item>
+ <item msgid="5806682401126108403">"Activat"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 031e59d03bb0..6d38055c0f86 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Rozhraní Bluetooth je připojeno."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikona zařízení Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kliknutím nakonfigurujete podrobnosti o zařízení"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Kliknutím zobrazíte všechna zařízení"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Kliknutím spárujete nové zařízení"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Vstup"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Naslouchátka"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Zapínání…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Jas nelze upravit, protože ho\n řídí hlavní aplikace"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Jas nelze upravit, protože ho řídí hlavní aplikace"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autom. otáčení"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatické otáčení obrazovky"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Poloha"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"Aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> funkce konverzace nepodporuje"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Zpětná vazba"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Zavřít"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Zobrazovat připnuté"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Zobrazování aktualit živě"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Připnutá oznámení zobrazují živé informace z aplikací a vždy se zobrazují na stavovém řádku a obrazovce uzamčení"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Tato oznámení nelze upravit."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Upozornění na hovor nelze upravit."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Tuto skupinu oznámení tady nelze nakonfigurovat"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Použít rozdělenou obrazovku s aplikací vpravo"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Použít rozdělenou obrazovku s aplikací vlevo"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Přepnout na celou obrazovku"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Přepnout na aplikaci vpravo nebo dole v režimu rozdělené obrazovky"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Přepnout na aplikaci vlevo nebo nahoře v režimu rozdělené obrazovky"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"V režimu rozdělené obrazovky: nahradit jednu aplikaci druhou"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Zobrazit ikony oznámení s nízkou prioritou"</string>
<string name="other" msgid="429768510980739978">"Jiné"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"odstranit dlaždici"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"přidat dlaždici na poslední pozici"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Přesunout dlaždici"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Zobrazit nedávné aplikace"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Přepnout aplikace"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Hotovo"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Zkuste to znovu."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Zpět"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Přejeďte po touchpadu třemi prsty doleva nebo doprava"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Pokud chcete zobrazit poslední aplikace, přejeďte na touchpadu třemi prsty nahoru a podržte je"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Pokud chcete zobrazit všechny aplikace, stiskněte na klávesnici akční klávesu"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Odstraněno"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"K zobrazení je potřeba zařízení odemknout"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontextová výuka"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Návrat zpět pomocí touchpadu"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Přejeďte třemi prsty doleva nebo doprava. Další gesta zjistíte klepnutím."</string>
diff --git a/packages/SystemUI/res/values-cs/tiles_states_strings.xml b/packages/SystemUI/res/values-cs/tiles_states_strings.xml
index ea62773166f3..49770328c94d 100644
--- a/packages/SystemUI/res/values-cs/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-cs/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Vypnuto"</item>
<item msgid="5908720590832378783">"Zapnuto"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Nedostupné"</item>
+ <item msgid="6641673879029894995">"Vypnuto"</item>
+ <item msgid="5806682401126108403">"Zapnuto"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 1ddaf8c84cdf..a5801cb24e4b 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth tilsluttet."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikon for Bluetooth-enhed"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klik for at konfigurere enhedsoplysninger"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Klik for at se alle enheder"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Klik for at parre en ny enhed"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Batteriniveauet er ukendt."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Forbundet med <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Forbundet til <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Høreapparater"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aktiverer…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Lysstyrken kan ikke justeres, fordi den\n styres af den øverste app"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Lysstyrken kan ikke justeres, fordi den styres af den øverste app"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Roter automatisk"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Roter skærmen automatisk"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokation"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> understøtter ikke samtalefunktioner"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Luk"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Vis ikke som fastgjort"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Viser liveopdateringer"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Fastgjorte notifikationer viser liveoplysninger fra apps og vises altid på statusbjælken og låseskærmen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Disse notifikationer kan ikke redigeres."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Opkaldsnotifikationer kan ikke redigeres."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Du kan ikke konfigurere denne gruppe notifikationer her"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Brug opdelt skærm med appen til højre"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Brug opdelt skærm med appen til venstre"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Skift til fuld skærm"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Skift til en app til højre eller nedenfor, når du bruger opdelt skærm"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Skift til en app til venstre eller ovenfor, når du bruger opdelt skærm"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Ved opdelt skærm: Udskift én app med en anden"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Vis ikoner for notifikationer med lav prioritet"</string>
<string name="other" msgid="429768510980739978">"Andet"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"fjern felt"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"føj handlingsfeltet til den sidste position"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Flyt felt"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Se seneste apps"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Skift mellem apps"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Udfør"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Prøv igen!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Gå tilbage"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Stryg til venstre eller højre med tre fingre på touchpladen"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Du kan se nyligt brugte apps ved at stryge opad og holde tre fingre nede på touchpladen"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Du kan se alle dine apps ved at trykke på handlingstasten på dit tastatur"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Skjult"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Lås op for at se"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstbaseret uddannelse"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Brug din touchplade til at gå tilbage"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Stryg til venstre eller højre med tre fingre. Tryk for at lære flere bevægelser."</string>
diff --git a/packages/SystemUI/res/values-da/tiles_states_strings.xml b/packages/SystemUI/res/values-da/tiles_states_strings.xml
index 2b1dbcfe0d73..af6dafbc614e 100644
--- a/packages/SystemUI/res/values-da/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-da/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Fra"</item>
<item msgid="5908720590832378783">"Til"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Ikke tilgængelig"</item>
+ <item msgid="6641673879029894995">"Fra"</item>
+ <item msgid="5806682401126108403">"Til"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 16bbea1c4df2..132de74dcca9 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Mit Bluetooth verbunden"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Symbol des Bluetooth-Geräts"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klicke, um das Gerätedetail zu konfigurieren"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Klicken, um alle Geräte anzeigen zu lassen"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Klicken, um neues Gerät zu koppeln"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Eingabe"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hörgerät"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Wird aktiviert…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Die Helligkeit kann nicht angepasst werden, weil sie\n von der obersten App gesteuert wird"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Die Helligkeit kann nicht angepasst werden, weil sie von der obersten App gesteuert wird"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autom. drehen"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Bildschirm automatisch drehen"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Standort"</string>
@@ -506,7 +510,7 @@
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Wische nach links, um das gemeinsame Tutorial zu starten"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Anpassen"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Schließen"</string>
- <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"Hier kannst du Widgets hinzufügen, entfernen und neu anordnen"</string>
+ <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"Widgets hinzufügen, entfernen und neu anordnen"</string>
<string name="cta_label_to_open_widget_picker" msgid="3874946756976360699">"Weitere Widgets hinzufügen"</string>
<string name="popup_on_dismiss_cta_tile_text" msgid="8292501780996070019">"Lange drücken, um Widgets anzupassen"</string>
<string name="button_to_configure_widgets_text" msgid="4191862850185256901">"Widgets anpassen"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> unterstützt keine Funktionen für Unterhaltungen"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Schließen"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Nicht als angepinnt anzeigen"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Livemeldungen werden angezeigt"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Aktuelle Informationen aus Apps werden als angeheftete Benachrichtigungen angezeigt, die immer in der Statusleiste und auf dem Sperrbildschirm erscheinen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Diese Benachrichtigungen können nicht geändert werden."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Anrufbenachrichtigungen können nicht geändert werden."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Die Benachrichtigungsgruppe kann hier nicht konfiguriert werden"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Splitscreen mit der App auf der rechten Seite nutzen"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Splitscreen mit der App auf der linken Seite nutzen"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"In den Vollbildmodus wechseln"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Im Splitscreen-Modus zu einer App rechts oder unten wechseln"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Im Splitscreen-Modus zu einer App links oder oben wechseln"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Im Splitscreen: eine App durch eine andere ersetzen"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Symbole für Benachrichtigungen mit einer niedrigen Priorität anzeigen"</string>
<string name="other" msgid="429768510980739978">"Sonstiges"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"Entfernen der Kachel"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"Kachel an letzter Position hinzufügen"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Kachel verschieben"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Letzte Apps aufrufen"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Zwischen Apps wechseln"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Fertig"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Noch einmal versuchen"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Zurück"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Wische mit drei Fingern auf dem Touchpad nach links oder rechts"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Um zuletzt verwendete Apps aufzurufen, wische mit 3 Fingern nach oben und halte das Touchpad gedrückt"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Wenn du alle deine Apps aufrufen möchtest, drücke auf der Tastatur die Aktionstaste"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Entfernt"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Zum Ansehen entsperren"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontextbezogene Informationen"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Zum Zurückgehen Touchpad verwenden"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Wische mit drei Fingern nach links oder rechts. Tippe für mehr Infos zu Touch-Gesten."</string>
diff --git a/packages/SystemUI/res/values-de/tiles_states_strings.xml b/packages/SystemUI/res/values-de/tiles_states_strings.xml
index ded7efd39cf0..44734aec80e9 100644
--- a/packages/SystemUI/res/values-de/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-de/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Aus"</item>
<item msgid="5908720590832378783">"An"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Nicht verfügbar"</item>
+ <item msgid="6641673879029894995">"Aus"</item>
+ <item msgid="5806682401126108403">"An"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 89c2cd2db876..a628e214cd9f 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Το Bluetooth είναι συνδεδεμένο."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Εικονίδιο συσκευής Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Κάντε κλικ για να διαμορφώσετε τις λεπτομέρειες συσκευής"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Κάντε κλικ για εμφάνιση όλων των συσκευών"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Κάντε κλικ για σύζευξη νέας συσκευής"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Είσοδος"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Βοηθήματα ακοής"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Ενεργοποίηση…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Δεν είναι δυνατή η προσαρμογή της φωτεινότητας, επειδή\n ελέγχεται από την εφαρμογή στην κορυφή"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Δεν είναι δυνατή η προσαρμογή της φωτεινότητας, επειδή ελέγχεται από την εφαρμογή στην κορυφή"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Αυτόματη περιστροφή"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Αυτόματη περιστροφή οθόνης"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Τοποθεσία"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"Η εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> δεν υποστηρίζει τις λειτουργίες συζήτησης"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Σχόλια"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Παράβλεψη"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Να μην φαίνεται καρφιτσωμένο"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Εμφανίζονται οι ενημερώσεις σε πραγματικό χρόνο"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Οι καρφιτσωμένες ειδοποιήσεις προβάλλουν ζωντανές πληροφορίες από εφαρμογές και εμφανίζονται πάντα στη γραμμή κατάστασης και στην οθόνη κλειδώματος"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Δεν είναι δυνατή η τροποποίηση αυτών των ειδοποιήσεων"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Δεν είναι δυνατή η τροποποίηση των ειδοποιήσεων κλήσεων."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Δεν είναι δυνατή η διαμόρφωση αυτής της ομάδας ειδοποιήσεων εδώ"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Πολυδιεργασία"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Χρήση διαχωρισμού οθόνης με την εφαρμογή στα δεξιά"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Χρήση διαχωρισμού οθόνης με την εφαρμογή στα αριστερά"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Εναλλαγή σε πλήρη οθόνη"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Εναλλαγή στην εφαρμογή δεξιά ή κάτω κατά τη χρήση διαχωρισμού οθόνης"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Εναλλαγή σε εφαρμογή αριστερά ή επάνω κατά τη χρήση διαχωρισμού οθόνης"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Κατά τον διαχωρισμό οθόνης: αντικατάσταση μιας εφαρμογής με άλλη"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Εμφάνιση εικονιδίων ειδοποιήσεων χαμηλής προτεραιότητας"</string>
<string name="other" msgid="429768510980739978">"Άλλο"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"κατάργηση πλακιδίου"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"προσθήκη πλακιδίου στην τελευταία θέση"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Μετακίνηση πλακιδίου"</string>
@@ -1377,7 +1383,7 @@
<string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Αλλαγή εξόδου"</string>
<string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Άγνωστο"</string>
<string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"ώ:λλ"</string>
- <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:λλ"</string>
+ <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
<string name="log_access_confirmation_title" msgid="4843557604739943395">"Να επιτρέπεται στο <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> η πρόσβαση σε όλα τα αρχεία καταγραφής συσκευής;"</string>
<string name="log_access_confirmation_allow" msgid="752147861593202968">"Να επιτρέπεται η πρόσβαση για μία φορά"</string>
<string name="log_access_confirmation_deny" msgid="2389461495803585795">"Να μην επιτρέπεται"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Προβολή πρόσφατων εφαρμογών"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Εναλλαγή μεταξύ εφαρμογών"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Τέλος"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Δοκιμάστε ξανά!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Επιστροφή"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Σύρετε προς τα αριστερά ή τα δεξιά με τρία δάχτυλα στην επιφάνεια αφής"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Για πρόσφατες εφαρμογές, σαρώστε προς τα πάνω με τρία δάχτυλα και κρατήστε τα στην επιφάνεια αφής"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Για να δείτε όλες τις εφαρμογές, πιέστε το πλήκτρο ενέργειας στο πληκτρολόγιό σας"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Αποκρύφτηκε"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Ξεκλείδωμα για προβολή"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Εκπαίδευση με βάση τα συμφραζόμενα"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Χρήση της επιφάνειας αφής για επιστροφή"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Σύρετε προς τα αριστερά ή τα δεξιά με τρία δάχτυλα. Πατήστε για να μάθετε περισσότερες κινήσεις."</string>
diff --git a/packages/SystemUI/res/values-el/tiles_states_strings.xml b/packages/SystemUI/res/values-el/tiles_states_strings.xml
index 398bf13563fb..b649db4c7e3b 100644
--- a/packages/SystemUI/res/values-el/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-el/tiles_states_strings.xml
@@ -47,7 +47,7 @@
<item msgid="287997784730044767">"Ενεργό"</item>
</string-array>
<string-array name="tile_states_battery">
- <item msgid="6311253873330062961">"Μη διαθέσιμο"</item>
+ <item msgid="6311253873330062961">"Μη διαθέσιμη"</item>
<item msgid="7838121007534579872">"Ανενεργό"</item>
<item msgid="1578872232501319194">"Ενεργό"</item>
</string-array>
@@ -118,7 +118,7 @@
</string-array>
<string-array name="tile_states_night">
<item msgid="7857498964264855466">"Μη διαθέσιμο"</item>
- <item msgid="2744885441164350155">"Ανενεργό"</item>
+ <item msgid="2744885441164350155">"Ανενεργός"</item>
<item msgid="151121227514952197">"Ενεργό"</item>
</string-array>
<string-array name="tile_states_screenrecord">
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Ανενεργό"</item>
<item msgid="5908720590832378783">"Ενεργό"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Μη διαθέσιμο"</item>
+ <item msgid="6641673879029894995">"Ανενεργό"</item>
+ <item msgid="5806682401126108403">"Ενεργό"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index af0703cfcfd3..1b36a7cc4826 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth connected."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth device icon"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Click to configure device detail"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Click to see all devices"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Click to pair new device"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hearing aids"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Turning on…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Can\'t adjust brightness because it\'s being\n controlled by the top app"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Can\'t adjust brightness because it\'s being controlled by the top app"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Location"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> doesn’t support conversation features"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Dismiss"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Don\'t show as pinned"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Showing live updates"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Pinned notifications display live info from apps and always appear on the status bar and lock screen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Call notifications can\'t be modified."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"This group of notifications cannot be configured here"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multi-tasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Use split screen with app on the right"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Use split screen with app on the left"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Switch to full screen"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Switch to the app on the right or below while using split screen"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Switch to the app on the left or above while using split screen"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"During split screen: Replace an app from one to another"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Show low-priority notification icons"</string>
<string name="other" msgid="429768510980739978">"Other"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"remove tile"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"add tile to the last position"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Move tile"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"View recent apps"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Switch apps"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Done"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Try again."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Go back"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Swipe left or right using three fingers on your touchpad"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"To view recent apps, swipe up and hold with three fingers on the touchpad"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"To view all your apps, press the action key on your keyboard"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Redacted"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Unlock to view"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Contextual education"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Use your touchpad to go back"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Swipe left or right using three fingers. Tap to learn more gestures."</string>
diff --git a/packages/SystemUI/res/values-en-rAU/tiles_states_strings.xml b/packages/SystemUI/res/values-en-rAU/tiles_states_strings.xml
index d62f2e514fbb..e17eeb2b6023 100644
--- a/packages/SystemUI/res/values-en-rAU/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Off"</item>
<item msgid="5908720590832378783">"On"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Unavailable"</item>
+ <item msgid="6641673879029894995">"Off"</item>
+ <item msgid="5806682401126108403">"On"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index f171a78618e8..c6ba039c676d 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth connected."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth device icon"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Click to configure device detail"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Click to see all devices"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Click to pair new device"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configure device detail"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"See all devices"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Pair new device"</string>
<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>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hearing aids"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Turning on…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Can\'t adjust brightness because it\'s being\n controlled by the top app"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Can\'t adjust brightness because it\'s being controlled by the top app"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Location"</string>
@@ -897,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Use split screen with app on the right"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Use split screen with app on the left"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Switch to full screen"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Use full screen"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Use desktop view"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Switch to app on right or below while using split screen"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Switch to app on left or above while using split screen"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"During split screen: replace an app from one to another"</string>
@@ -984,6 +986,7 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Show low-priority notification icons"</string>
<string name="other" msgid="429768510980739978">"Other"</string>
+ <string name="accessibility_qs_edit_toggle_tile_size_action" msgid="1485194410119733586">"toggle the tile\'s size"</string>
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"remove tile"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"add tile to the last position"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Move tile"</string>
@@ -1498,6 +1501,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"View recent apps"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Switch apps"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Done"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Next"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Try again!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Go back"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Swipe left or right using three fingers on your touchpad"</string>
@@ -1535,7 +1539,8 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"To view recent apps, swipe up and hold with three fingers on the touchpad"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"To view all your apps, press the action key on your keyboard"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Redacted"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Unlock to view"</string>
+ <string name="public_notification_single_line_text" msgid="3576190291791654933">"Unlock to view"</string>
+ <string name="redacted_otp_notification_single_line_text" msgid="5179964116354454118">"Unlock to view code"</string>
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Contextual education"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Use your touchpad to go back"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Swipe left or right using three fingers. Tap to learn more gestures."</string>
diff --git a/packages/SystemUI/res/values-en-rCA/tiles_states_strings.xml b/packages/SystemUI/res/values-en-rCA/tiles_states_strings.xml
index d62f2e514fbb..e17eeb2b6023 100644
--- a/packages/SystemUI/res/values-en-rCA/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Off"</item>
<item msgid="5908720590832378783">"On"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Unavailable"</item>
+ <item msgid="6641673879029894995">"Off"</item>
+ <item msgid="5806682401126108403">"On"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index af0703cfcfd3..1b36a7cc4826 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth connected."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth device icon"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Click to configure device detail"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Click to see all devices"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Click to pair new device"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hearing aids"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Turning on…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Can\'t adjust brightness because it\'s being\n controlled by the top app"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Can\'t adjust brightness because it\'s being controlled by the top app"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Location"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> doesn’t support conversation features"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Dismiss"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Don\'t show as pinned"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Showing live updates"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Pinned notifications display live info from apps and always appear on the status bar and lock screen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Call notifications can\'t be modified."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"This group of notifications cannot be configured here"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multi-tasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Use split screen with app on the right"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Use split screen with app on the left"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Switch to full screen"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Switch to the app on the right or below while using split screen"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Switch to the app on the left or above while using split screen"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"During split screen: Replace an app from one to another"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Show low-priority notification icons"</string>
<string name="other" msgid="429768510980739978">"Other"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"remove tile"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"add tile to the last position"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Move tile"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"View recent apps"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Switch apps"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Done"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Try again."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Go back"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Swipe left or right using three fingers on your touchpad"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"To view recent apps, swipe up and hold with three fingers on the touchpad"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"To view all your apps, press the action key on your keyboard"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Redacted"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Unlock to view"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Contextual education"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Use your touchpad to go back"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Swipe left or right using three fingers. Tap to learn more gestures."</string>
diff --git a/packages/SystemUI/res/values-en-rGB/tiles_states_strings.xml b/packages/SystemUI/res/values-en-rGB/tiles_states_strings.xml
index d62f2e514fbb..e17eeb2b6023 100644
--- a/packages/SystemUI/res/values-en-rGB/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Off"</item>
<item msgid="5908720590832378783">"On"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Unavailable"</item>
+ <item msgid="6641673879029894995">"Off"</item>
+ <item msgid="5806682401126108403">"On"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index af0703cfcfd3..1b36a7cc4826 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth connected."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth device icon"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Click to configure device detail"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Click to see all devices"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Click to pair new device"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hearing aids"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Turning on…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Can\'t adjust brightness because it\'s being\n controlled by the top app"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Can\'t adjust brightness because it\'s being controlled by the top app"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Auto-rotate"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Auto-rotate screen"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Location"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> doesn’t support conversation features"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Dismiss"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Don\'t show as pinned"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Showing live updates"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Pinned notifications display live info from apps and always appear on the status bar and lock screen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"These notifications can\'t be modified."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Call notifications can\'t be modified."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"This group of notifications cannot be configured here"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multi-tasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Use split screen with app on the right"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Use split screen with app on the left"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Switch to full screen"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Switch to the app on the right or below while using split screen"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Switch to the app on the left or above while using split screen"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"During split screen: Replace an app from one to another"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Show low-priority notification icons"</string>
<string name="other" msgid="429768510980739978">"Other"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"remove tile"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"add tile to the last position"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Move tile"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"View recent apps"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Switch apps"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Done"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Try again."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Go back"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Swipe left or right using three fingers on your touchpad"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"To view recent apps, swipe up and hold with three fingers on the touchpad"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"To view all your apps, press the action key on your keyboard"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Redacted"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Unlock to view"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Contextual education"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Use your touchpad to go back"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Swipe left or right using three fingers. Tap to learn more gestures."</string>
diff --git a/packages/SystemUI/res/values-en-rIN/tiles_states_strings.xml b/packages/SystemUI/res/values-en-rIN/tiles_states_strings.xml
index d62f2e514fbb..e17eeb2b6023 100644
--- a/packages/SystemUI/res/values-en-rIN/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Off"</item>
<item msgid="5908720590832378783">"On"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Unavailable"</item>
+ <item msgid="6641673879029894995">"Off"</item>
+ <item msgid="5806682401126108403">"On"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 0e15e4527313..fbf01b8a8a2a 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth conectado"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ícono de dispositivo Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Haz clic para configurar los detalles del dispositivo"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Haz clic para ver todos los dispositivos"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Haz clic para vincular un dispositivo nuevo"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Se desconoce el porcentaje de la batería."</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>
@@ -255,7 +259,7 @@
<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>
- <string name="accessibility_airplane_mode" msgid="1899529214045998505">"Modo de avión"</string>
+ <string name="accessibility_airplane_mode" msgid="1899529214045998505">"Modo avión."</string>
<string name="accessibility_vpn_on" msgid="8037549696057288731">"VPN activada"</string>
<string name="accessibility_battery_level" msgid="5143715405241138822">"Batería <xliff:g id="NUMBER">%d</xliff:g> por ciento"</string>
<string name="accessibility_battery_level_with_estimate" msgid="6548654589315074529">"Batería: <xliff:g id="PERCENTAGE">%1$d</xliff:g> por ciento; <xliff:g id="TIME">%2$s</xliff:g>"</string>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audífonos"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activando…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"La app superior controla el brillo,\npor lo que no se puede ajustar"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"La app superior controla el brillo,por lo que no se puede ajustar"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Giro automático"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Girar la pantalla automáticamente"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Ubicación"</string>
@@ -754,7 +758,7 @@
<string name="qr_code_scanner_title" msgid="1938155688725760702">"Escáner de código QR"</string>
<string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"Actualizando"</string>
<string name="status_bar_work" msgid="5238641949837091056">"Perfil de trabajo"</string>
- <string name="status_bar_airplane" msgid="4848702508684541009">"Modo de avión"</string>
+ <string name="status_bar_airplane" msgid="4848702508684541009">"Modo avión"</string>
<string name="status_bar_supervision" msgid="6735015942701134125">"Controles parentales"</string>
<string name="zen_alarm_warning" msgid="7844303238486849503">"No oirás la próxima alarma a la(s) <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="alarm_template" msgid="2234991538018805736">"a la(s) <xliff:g id="WHEN">%1$s</xliff:g>"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> no admite funciones de conversación"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Comentarios"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Descartar"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"No mostrar como fijado"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Se muestran las novedades en tiempo real"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Las notificaciones fijadas muestran información en tiempo real de las apps y siempre aparecen en la barra de estado y la pantalla de bloqueo"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"No se pueden modificar estas notificaciones."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"No se pueden modificar las notificaciones de llamada."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"No se puede configurar aquí este grupo de notificaciones"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Tareas múltiples"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Usar la pantalla dividida con la app a la derecha"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Usar la pantalla dividida con la app a la izquierda"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Cambiar a pantalla completa"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Ubicar la app a la derecha o abajo cuando usas la pantalla dividida"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Ubicar la app a la izquierda o arriba cuando usas la pantalla dividida"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Durante pantalla dividida: Reemplaza una app con otra"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Mostrar íconos de notificaciones con prioridad baja"</string>
<string name="other" msgid="429768510980739978">"Otros"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"quitar tarjeta"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"agregar tarjeta a la última posición"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mover la tarjeta"</string>
@@ -1329,7 +1335,7 @@
<string name="see_all_networks" msgid="3773666844913168122">"Ver todo"</string>
<string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"Para cambiar de red, desconéctate de Ethernet"</string>
<string name="wifi_scan_notify_message" msgid="3753839537448621794">"Para mejorar la experiencia con el dispositivo, las apps y los servicios pueden seguir buscando redes Wi-Fi en cualquier momento, incluso cuando la conexión Wi-Fi esté desactivada. Puedes cambiar este parámetro en la configuración de búsqueda de Wi-Fi. "<annotation id="link">"Cambiar"</annotation></string>
- <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Desactivar el modo de avión"</string>
+ <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Desactivar el modo avión"</string>
<string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> quiere agregar la siguiente tarjeta a la Configuración rápida"</string>
<string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Agregar tarjeta"</string>
<string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"No agregar tarjeta"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Ver apps recientes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Cambiar de app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Listo"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Vuelve a intentarlo"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Atrás"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Desliza hacia la izquierda o la derecha con tres dedos en el panel táctil"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Para ver las apps recientes, desliza hacia arriba con tres dedos y mantén presionado el panel táctil"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Para ver todas las apps, presiona la tecla de acción en el teclado"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Oculto"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Desbloquea el dispositivo para ver"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Educación contextual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Usa el panel táctil para ir hacia atrás"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Desliza hacia la izquierda o la derecha con tres dedos. Presiona para aprender más gestos."</string>
diff --git a/packages/SystemUI/res/values-es-rUS/tiles_states_strings.xml b/packages/SystemUI/res/values-es-rUS/tiles_states_strings.xml
index d8354833f91b..91f5f886bc9b 100644
--- a/packages/SystemUI/res/values-es-rUS/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Desactivado"</item>
<item msgid="5908720590832378783">"Activado"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"No disponible"</item>
+ <item msgid="6641673879029894995">"No"</item>
+ <item msgid="5806682401126108403">"Sí"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 1670ce6737b8..0af9fbf98bfd 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth conectado"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icono de dispositivo Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Haz clic para configurar la información del dispositivo"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Haz clic para ver todos los dispositivos"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Haz clic para emparejar un nuevo dispositivo"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audífonos"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activando…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"No se puede ajustar el brillo porque la aplicación superior lo está\n controlando"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"No se puede ajustar el brillo porque la aplicación superior lo está controlando"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Giro automático"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Girar pantalla automáticamente"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Ubicación"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> no admite funciones de conversación"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Comentarios"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Cerrar"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"No mostrar como fijadas"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Se mostrarán las novedades en directo"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Las notificaciones fijadas muestran información en tiempo real de las aplicaciones y aparecen siempre en la barra de estado y en la pantalla de bloqueo"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Estas notificaciones no se pueden modificar."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Las notificaciones de llamada no se pueden modificar."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Este grupo de notificaciones no se puede configurar aquí"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitarea"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Usar la pantalla dividida con la aplicación a la derecha"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Usar la pantalla dividida con la aplicación a la izquierda"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Cambiar a pantalla completa"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Cambiar a la aplicación de la derecha o de abajo en pantalla dividida"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Cambiar a la app de la izquierda o de arriba en pantalla dividida"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Con pantalla dividida: reemplazar una aplicación por otra"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Mostrar iconos de notificaciones con prioridad baja"</string>
<string name="other" msgid="429768510980739978">"Otros"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"quitar recuadro"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"añadir el recuadro a la última posición"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mover recuadro"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Ver aplicaciones recientes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Cambiar de aplicación"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Hecho"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Vuelve a intentarlo."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Atrás"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Desliza hacia la izquierda o la derecha con tres dedos en el panel táctil"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Para ver las aplicaciones recientes, desliza hacia arriba y mantén pulsado el panel táctil con tres dedos"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Para ver todas tus aplicaciones, pulsa la tecla de acción de tu teclado"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Oculta"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Desbloquea para ver"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Educación contextual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Usa el panel táctil para volver atrás"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Desliza hacia la izquierda o hacia la derecha con tres dedos. Toca para aprender a usar más gestos."</string>
diff --git a/packages/SystemUI/res/values-es/tiles_states_strings.xml b/packages/SystemUI/res/values-es/tiles_states_strings.xml
index ea75e5296ca9..c5b6c2e7d994 100644
--- a/packages/SystemUI/res/values-es/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-es/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Desactivado"</item>
<item msgid="5908720590832378783">"Activado"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"No disponible"</item>
+ <item msgid="6641673879029894995">"Desactivado"</item>
+ <item msgid="5806682401126108403">"Activado"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 445b540ae3eb..bb77e967c1a5 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth on ühendatud."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth-seadme ikoon"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klõpsake seadme üksikasjade konfigureerimiseks"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Kõigi seadmete kuvamiseks klõpsake"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Uue seadme sidumiseks klõpsake"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Aku laetuse protsent on teadmata."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Ühendatud: <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Ühendatud ülekandega <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Sisend"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Kuuldeaparaadid"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Sisselülitamine …"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Heledust ei saa reguleerida, kuna seda\n juhib ülemine rakendus"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Heledust ei saa reguleerida, kuna seda juhib ülemine rakendus"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autom. pööramine"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Kuva automaatne pööramine"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Asukoht"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ei toeta vestlusfunktsioone"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Tagasiside"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Loobu"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Ära kuva kinnitatuna"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Kuvatakse reaalajas värskendusi"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Kinnitatud märguanded näitavad rakendustest pärinevat reaalajas teavet ning kuvatakse alati olekuribal ja lukustuskuval"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Neid märguandeid ei saa muuta."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Kõnemärguandeid ei saa muuta."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Seda märguannete rühma ei saa siin seadistada"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitegumtöö"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Jagatud ekraanikuva kasutamine, rakendus kuvatakse paremal"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Jagatud ekraanikuva kasutamine, rakendus kuvatakse vasakul"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Täisekraanile lülitamine"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Paremale või alumisele rakendusele lülitamine jagatud ekraani ajal"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Vasakule või ülemisele rakendusele lülitamine jagatud ekraani ajal"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Ekraanikuva jagamise ajal: ühe rakenduse asendamine teisega"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Kuva madala prioriteediga märguande ikoonid"</string>
<string name="other" msgid="429768510980739978">"Muu"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"paani eemaldamiseks"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"lisage paan viimasesse asukohta"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Teisalda paan"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Hiljutiste rakenduste vaatamine"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Rakenduste vahetamine"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Valmis"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Proovige uuesti!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Tagasi"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Pühkige puuteplaadil kolme sõrmega vasakule või paremale"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Hiljutiste rakenduste kuvamiseks pühkige puuteplaadil kolme sõrmega üles ja hoidke sõrmi puuteplaadil."</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Kõigi oma rakenduste kuvamiseks vajutage klaviatuuril toiminguklahvi"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Peidetud"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Vaatamiseks avage"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstipõhised õpetused"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Puuteplaadi kasutamine tagasiliikumiseks"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Pühkige kolme sõrmega vasakule või paremale. Puudutage liigutuste kohta lisateabe saamiseks."</string>
diff --git a/packages/SystemUI/res/values-et/tiles_states_strings.xml b/packages/SystemUI/res/values-et/tiles_states_strings.xml
index a9f0880c3628..e9949bf5726a 100644
--- a/packages/SystemUI/res/values-et/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-et/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Väljas"</item>
<item msgid="5908720590832378783">"Sees"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Pole saadaval"</item>
+ <item msgid="6641673879029894995">"Väljas"</item>
+ <item msgid="5806682401126108403">"Sees"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 1f7d697ff2da..cb8e034d2828 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetootha konektatuta."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth bidezko gailuaren ikonoa"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Gailuaren xehetasuna konfiguratzeko, sakatu hau"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Egin klik gailu guztiak ikusteko"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Egin klik beste gailu bat parekatzeko"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Sarrera"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audifonoak"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aktibatzen…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ezin da doitu argitasuna,\ngaineko aplikazioak kontrolatzen duelako"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ezin da doitu argitasuna,gaineko aplikazioak kontrolatzen duelako"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Biratze automatikoa"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Biratu pantaila automatikoki"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Kokapena"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak ez ditu onartzen elkarrizketetarako eginbideak"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Iritzia"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Baztertu"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Ez erakutsi ainguratutako gisa"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Zuzeneko informazioa dago ikusgai"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Ainguratutako jakinarazpenek istantean bistaratzen dute aplikazioetako informazioa, eta egoera-barran nahiz pantaila blokeatuan agertzen dira beti"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Jakinarazpen horiek ezin dira aldatu."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Deien jakinarazpenak ezin dira aldatu."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Jakinarazpen talde hau ezin da konfiguratu hemen"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Zeregin bat baino gehiago aldi berean exekutatzea"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Erabili pantaila zatitua eta ezarri aplikazio hau eskuinean"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Erabili pantaila zatitua eta ezarri aplikazio hau ezkerrean"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Aldatu pantaila osora"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Aldatu eskuineko edo beheko aplikaziora pantaila zatitua erabiltzean"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Aldatu ezkerreko edo goiko aplikaziora pantaila zatitua erabiltzean"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Pantaila zatituan zaudela, ordeztu aplikazio bat beste batekin"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Erakutsi lehentasun txikiko jakinarazpenen ikonoak"</string>
<string name="other" msgid="429768510980739978">"Beste bat"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"kendu lauza"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"gehitu lauza azken posizioan"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mugitu lauza"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Ikusi azkenaldiko aplikazioak"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Aldatu aplikazioa"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Eginda"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Saiatu berriro!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Egin atzera"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Pasatu 3 hatz ezkerrera edo eskuinera ukipen-panelean"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Azkenaldiko aplikazioak ikusteko, pasatu 3 hatz ukipen-panelean gora eta eduki sakatuta"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Aplikazio guztiak ikusteko, sakatu teklatuko ekintza-tekla"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Desitxuratuta"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Desblokeatu ikusteko"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Testuinguruaren araberako hezkuntza"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Erabili ukipen-panela atzera egiteko"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Pasatu 3 hatz ezkerrera edo eskuinera. Sakatu keinu gehiago ikasteko."</string>
diff --git a/packages/SystemUI/res/values-eu/tiles_states_strings.xml b/packages/SystemUI/res/values-eu/tiles_states_strings.xml
index 62bbc27010a9..e47b658d0fae 100644
--- a/packages/SystemUI/res/values-eu/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-eu/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Desaktibatuta"</item>
<item msgid="5908720590832378783">"Aktibatuta"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Ez dago erabilgarri"</item>
+ <item msgid="6641673879029894995">"Desaktibatuta"</item>
+ <item msgid="5806682401126108403">"Aktibatuta"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index c9392e32d6c1..7fd5551a1e2a 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"بلوتوث متصل است."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"نماد دستگاه بلوتوث"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"برای پیکربندی جزئیات دستگاه کلیک کنید"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"برای دیدن همه دستگاه‌ها، کلیک کنید"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"برای جفت کردن دستگاه جدید، کلیک کنید"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -306,7 +310,7 @@
<string name="pair_new_bluetooth_devices" msgid="4601767620843349645">"جفت کردن دستگاه جدید"</string>
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"دیدن همه"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"استفاده از بلوتوث"</string>
- <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"متصل"</string>
+ <string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"وصل‌شده"</string>
<string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"اشتراک صدا"</string>
<string name="quick_settings_bluetooth_device_audio_sharing_or_switch_active" msgid="8680997711431098238">"از اشتراک صدا پشتیبانی می‌کند"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"ذخیره‌شده"</string>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ورودی"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"سمعک"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"روشن کردن…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"نمی‌توان روشنایی را تنظیم کرد زیرا\n برنامه بالایی آن را کنترل می‌کند"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"نمی‌توان روشنایی را تنظیم کرد زیرا برنامه بالایی آن را کنترل می‌کند"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"چرخش خودکار"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"چرخش خودکار صفحه‌نمایش"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"مکان"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> از ویژگی‌های مکالمه پشتیبانی نمی‌کند"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"بازخورد"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"بستن"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"سنجاق‌شده نشان داده نشود"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"نمایش «به‌روزرسانی‌های زنده»"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"اعلان‌های سنجاق‌شده اطلاعات زنده را از برنامه‌ها نمایش می‌دهند، و همیشه در نوار وضعیت و صفحه قفل نشان داده می‌شوند"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"این اعلان‌ها قابل اصلاح نیستند."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"این اعلان‌ها قابل‌اصلاح نیستند."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"نمی‌توانید این گروه اعلان‌ها را در اینجا پیکربندی کنید"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"چندوظیفگی"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"استفاده از صفحهٔ دونیمه با قرار گرفتن برنامه در سمت راست"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"استفاده از صفحهٔ دونیمه با قرار گرفتن برنامه در سمت چپ"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"رفتن به حالت تمام‌صفحه"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"رفتن به برنامه سمت راست یا پایین درحین استفاده از صفحهٔ دونیمه"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"رفتن به برنامه سمت چپ یا بالا درحین استفاده از صفحهٔ دونیمه"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"درحین صفحهٔ دونیمه: برنامه‌ای را با دیگری جابه‌جا می‌کند"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"نمایش نمادهای اعلان کم‌اهمیت"</string>
<string name="other" msgid="429768510980739978">"موارد دیگر"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"برداشتن کاشی"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"افزودن کاشی به آخرین جایگاه"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"انتقال کاشی"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"مشاهده برنامه‌های اخیر"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"جابه‌جایی بین برنامه‌ها"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"تمام"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"دوباره امتحان کنید!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"برگشتن"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"با سه انگشت روی صفحه لمسی تند به چپ یا راست بکشید."</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"برای مشاهده برنامه‌های اخیر، در صفحه لمسی با سه انگشت تند به‌بالا بکشید و نگه دارید"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"برای مشاهده همه برنامه‌ها، دکمه کنش در صفحه‌کلید را فشار دهید"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"محوشده"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"برای مشاهده، قفل را باز کنید"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"آموزش زمینه‌ای"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"برای برگشتن از صفحه لمسی استفاده کنید"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"با سه انگشت تند به‌چپ یا راست بکشید. برای آشنایی با اشاره‌های بیشتر، تک‌ضرب بزنید."</string>
diff --git a/packages/SystemUI/res/values-fa/tiles_states_strings.xml b/packages/SystemUI/res/values-fa/tiles_states_strings.xml
index edc2d412405a..1025f3d0812a 100644
--- a/packages/SystemUI/res/values-fa/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-fa/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"خاموش"</item>
<item msgid="5908720590832378783">"روشن"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"دردسترس نیست"</item>
+ <item msgid="6641673879029894995">"خاموش"</item>
+ <item msgid="5806682401126108403">"روشن"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 96162b211006..647134f59028 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -247,8 +247,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth yhdistetty."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth-laitekuvake"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Määritä laitteen asetukset klikkaamalla"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Katso kaikki laitteet klikkaamalla"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Muodosta uusi laitepari klikkaamalla"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -330,7 +334,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Syöttölaite"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Kuulolaitteet"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Otetaan käyttöön…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Kirkkautta ei voi säätää, koska \n ensisijainen sovellus ohjaa sitä"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Kirkkautta ei voi säätää, koska ensisijainen sovellus ohjaa sitä"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automaattinen kääntö"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Käännä näyttöä automaattisesti."</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Sijainti"</string>
@@ -810,12 +814,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ei tue keskusteluominaisuuksia"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Palaute"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Hylkää"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Älä näytä kiinnitettynä"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Näytetään livepäivitykset"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Kiinnitetyissä ilmoituksissa näytetään livetietoja sovelluksista, ja ilmoitukset näkyvät aina tilapalkissa ja lukitusnäytöllä"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Näitä ilmoituksia ei voi muokata"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Puheluilmoituksia ei voi muokata."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Tätä ilmoitusryhmää ei voi määrittää tässä"</string>
@@ -902,7 +903,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitaskaus"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Käytä jaettua näyttöä niin, että sovellus on oikealla"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Käytä jaettua näyttöä niin, että sovellus on vasemmalla"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Koko näytölle siirtyminen"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Vaihda sovellukseen oikealla tai alapuolella jaetussa näytössä"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Vaihda sovellukseen vasemmalla tai yläpuolella jaetussa näytössä"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Jaetun näytön aikana: korvaa sovellus toisella"</string>
@@ -989,6 +993,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Näytä vähemmän tärkeät ilmoituskuvakkeet"</string>
<string name="other" msgid="429768510980739978">"Muu"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"poista kiekko"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"lisää laatta viimeiseen kohtaan"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Siirrä kiekkoa"</string>
@@ -1331,7 +1337,7 @@
<string name="see_all_networks" msgid="3773666844913168122">"Näytä kaikki"</string>
<string name="to_switch_networks_disconnect_ethernet" msgid="6698111101156951955">"Irrota Ethernet-johto, jos haluat vaihtaa verkkoa"</string>
<string name="wifi_scan_notify_message" msgid="3753839537448621794">"Laitteen käyttökokemuksen parantamiseksi sovellukset ja palvelut voivat hakea Wi-Fi-verkkoja myös silloin, kun Wi-Fi on pois päältä. Voit muuttaa asetusta Wi-Fi-haun asetuksissa. "<annotation id="link">"Muuta"</annotation></string>
- <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Laita lentokonetila pois päältä"</string>
+ <string name="turn_off_airplane_mode" msgid="8425587763226548579">"Lentokonetila pois"</string>
<string name="qs_tile_request_dialog_text" msgid="3501359944139877694">"<xliff:g id="APPNAME">%1$s</xliff:g> haluaa lisätä seuraavan laatan pika-asetuksiin"</string>
<string name="qs_tile_request_dialog_add" msgid="4888460910694986304">"Lisää laatta"</string>
<string name="qs_tile_request_dialog_not_add" msgid="4168716573114067296">"Älä lisää laattaa"</string>
@@ -1503,6 +1509,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Katso viimeisimmät sovellukset"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Vaihda sovellusta"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Valmis"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Yritä uudelleen."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Takaisin"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Pyyhkäise kosketuslevyllä vasemmalle tai oikealle kolmella sormella"</string>
@@ -1540,7 +1548,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Näet äskeiset sovellukset, kun pyyhkäiset ylös ja pidät kosketuslevyä painettuna kolmella sormella."</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Jos haluat nähdä kaikki sovellukset, paina näppäimistön toimintonäppäintä"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Sensuroitu"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Avaa lukitus ja katso tiedot"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstuaalinen koulutus"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Takaisin siirtyminen kosketuslevyn avulla"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Pyyhkäise vasemmalle tai oikealle kolmella sormella. Lue lisää eleistä napauttamalla."</string>
diff --git a/packages/SystemUI/res/values-fi/tiles_states_strings.xml b/packages/SystemUI/res/values-fi/tiles_states_strings.xml
index 6b1a8eddec63..5452f2630668 100644
--- a/packages/SystemUI/res/values-fi/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-fi/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Pois päältä"</item>
<item msgid="5908720590832378783">"Päällä"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Ei saatavilla"</item>
+ <item msgid="6641673879029894995">"Pois päältä"</item>
+ <item msgid="5806682401126108403">"Päällä"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 8fd2ed219953..299f5a513fb9 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth connecté"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icône de l\'appareil Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Cliquez pour configurer les détails de l\'appareil"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Cliquez ici pour voir tous les appareils"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Cliquez ici pour associer un nouvel appareil"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrée"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Prothèses auditives"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activation en cours…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Impossible de régler la luminosité, car elle est\n contrôlée par l\'appli principale"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Impossible de régler la luminosité, car elle est contrôlée par l\'appli principale"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotation auto"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotation automatique de l\'écran"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Localisation"</string>
@@ -506,7 +510,7 @@
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Balayer l\'écran vers la gauche pour démarrer le tutoriel communautaire"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personnaliser"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Fermer"</string>
- <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"Ajouter, retirer et réorganiser vos widgets dans cet espace"</string>
+ <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"Ajouter, retirer et réorganiser vos widgets dans cet espace"</string>
<string name="cta_label_to_open_widget_picker" msgid="3874946756976360699">"Ajouter plus de widgets"</string>
<string name="popup_on_dismiss_cta_tile_text" msgid="8292501780996070019">"Appuyez longuement pour personnaliser les widgets"</string>
<string name="button_to_configure_widgets_text" msgid="4191862850185256901">"Personnaliser les widgets"</string>
@@ -808,12 +812,9 @@
<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>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Commentaires"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Fermer"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Ne pas afficher comme épinglé"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Affichage des mises à jour en direct"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Les notifications épinglées affichent des informations en direct des applis et apparaissent toujours sur la barre d\'état et l\'écran de verrouillage"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ces notifications ne peuvent pas être modifiées"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Les notifications d\'appel ne peuvent pas être modifiées."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Ce groupe de notifications ne peut pas être configuré ici"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitâche"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Utiliser l\'Écran divisé avec l\'appli à droite"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Utiliser l\'Écran divisé avec l\'appli à gauche"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Passer au mode plein écran"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Passer à l\'appli à droite ou en dessous avec l\'Écran divisé"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Passer à l\'appli à gauche ou au-dessus avec l\'Écran divisé"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"En mode d\'écran divisé : remplacer une appli par une autre"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Afficher les icônes de notification de faible priorité"</string>
<string name="other" msgid="429768510980739978">"Autre"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"retirer la tuile"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"Ajouter une tuile à la dernière position"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Déplacer la tuile"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Afficher les applis récentes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Changer d\'appli"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"OK"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Réessayez!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Retour"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Balayez votre pavé tactile vers la gauche ou vers la droite avec trois doigts"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Pour afficher les applis récentes, balayez l\'écran vers le haut avec trois doigts sur le pavé tactile et maintenez-les en place"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Pour afficher toutes vos applis, appuyez sur la touche d\'action de votre clavier"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Supprimé"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Déverrouiller pour afficher"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Enseignement contextuel"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Utiliser votre pavé tactile pour revenir en arrière"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Balayez vers la gauche ou vers la droite avec trois doigts. Touchez pour apprendre d\'autres gestes."</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/tiles_states_strings.xml b/packages/SystemUI/res/values-fr-rCA/tiles_states_strings.xml
index 4734d860e27a..e9d3c487009a 100644
--- a/packages/SystemUI/res/values-fr-rCA/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Désactivée"</item>
<item msgid="5908720590832378783">"Activée"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Non accessible"</item>
+ <item msgid="6641673879029894995">"Désactivé"</item>
+ <item msgid="5806682401126108403">"Activé"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 89002d4752b4..a4fa4d0caf27 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth connecté"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icône de l\'appareil Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Cliquer pour configurer les détails de l\'appareil"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Cliquer pour afficher tous les appareils"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Cliquer pour associer un nouvel appareil"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configurez les détails de l\'appareil"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Voir tous les appareils"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Associer un nouvel appareil"</string>
<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>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrée"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Appareils auditifs"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activation…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Impossible d\'ajuster la luminosité, car celle-ci\n est contrôlée par l\'appli principale"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Impossible d\'ajuster la luminosité, car celle-ci est contrôlée par l\'appli principale"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotation auto"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotation automatique de l\'écran"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Localisation"</string>
@@ -354,7 +355,7 @@
<string name="quick_settings_inversion_label" msgid="3501527749494755688">"Inversion des couleurs"</string>
<string name="quick_settings_color_correction_label" msgid="5636617913560474664">"Correction des couleurs"</string>
<string name="quick_settings_font_scaling_label" msgid="5289001009876936768">"Taille de la police"</string>
- <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Gérer utilisateurs"</string>
+ <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"Gérer les utilisateurs"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"OK"</string>
<string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Fermer"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Connecté"</string>
@@ -808,12 +809,9 @@
<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>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Commentaires"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Ignorer"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Ne pas afficher comme épinglé"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Affichage des infos en direct"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Les notifications épinglées affichent des informations en direct provenant d\'applis et apparaissent toujours dans la barre d\'état et sur l\'écran de verrouillage"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Impossible de modifier ces notifications."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Impossible de modifier les notifications d\'appel."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Vous ne pouvez pas configurer ce groupe de notifications ici"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitâche"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Utiliser l\'écran partagé avec l\'appli sur la droite"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Utiliser l\'écran partagé avec l\'appli sur la gauche"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Passer en plein écran"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Utiliser le mode plein écran"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Utiliser l\'affichage sur ordinateur"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Passer à l\'appli à droite ou en dessous avec l\'écran partagé"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Passez à l\'appli à gauche ou au-dessus avec l\'écran partagé"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"En mode écran partagé : Remplacer une appli par une autre"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Afficher les icônes de notification à faible priorité"</string>
<string name="other" msgid="429768510980739978">"Autre"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"supprimer le bloc"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ajouter le bloc à la dernière position"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Déplacer le bloc"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Afficher les applis récentes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Passer d\'une application à l\'autre"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"OK"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Suivant"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Essayez encore."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Retour"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Balayez vers la gauche ou la droite avec trois doigts sur le pavé tactile"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Pour afficher les applis récentes, balayez vers le haut avec trois doigts sur le pavé tactile et maintenez-les."</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Pour afficher toutes vos applis, appuyez sur la touche d\'action de votre clavier"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Masqué"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Déverrouiller pour afficher"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Éducation contextuelle"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Utilisez votre pavé tactile pour revenir en arrière"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Balayez vers la gauche ou la droite en utilisant trois doigts. Appuyez pour apprendre d\'autres gestes."</string>
diff --git a/packages/SystemUI/res/values-fr/tiles_states_strings.xml b/packages/SystemUI/res/values-fr/tiles_states_strings.xml
index cefc9a2af3ed..52c7c0c09fd7 100644
--- a/packages/SystemUI/res/values-fr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-fr/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Désactivé"</item>
<item msgid="5908720590832378783">"Activé"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Indisponible"</item>
+ <item msgid="6641673879029894995">"Désactivé"</item>
+ <item msgid="5806682401126108403">"Activé"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index 4e801eebf317..82ba5dcff44a 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth conectado"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icona do dispositivo Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Facer clic para configurar os detalles do dispositivo"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Facer clic para ver todos os dispositivos"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Facer clic para vincular un novo dispositivo"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Descoñécese a porcentaxe da batería."</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">"Dispositivo conectado: <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Audiófonos"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Activando…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Non se pode axustar o brillo\n porque o controla a aplicación principal"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Non se pode axustar o brillo porque o controla a aplicación principal"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Xirar automaticamente"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Xirar pantalla automaticamente"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Localización"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> non admite funcións de conversa"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Comentarios"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Pechar"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Non mostrar como fixadas"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Mostrando novidades en tempo real"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"As notificacións fixadas mostrarán a información en tempo real das aplicacións e aparecerán sempre na barra de estado e na pantalla de bloqueo"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Estas notificacións non se poden modificar."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"As notificacións de chamadas non se poden modificar."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Aquí non se pode configurar este grupo de notificacións"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitarefa"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Usar pantalla dividida coa aplicación na dereita"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Usar pantalla dividida coa aplicación na esquerda"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Cambiar a pantalla completa"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Cambiar á aplicación da dereita ou de abaixo coa pantalla dividida"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Cambiar á aplicación da esquerda ou de arriba coa pantalla dividida"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"En modo de pantalla dividida: Substituír unha aplicación por outra"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Mostrar iconas das notificacións que teñan baixa prioridade"</string>
<string name="other" msgid="429768510980739978">"Outros"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"quitar tarxeta"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"engadir o atallo á última posición"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mover tarxeta"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Consultar aplicacións recentes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Cambiar de aplicación"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Feito"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Téntao de novo."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Volver"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Pasa tres dedos cara á esquerda ou cara á dereita no panel táctil"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Para ver as aplicacións recentes, pasa tres dedos cara arriba no panel táctil e mantenos premidos"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Para ver todas as aplicacións, preme a tecla de acción do teclado"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Contido ocultado"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Desbloquea o dispositivo para ver o contido"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Información contextual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Usa o panel táctil para volver"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Pasa tres dedos cara á esquerda ou cara á dereita. Toca para obter máis información sobre os xestos."</string>
diff --git a/packages/SystemUI/res/values-gl/tiles_states_strings.xml b/packages/SystemUI/res/values-gl/tiles_states_strings.xml
index bfd6a121da73..7cf5f8295fe8 100644
--- a/packages/SystemUI/res/values-gl/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-gl/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Opción desactivada"</item>
<item msgid="5908720590832378783">"Opción activada"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Non dispoñible"</item>
+ <item msgid="6641673879029894995">"Desactivado"</item>
+ <item msgid="5806682401126108403">"Activado"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index 08e139872a50..1fa46e658e36 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"બ્લૂટૂથ કનેક્ટ થયું."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"બ્લૂટૂથ ડિવાઇસનું આઇકન"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ડિવાઇસની વિગત ગોઠવવા માટે ક્લિક કરો"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"બધા ડિવાઇસ જોવા માટે ક્લિક કરો"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"નવું ડિવાઇસ જોડવા માટે ક્લિક કરો"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ઇનપુટ"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"સાંભળવામાં મદદ આપતા યંત્રો"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ચાલુ કરી રહ્યાં છીએ…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"બ્રાઇટનેસ ગોઠવી શકતા નથી કારણ કે તે\n લોકપ્રિય ઍપ દ્વારા નિયંત્રિત કરવામાં આવી રહી છે"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"બ્રાઇટનેસ ગોઠવી શકતા નથી કારણ કે તે લોકપ્રિય ઍપ દ્વારા નિયંત્રિત કરવામાં આવી રહી છે"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ઑટો રોટેટ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ઑટો રોટેટ સ્ક્રીન"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"લોકેશન"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> વાતચીતની સુવિધાઓને સપોર્ટ આપતી નથી"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"પ્રતિસાદ"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"છોડી દો"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"પિન કરેલા તરીકે બતાવશો નહીં"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"લાઇવ અપડેટ બતાવી રહ્યાં છીએ"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"પિન કરેલા નોટિફિકેશન ઍપમાંથી લાઇવ નોટિફિકેશન બતાવે છે અને હંમેશાં સ્ટેટસ બાર અને લૉક સ્ક્રીન પર દેખાય છે"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"આ નોટિફિકેશનમાં કોઈ ફેરફાર થઈ શકશે નહીં."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"કૉલના નોટિફિકેશનમાં કોઈ ફેરફાર કરી શકાતો નથી."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"નોટિફિકેશનના આ ગ્રૂપની ગોઠવણી અહીં કરી શકાશે નહીં"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"એકસાથે એકથી વધુ કાર્યો કરવા"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"હાલની ઍપને જમણી બાજુએ રાખીને વિભાજિત સ્ક્રીનનો ઉપયોગ કરો"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"હાલની ઍપને ડાબી બાજુએ રાખીને વિભાજિત સ્ક્રીનનો ઉપયોગ કરો"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"પૂર્ણ સ્ક્રીન પર સ્વિચ કરો"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"વિભાજિત સ્ક્રીનનો ઉપયોગ કરતી વખતે જમણી બાજુ કે નીચેની ઍપ પર સ્વિચ કરો"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"વિભાજિત સ્ક્રીનનો ઉપયોગ કરતી વખતે ડાબી બાજુની કે ઉપરની ઍપ પર સ્વિચ કરો"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"વિભાજિત સ્ક્રીન દરમિયાન: એક ઍપને બીજી ઍપમાં બદલો"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"ઓછી પ્રાધાન્યતાનું નોટિફિકેશન આઇકન બતાવો"</string>
<string name="other" msgid="429768510980739978">"અન્ય"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ટાઇલ કાઢી નાખો"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"છેલ્લા સ્થાનમાં ટાઇલ ઉમેરો"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ટાઇલ ખસેડો"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"તાજેતરની ઍપ જુઓ"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ઍપ સ્વિચ કરો"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"થઈ ગયું"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"ફરી પ્રયાસ કરો!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"પાછા જાઓ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"તમારા ટચપૅડ પર ત્રણ આંગળીનો ઉપયોગ કરીને ડાબે કે જમણે સ્વાઇપ કરો"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"તાજેતરની ઍપ જોવા માટે, ટચપૅડ પર ત્રણ આંગળીઓ વડે ઉપર સ્વાઇપ કરો અને દબાવી રાખો"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"તમારી બધી ઍપ જોવા માટે, તમારા કીબોર્ડ પર ઍક્શન કી દબાવો"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"બદલાવેલું"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"જોવા માટે અનલૉક કરો"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"સંદર્ભાત્મક શિક્ષણ"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"પાછા જવા માટે તમારા ટચપૅડનો ઉપયોગ કરો"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"ત્રણ આંગળીનો ઉપયોગ કરીને ડાબે અથવા જમણે સ્વાઇપ કરો. સંકેતો વિશે વધુ જાણવા માટે ટૅપ કરો."</string>
diff --git a/packages/SystemUI/res/values-gu/tiles_states_strings.xml b/packages/SystemUI/res/values-gu/tiles_states_strings.xml
index c6e204d12745..a003106597c5 100644
--- a/packages/SystemUI/res/values-gu/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-gu/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"બંધ છે"</item>
<item msgid="5908720590832378783">"ચાલુ"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"અનુપલબ્ધ"</item>
+ <item msgid="6641673879029894995">"બંધ"</item>
+ <item msgid="5806682401126108403">"ચાલુ"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index d78158557756..be1ca7d5498b 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ब्लूटूथ कनेक्ट किया गया."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ब्लूटूथ डिवाइस का आइकॉन"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"डिवाइस की जानकारी कॉन्फ़िगर करने के लिए क्लिक करें"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"\'सभी डिवाइस देखें\' पर क्लिक करें"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"\'नया डिवाइस जोड़ें\' पर क्लिक करें"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. डिवाइस की जानकारी कॉन्फ़िगर करें"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"सभी डिवाइस देखें"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"नया डिवाइस जोड़ें"</string>
<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>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"इनपुट"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"कान की मशीनें"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ब्लूटूथ चालू हो रहा है…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"स्क्रीन की रोशनी को एडजस्ट नहीं किया जा सकता, क्योंकि\n इसे टॉप ऐप्लिकेशन कंट्रोल कर रहा है"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"स्क्रीन की रोशनी को एडजस्ट नहीं किया जा सकता, क्योंकि इसे टॉप ऐप्लिकेशन कंट्रोल कर रहा है"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ऑटो-रोटेट"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"स्क्रीन का अपने-आप दिशा बदलना (ऑटो-रोटेट)"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"जगह की जानकारी"</string>
@@ -536,7 +537,7 @@
<string name="accessibility_action_label_expand_widget" msgid="9190524260912211759">"ऊंचाई बढ़ाएं"</string>
<string name="accessibility_action_label_umo_show_next" msgid="8033581654789193281">"अगला दिखाएं"</string>
<string name="accessibility_action_label_umo_show_previous" msgid="5935831384525173810">"पिछला दिखाएं"</string>
- <string name="communal_widgets_disclaimer_title" msgid="1150954395585308868">"लॉक स्क्रीन विजेट"</string>
+ <string name="communal_widgets_disclaimer_title" msgid="1150954395585308868">"लॉक स्क्रीन के विजेट"</string>
<string name="communal_widgets_disclaimer_text" msgid="1423545475160506349">"किसी विजेट से कोई ऐप्लिकेशन खोलने के लिए, आपको अपनी पहचान की पुष्टि करनी होगी. ध्यान रखें कि आपके टैबलेट के लॉक होने पर भी, कोई व्यक्ति विजेट देख सकता है. ऐसा हो सकता है कि कुछ विजेट, लॉक स्क्रीन पर दिखाने के लिए न बने हों. इन्हें लॉक स्क्रीन पर जोड़ना असुरक्षित हो सकता है."</string>
<string name="communal_widgets_disclaimer_button" msgid="4423059765740780753">"ठीक है"</string>
<string name="accessibility_glanceable_hub_to_dream_button" msgid="7552776300297055307">"स्क्रीन सेवर दिखाने का बटन"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> पर बातचीत की सुविधाएं काम नहीं करतीं"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"सुझाव/राय दें या शिकायत करें"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"खारिज करें"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"पिन किए गए लाइव अपडेट न दिखाएं"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"लाइव अपडेट दिखाए जा रहे हैं"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"पिन की गई सूचनाएं, ऐप्लिकेशन से मिलने वाली जानकारी रीयल-टाइम में दिखाती हैं. ये सूचनाएं, स्टेटस बार और लॉक स्क्रीन पर दिखती हैं"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ये सूचनाएं नहीं बदली जा सकती हैं."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"कॉल से जुड़ी सूचनाओं को ब्लॉक नहीं किया जा सकता."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"सूचनाओं के इस समूह को यहां कॉन्फ़िगर नहीं किया जा सकता"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"मल्टीटास्किंग (एक साथ कई काम करना)"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"स्प्लिट स्क्रीन की सुविधा चालू करें और इस ऐप्लिकेशन को दाईं ओर दिखाएं"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"स्प्लिट स्क्रीन की सुविधा चालू करें और इस ऐप्लिकेशन को बाईं ओर दिखाएं"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"फ़ुल स्क्रीन पर स्विच करें"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"फ़ुल स्क्रीन मोड का इस्तेमाल करें"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"डेस्कटॉप व्यू मोड का इस्तेमाल करें"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"स्प्लिट स्क्रीन पर, दाईं ओर या नीचे के ऐप पर स्विच करने के लिए"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"स्प्लिट स्क्रीन पर, बाईं ओर या ऊपर के ऐप पर स्विच करने के लिए"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"स्प्लिट स्क्रीन के दौरान: एक ऐप्लिकेशन को दूसरे ऐप्लिकेशन से बदलें"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"कम प्राथमिकता वाली सूचना के आइकॉन दिखाएं"</string>
<string name="other" msgid="429768510980739978">"अन्य"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"टाइल हटाएं"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"आखिरी जगह पर टाइल जोड़ें"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"टाइल को किसी और पोज़िशन पर ले जाएं"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"हाल ही में इस्तेमाल किए गए ऐप्लिकेशन देखें"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ऐप्लिकेशन के बीच स्विच करें"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"हो गया"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"आगे बढ़ें"</string>
<string name="gesture_error_title" msgid="469064941635578511">"फिर से कोशिश करें!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"वापस जाएं"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"अपने टचपैड पर तीन उंगलियों से बाईं या दाईं ओर स्वाइप करें"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"हाल ही में इस्तेमाल हुए ऐप देखने के लिए, टचपैड पर तीन उंगलियों से ऊपर की ओर स्वाइप करके दबाकर रखें"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"सभी ऐप्लिकेशन देखने के लिए, कीबोर्ड पर ऐक्शन बटन दबाएं"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"जानकारी छिपाने के लिए सूचना में बदलाव किया गया"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"देखने के लिए डिवाइस अनलॉक करें"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"कॉन्टेक्स्ट के हिसाब से जानकारी"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"वापस जाने के लिए, अपने डिवाइस के टचपैड का इस्तेमाल करें"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"तीन उंगलियों से बाईं या दाईं ओर स्वाइप करें. ज़्यादा जेस्चर के बारे में जानने के लिए टैप करें."</string>
diff --git a/packages/SystemUI/res/values-hi/tiles_states_strings.xml b/packages/SystemUI/res/values-hi/tiles_states_strings.xml
index 65046cc4216d..ae0831651607 100644
--- a/packages/SystemUI/res/values-hi/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-hi/tiles_states_strings.xml
@@ -152,7 +152,7 @@
<item msgid="8998632451221157987">"चालू है"</item>
</string-array>
<string-array name="tile_states_controls">
- <item msgid="8199009425335668294">"उपलब्ध नहीं है"</item>
+ <item msgid="8199009425335668294">"उपलब्ध नहीं हैं"</item>
<item msgid="4544919905196727508">"बंद है"</item>
<item msgid="3422023746567004609">"चालू है"</item>
</string-array>
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"बंद है"</item>
<item msgid="5908720590832378783">"चालू है"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"उपलब्ध नहीं है"</item>
+ <item msgid="6641673879029894995">"बंद है"</item>
+ <item msgid="5806682401126108403">"चालू है"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 3a985a9f5a17..5c7ee2468043 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth povezan."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikona Bluetooth uređaja"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kliknite da biste konfigurirali pojedinosti o uređaju"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Kliknite za prikaz svih uređaja"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Kliknite da biste uparili novi uređaj"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfigurirajte pojedinosti o uređaju"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Pogledajte sve uređaje"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Upari novi uređaj"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Postotak baterije nije poznat."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Spojen na <xliff:g id="BLUETOOTH">%s</xliff:g> ."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Povezani ste sa sljedećim uređajem: <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Unos"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Slušna pomagala"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Uključivanje…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Svjetlina se ne može prilagoditi jer njome\n upravlja aplikacija pri vrhu"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Svjetlina se ne može prilagoditi jer njome upravlja aplikacija pri vrhu"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatsko zakretanje"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatsko zakretanje zaslona"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokacija"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> ne podržava značajke razgovora"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Povratne informacije"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Odbaci"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Ne prikazuj kao prikvačeno"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Prikazivanje obavijesti uživo"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Prikvačene obavijesti prikazuju informacije uživo iz aplikacija i uvijek se prikazuju na traci statusa i zaključanom zaslonu"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Te se obavijesti ne mogu izmijeniti."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Obavijesti o pozivima ne mogu se izmijeniti."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Ta se grupa obavijesti ne može konfigurirati ovdje"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Obavljanje više zadataka"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Upotreba podijeljenog zaslona s aplikacijom s desne strane"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Upotreba podijeljenog zaslona s aplikacijom s lijeve strane"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Prebacivanje na cijeli zaslon"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Upotreba prikaza na cijelom zaslonu"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Upotreba prikaza na računalu"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Prelazak na aplikaciju zdesna ili ispod uz podijeljeni zaslon"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Prelazak na aplikaciju slijeva ili iznad uz podijeljeni zaslon"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Tijekom podijeljenog zaslona: zamijeni aplikaciju drugom"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Prikaži ikone obavijesti niskog prioriteta"</string>
<string name="other" msgid="429768510980739978">"Ostalo"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"uklanjanje kartice"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"dodavanje kartice na posljednji položaj"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Premještanje kartice"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Pregled nedavnih aplikacija"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Promjena aplikacije"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Gotovo"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Dalje"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Pokušajte ponovno!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Natrag"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Prijeđite ulijevo ili udesno trima prstima na dodirnoj podlozi"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Za prikaz nedavnih aplikacija prijeđite prema gore trima prstima i zadržite pritisak na dodirnoj podlozi"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Za prikaz svojih svih aplikacija pritisnite tipku za radnju na tipkovnici"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Redaktirano"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Otključajte za prikaz"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstualno obrazovanje"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Upotrijebite dodirnu podlogu za povratak"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Prijeđite ulijevo ili udesno trima prstima. Dodirnite da biste naučili više pokreta."</string>
diff --git a/packages/SystemUI/res/values-hr/tiles_states_strings.xml b/packages/SystemUI/res/values-hr/tiles_states_strings.xml
index 3b9901937dd3..51b667c3fafd 100644
--- a/packages/SystemUI/res/values-hr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-hr/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Isključeno"</item>
<item msgid="5908720590832378783">"Uključeno"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Nedostupno"</item>
+ <item msgid="6641673879029894995">"Isključeno"</item>
+ <item msgid="5806682401126108403">"Uključeno"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 9b1756703895..421570cf8bca 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth csatlakoztatva."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth-eszköz ikon"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kattintson az eszköz beállításainak megadásához"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Kattintson az összes eszköz megtekintéséhez"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Kattintson új eszköz párosításához"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Bevitel"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hallókészülék"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Bekapcsolás…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nem lehet módosítani a fényerőt, mert a felső alkalmazás\n vezérli"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nem lehet módosítani a fényerőt, mert a felső alkalmazás vezérli"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatikus elforgatás"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatikus képernyőforgatás"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Tartózkodási hely"</string>
@@ -808,12 +812,9 @@
<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>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Visszajelzés"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Elvetés"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Ne jelenjen meg kitűzöttként"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Friss hírek megjelenítése…"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"A kitűzött értesítések alkalmazásokból származó élő információkat jelenítenek meg, és mindig az állapotsoron és a lezárási képernyőn jelennek meg"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ezeket az értesítéseket nem lehet módosítani."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"A hívásértesítéseket nem lehet módosítani."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Az értesítések jelen csoportját itt nem lehet beállítani"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Osztott képernyő használata, az alkalmazás a jobb oldalon van"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Osztott képernyő használata, az alkalmazás a bal oldalon van"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Váltás teljes képernyőre"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Váltás a jobb oldalt, illetve lent lévő appra osztott képernyő esetén"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Váltás a bal oldalt, illetve fent lévő appra osztott képernyő esetén"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Osztott képernyőn: az egyik alkalmazás lecserélése egy másikra"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Alacsony prioritású értesítési ikonok mutatása"</string>
<string name="other" msgid="429768510980739978">"Egyéb"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"mozaik eltávolításához"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"mozaik hozzáadása az utolsó pozícióhoz"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mozaik áthelyezése"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Legutóbbi alkalmazások megtekintése"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Váltás az alkalmazások között"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Kész"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Próbálja újra"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Vissza"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Csúsztassa gyorsan három ujját balra vagy jobbra az érintőpadon."</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"A legutóbbi appokért csúsztasson lefelé három ujjal az érintőpadon, és tartsa lenyomva ujjait."</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Az összes alkalmazás megtekintéséhez nyomja meg a billentyűzet műveletbillentyűjét."</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Törölve"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Oldja fel a megtekintéshez"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontextusfüggő tájékoztató párbeszédpanel"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"A visszalépéshez használja az érintőpadot"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Csúsztatasson gyorsan három ujjal balra vagy jobbra. Koppintson a további kézmozdulatokért."</string>
diff --git a/packages/SystemUI/res/values-hu/tiles_states_strings.xml b/packages/SystemUI/res/values-hu/tiles_states_strings.xml
index 06bf4f26ab84..c8f7b0f2fef8 100644
--- a/packages/SystemUI/res/values-hu/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-hu/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Ki"</item>
<item msgid="5908720590832378783">"Be"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Nem áll rendelkezésre"</item>
+ <item msgid="6641673879029894995">"Ki"</item>
+ <item msgid="5806682401126108403">"Be"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index 2aa72cc66e8a..aaedf56148c2 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth-ը միացված է:"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth սարքի պատկերակ"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Սեղմեք՝ սարքի մանրամասները կազմաձևելու համար"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Սեղմեք՝ բոլոր սարքերը տեսնելու համար"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Սեղմեք՝ նոր սարք զուգակցելու համար"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Մուտքագրում"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Լսողական սարք"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Միացում…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Հնարավոր չէ կարգավորել պայծառությունը, քանի որ այն\n կառավարվում է գլխավոր հավելվածի կողմից"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Հնարավոր չէ կարգավորել պայծառությունը, քանի որ այն կառավարվում է գլխավոր հավելվածի կողմից"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Ինքնապտտում"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Ավտոմատ պտտել էկրանը"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Տեղորոշում"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածը զրույցի գործառույթներ չի աջակցում"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Կարծիք հայտնել"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Փակել"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Ցույց չտալ որպես ամրացված"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Ցուցադրվում են թարմացումներ իրական ժամանակում"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Ամրացված ծանուցումները ցուցադրում են հավելվածների ընթացիկ տեղեկությունները և միշտ հայտնվում են կարգավիճակի գոտում և կողպէկրանին"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Այս ծանուցումները չեն կարող փոփոխվել:"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Զանգերի մասին ծանուցումները հնարավոր չէ փոփոխել։"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Ծանուցումների տվյալ խումբը հնարավոր չէ կարգավորել այստեղ"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Բազմա­խնդրու­թ­յուն"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Տրոհել էկրանը և տեղավորել այս հավելվածը աջ կողմում"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Տրոհել էկրանը և տեղավորել այս հավելվածը ձախ կողմում"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Անցնել լիաէկրան ռեժիմի"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Անցեք աջ կողմի կամ ներքևի հավելվածին տրոհված էկրանի միջոցով"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Անցեք աջ կողմի կամ վերևի հավելվածին տրոհված էկրանի միջոցով"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Տրոհված էկրանի ռեժիմում մեկ հավելվածը փոխարինել մյուսով"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Ցուցադրել ցածր առաջնահերթության ծանուցումների պատկերակները"</string>
<string name="other" msgid="429768510980739978">"Այլ"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"հեռացնել սալիկը"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ավելացնել սալիկը վերջին դիրքում"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Տեղափոխել սալիկը"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Դիտել վերջին հավելվածները"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Անցում մեկ հավելվածից մյուսին"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Պատրաստ է"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Նորից փորձեք։"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Հետ գնալ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Հպահարթակի վրա երեք մատով սահեցրեք ձախ կամ աջ"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Վերջերս օգտագործված հավելվածները դիտելու համար երեք մատը սահեցրեք վերև և սեղմած պահեք"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Բոլոր հավելվածները դիտելու համար սեղմեք գործողության ստեղնը ստեղնաշարի վրա"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Կոդավորված"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Ապակողպել դիտելու համար"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Համատեքստային ուսուցում"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Օգտագործեք ձեր հպահարթակը՝ վերադառնալու համար"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Երեք մատը սահեցրեք ձախ կամ աջ։ Հպեք՝ ավելի շատ ժեստերի ծանոթանալու համար։"</string>
diff --git a/packages/SystemUI/res/values-hy/tiles_states_strings.xml b/packages/SystemUI/res/values-hy/tiles_states_strings.xml
index dc8bbb14c0cf..e7eee796f91d 100644
--- a/packages/SystemUI/res/values-hy/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-hy/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Անջատված է"</item>
<item msgid="5908720590832378783">"Միացված է"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Հասանելի չէ"</item>
+ <item msgid="6641673879029894995">"Անջատված է"</item>
+ <item msgid="5806682401126108403">"Միացված է"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index c57f40f4b69d..4990774886a8 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth terhubung."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikon perangkat Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klik untuk mengonfigurasi detail perangkat"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Klik untuk melihat semua perangkat"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Klik untuk menyambungkan perangkat baru"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Alat bantu dengar"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Mengaktifkan…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Tidak dapat menyesuaikan kecerahan karena sedang\n dikontrol oleh aplikasi atas"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Tidak dapat menyesuaikan kecerahan karena sedang dikontrol oleh aplikasi atas"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Putar Otomatis"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Putar layar otomatis"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokasi"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak mendukung fitur percakapan"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Masukan"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Tutup"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Jangan tampilkan sebagai tersemat"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Menampilkan Info Terbaru Langsung"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Notifikasi yang disematkan menampilkan info terbaru dari aplikasi, serta selalu muncul di status bar dan layar kunci"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Notifikasi ini tidak dapat diubah."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Notifikasi panggilan tidak dapat diubah."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Grup notifikasi ini tidak dapat dikonfigurasi di sini"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Gunakan layar terpisah dengan aplikasi di sebelah kanan"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Gunakan layar terpisah dengan aplikasi di sebelah kiri"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Beralih ke layar penuh"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Beralih ke aplikasi di bagian kanan atau bawah saat menggunakan layar terpisah"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Beralih ke aplikasi di bagian kiri atau atas saat menggunakan layar terpisah"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Dalam layar terpisah: ganti salah satu aplikasi dengan yang lain"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Tampilkan ikon notifikasi prioritas rendah"</string>
<string name="other" msgid="429768510980739978">"Lainnya"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"menghapus kartu"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"menambahkan kartu ke posisi terakhir"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Pindahkan kartu"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Lihat aplikasi terbaru"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Beralih aplikasi"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Selesai"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Coba lagi"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Kembali"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Geser ke kiri atau kanan menggunakan tiga jari di touchpad"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Untuk melihat aplikasi terkini, geser ke atas dan tahan menggunakan tiga jari di touchpad"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Untuk melihat semua aplikasi, tekan tombol tindakan di keyboard"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Disamarkan"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Buka kunci untuk melihat"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Pendidikan kontekstual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Gunakan touchpad untuk kembali"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Geser ke kiri atau kanan menggunakan tiga jari. Ketuk untuk mempelajari gestur lainnya."</string>
diff --git a/packages/SystemUI/res/values-in/tiles_states_strings.xml b/packages/SystemUI/res/values-in/tiles_states_strings.xml
index b48a5873095b..182924dff630 100644
--- a/packages/SystemUI/res/values-in/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-in/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Nonaktif"</item>
<item msgid="5908720590832378783">"Aktif"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Tidak tersedia"</item>
+ <item msgid="6641673879029894995">"Nonaktif"</item>
+ <item msgid="5806682401126108403">"Aktif"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index ec284c24499e..3f8492a40a40 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth tengt."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Tákn Bluetooth-tækis"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Smelltu til að stilla tækjaupplýsingar"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Smelltu til að sjá öll tæki"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Smelltu til að para nýtt tæki"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Staða rafhlöðu óþekkt."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Tengt við <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Tengt við <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Inntak"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Heyrnartæki"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Kveikir…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ekki er hægt að breyta birtustiginu vegna þess að \n efsta forritið stjórnar því"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ekki er hægt að breyta birtustiginu vegna þess að efsta forritið stjórnar því"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Sjálfvirkur snúningur"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Snúa skjá sjálfkrafa"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Staðsetning"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> styður ekki samtalseiginleika"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Ábendingar"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Loka"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Ekki sýna sem fest"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Sýna uppfærslur í beinni"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Festar tilkynningar sýna upplýsingar frá forritum í rauntíma og birtast ávallt á stöðustikunni og lásskjánum"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ekki er hægt að breyta þessum tilkynningum."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Ekki er hægt að breyta tilkynningum um símtöl."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Ekki er hægt að stilla þessar tilkynningar hér"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Fjölvinnsla"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Notaðu skjáskiptingu fyrir forritið til hægri"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Notaðu skjáskiptingu fyrir forritið til vinstri"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Skipta yfir í allan skjáinn"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Skiptu í forrit til hægri eða fyrir neðan þegar skjáskipting er notuð"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Skiptu í forrit til vinstri eða fyrir ofan þegar skjáskipting er notuð"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Í skjáskiptingu: Skipta forriti út fyrir annað forrit"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Sýna tákn fyrir tilkynningar með litlum forgangi"</string>
<string name="other" msgid="429768510980739978">"Annað"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"fjarlægja flís"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"bæta reit við síðustu stöðu"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Færa flís"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Sjá nýleg forrit"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Að skipta á milli forrita"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Lokið"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Reyndu aftur!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Til baka"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Strjúktu til hægri eða vinstri á snertifletinum með þremur fingrum"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Strjúktu upp og haltu með þremur fingrum á snertifletinum til að sjá nýleg forrit"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Ýttu á aðgerðalykilinn á lyklaborðinu til að sjá öll forritin þín"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Ritskoðað"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Taktu úr lás til að skoða"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Samhengismiðuð menntun"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Notaðu snertiflötinn til að fara til baka"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Strjúktu til vinstri eða hægri með þremur fingrum. Ýttu til að læra fleiri bendingar."</string>
diff --git a/packages/SystemUI/res/values-is/tiles_states_strings.xml b/packages/SystemUI/res/values-is/tiles_states_strings.xml
index 92f07b68389a..58ce0ae7c443 100644
--- a/packages/SystemUI/res/values-is/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-is/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Slökkt"</item>
<item msgid="5908720590832378783">"Kveikt"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Ekki tiltækt"</item>
+ <item msgid="6641673879029894995">"Slökkt"</item>
+ <item msgid="5806682401126108403">"Kveikt"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 2391fe262ab8..bb7202bd665b 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth collegato."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icona del dispositivo Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Fai clic per configurare i dettagli del dispositivo"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Fai clic per vedere tutti i dispositivi"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Fai clic per accoppiare un nuovo dispositivo"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configura i dettagli del dispositivo"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Visualizza tutti i dispositivi"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Accoppia nuovo dispositivo"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Percentuale della batteria sconosciuta."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Connesso a <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Connesso a: <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Ingresso"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Apparecchi acustici"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Attivazione…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Impossibile regolare la luminosità perché è\n controllata dall\'app in primo piano"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Impossibile regolare la luminosità perché è controllata dall\'app in primo piano"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotazione automatica"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotazione automatica dello schermo"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Posizione"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> non supporta le funzionalità delle conversazioni"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Ignora"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Non mostrare come fissata"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Visualizzare gli aggiornamenti in tempo reale"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Le notifiche fissate mostrano informazioni in tempo reale provenienti dalle app e vengono sempre visualizzate nella barra di stato e nella schermata di blocco"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Impossibile modificare queste notifiche."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Impossibile modificare gli avvisi di chiamata."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Qui non è possibile configurare questo gruppo di notifiche"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Utilizza lo schermo diviso con l\'app a destra"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Utilizza lo schermo diviso con l\'app a sinistra"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Passa alla modalità a schermo intero"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Utilizza la modalità a schermo intero"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Utilizza la visualizzazione desktop"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Passa all\'app a destra o sotto mentre usi lo schermo diviso"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Passa all\'app a sinistra o sopra mentre usi lo schermo diviso"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Con lo schermo diviso: sostituisci un\'app con un\'altra"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Mostra icone di notifiche con priorità bassa"</string>
<string name="other" msgid="429768510980739978">"Altro"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"rimuovere il riquadro"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"aggiungere il riquadro all\'ultima posizione"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Sposta riquadro"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Visualizza app recenti"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Cambia app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Fine"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Avanti"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Riprova."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Indietro"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Scorri verso sinistra o destra con tre dita sul touchpad"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Per visualizzare le app recenti, scorri verso l\'alto e tieni premuto con tre dita sul touchpad"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Per visualizzare tutte le tue app, premi il tasto azione sulla tastiera"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Oscurata"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Sblocca per visualizzare"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Istruzione contestuale"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Usa il touchpad per tornare indietro"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Scorri verso sinistra o destra con tre dita. Tocca per scoprire altri gesti."</string>
diff --git a/packages/SystemUI/res/values-it/tiles_states_strings.xml b/packages/SystemUI/res/values-it/tiles_states_strings.xml
index 7e11d0becfea..5c56d085652f 100644
--- a/packages/SystemUI/res/values-it/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-it/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Off"</item>
<item msgid="5908720590832378783">"On"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Non disponibile"</item>
+ <item msgid="6641673879029894995">"Off"</item>
+ <item msgid="5806682401126108403">"On"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 0d7a620e7f92..92fc2034d667 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"‏Bluetooth מחובר."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"‏סמל של מכשיר Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"יש ללחוץ כדי להגדיר את פרטי המכשיר"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"אפשר ללחוץ כדי לראות את כל המכשירים"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"צריך ללחוץ כדי להתאים מכשיר חדש"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"קלט"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"מכשירי שמיעה"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ההפעלה מתבצעת…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"לא ניתן להתאים את הבהירות כי היא\n נשלטת על ידי האפליקציה העליונה"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"לא ניתן להתאים את הבהירות כי היא נשלטת על ידי האפליקציה העליונה"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"סיבוב אוטומטי"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"סיבוב אוטומטי של המסך"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"מיקום"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> לא תומכת בתכונות השיחה"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"משוב"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"סגירה"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"לא להצמיד"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"מוצגים עדכונים בזמן אמת"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"בהתראות המוצמדות מוצג מידע בזמן אמת מאפליקציות, והן תמיד מופיעות בשורת הסטטוס ובמסך הנעילה"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"לא ניתן לשנות את ההתראות האלה."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"לא ניתן לשנות את התראות השיחה."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"לא ניתן להגדיר כאן את קבוצת ההתראות הזו"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ריבוי משימות"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"שימוש במסך מפוצל כשהאפליקציה בצד ימין"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"שימוש במסך מפוצל כשהאפליקציה בצד שמאל"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"למסך מלא"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"מעבר לאפליקציה משמאל או למטה בזמן שימוש במסך מפוצל"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"מעבר לאפליקציה מימין או למעלה בזמן שימוש במסך מפוצל"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"כשהמסך מפוצל: החלפה בין אפליקציה אחת לאחרת"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"הצגת סמלי התראות בעדיפות נמוכה"</string>
<string name="other" msgid="429768510980739978">"אחר"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"הסרת הלחצן"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"הוספת הלחצן במיקום האחרון"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"העברת הלחצן"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"הצגת האפליקציות האחרונות"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"מעבר בין אפליקציות"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"סיום"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"צריך לנסות שוב."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"חזרה"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"מחליקים שמאלה או ימינה עם שלוש אצבעות על לוח המגע"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"כדי לראות את האפליקציות האחרונות, מחליקים למעלה לוחצים לחיצה ארוכה עם שלוש אצבעות על לוח המגע"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"כדי לראות את כל האפליקציות, מקישים על מקש הפעולה במקלדת"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"מצונזר"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"צריך לבטל את הנעילה כדי לראות"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"חינוך בהתאם להקשר"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"אפשר להשתמש בלוח המגע כדי לחזור אחורה"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"מחליקים ימינה או שמאלה עם שלוש אצבעות. ניתן ללחוץ כדי לקבל מידע נוסף על התנועות."</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 786763366fd4..3512271577cc 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetoothに接続済み。"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth デバイスのアイコン"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"クリックしてデバイスの詳細を設定します"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"クリックすると、すべてのデバイスが表示されます"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"クリックすると、新しいデバイスをペア設定できます"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>。デバイスの詳細を設定してください"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"すべてのデバイスを表示"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"新しいデバイスとペア設定"</string>
<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>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"入力"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"補聴器"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ON にしています…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"明るさはトップ アプリによって\n制御されているため、調整できません"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"明るさはトップ アプリによって制御されているため、調整できません"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"自動回転"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"画面を自動回転します"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"位置情報"</string>
@@ -530,7 +531,7 @@
<string name="accessibility_action_label_remove_widget" msgid="3373779447448758070">"ウィジェットを削除"</string>
<string name="accessibility_action_label_place_widget" msgid="1914197458644168978">"選択したウィジェットを配置"</string>
<string name="communal_widget_picker_title" msgid="1953369090475731663">"ロック画面ウィジェット"</string>
- <string name="communal_widget_picker_description" msgid="490515450110487871">"タブレットがロックされていても、ロック画面のウィジェットは誰でも確認できます。"</string>
+ <string name="communal_widget_picker_description" msgid="490515450110487871">"タブレットがロックされていても、ロック画面のウィジェットは誰でも見ることができます。"</string>
<string name="accessibility_action_label_unselect_widget" msgid="1041811747619468698">"ウィジェットの選択を解除する"</string>
<string name="accessibility_action_label_shrink_widget" msgid="8259511040536438771">"高さを低くする"</string>
<string name="accessibility_action_label_expand_widget" msgid="9190524260912211759">"高さを高くする"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g>は会話機能に対応していません"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"フィードバック"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"閉じる"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"固定表示しない"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"ライブ情報が表示されます"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"固定した通知にアプリのライブ情報が表示され、常にステータスバーとロック画面に表示されます"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"これらの通知は変更できません。"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"着信通知は変更できません。"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"このグループの通知はここでは設定できません"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"マルチタスク"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"分割画面の使用(アプリを右側に表示)"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"分割画面の使用(アプリを左側に表示)"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"全画面表示に切り替える"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"全画面表示に切り替える"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"デスクトップ ビューを使用する"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"分割画面の使用時に右側または下部のアプリに切り替える"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"分割画面の使用時に左側または上部のアプリに切り替える"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"分割画面中: アプリを順に置換する"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"優先度の低い通知アイコンを表示"</string>
<string name="other" msgid="429768510980739978">"その他"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"タイルを削除"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"タイルを最後の位置に追加する"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"タイルを移動"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"最近使ったアプリを表示する"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"アプリの切り替え"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"完了"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"次へ"</string>
<string name="gesture_error_title" msgid="469064941635578511">"もう一度お試しください。"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"戻る"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"タッチパッドを 3 本の指で左または右にスワイプします"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"最近使ったアプリを表示するには、3 本の指でタッチパッドを上にスワイプして長押しします"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"すべてのアプリを表示するには、キーボードのアクションキーを押してください"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"削除済み"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"表示するにはロックを解除してください"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"コンテキスト メニューに関する説明"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"タッチパッドを使用して、前の画面に戻る"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"3 本の指で左または右にスワイプします。ジェスチャーの詳細を確認するにはタップしてください。"</string>
diff --git a/packages/SystemUI/res/values-ja/tiles_states_strings.xml b/packages/SystemUI/res/values-ja/tiles_states_strings.xml
index 1282f5702483..cce5ceb7945d 100644
--- a/packages/SystemUI/res/values-ja/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ja/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"OFF"</item>
<item msgid="5908720590832378783">"ON"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"使用不可"</item>
+ <item msgid="6641673879029894995">"OFF"</item>
+ <item msgid="5806682401126108403">"ON"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index b599220a3cc0..3877fe76ad21 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth დაკავშირებულია."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth მოწყობილობის ხატულა"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"დააწკაპუნეთ მოწყობილობის დეტალების კონფიგურირებისთვის"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"დააწკაპუნეთ ყველა მოწყობილობის სანახავად"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"დააწკაპუნეთ ახალი მოწყობილობის დასაწყვილებლად"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. მოწყობილობის დეტალის კონფიგურაცია"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"ყველა მოწყობილობის ნახვა"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"ახალი მოწყობილობის დაწყვილება"</string>
<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>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ს არ აქვს მიმოწერის ფუნქციების მხარდაჭერა"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"გამოხმაურება"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"დახურვა"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"არ გამოჩნდეს ჩამაგრებულად"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"აჩვენებს განახლებებს რეალურ დროში"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"ჩამაგრებული შეტყობინებები რეალურ დროში აჩვენებს ინფორმაციას აპებიდან და ყოველთვის ჩანს სტატუსის ზოლსა და ჩაკეტილ ეკრანზე"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ამ შეტყობინებების შეცვლა შეუძლებელია."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"ზარის შეტყობინებების შეცვლა შეუძლებელია."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"შეტყობინებების ამ ჯგუფის კონფიგურირება აქ შეუძლებელია"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"მრავალამოცანიანი რეჟიმი"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ეკრანის გაყოფის გამოყენება აპზე მარჯვნივ"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ეკრანის გაყოფის გამოყენება აპზე მარცხნივ"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"სრულ ეკრანზე გადართვა"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"სრული ეკრანის გამოყენება"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"დესკტოპის ხედის გამოყენება"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"ეკრანის გაყოფის გამოყენებისას აპზე მარჯვნივ ან ქვემოთ გადართვა"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"ეკრანის გაყოფის გამოყენებისას აპზე მარცხნივ ან ზემოთ გადართვა"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"ეკრანის გაყოფის დროს: ერთი აპის მეორით ჩანაცვლება"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"დაბალი პრიორიტეტის მქონე შეტყობინებების ხატულების ჩვენება"</string>
<string name="other" msgid="429768510980739978">"სხვა"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"მოზაიკის ფილის წაშლა"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"მოზაიკის ფილის ბოლო პოზიციაზე დამატება"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"მოზაიკის გადატანა"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"ბოლო აპების ნახვა"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"აპების გადართვა"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"მზადაა"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"შემდეგი"</string>
<string name="gesture_error_title" msgid="469064941635578511">"ცადეთ ხელახლა!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"უკან დაბრუნება"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"თქვენს სენსორულ პანელზე სამი თითით გადაფურცლეთ მარცხნივ ან მარჯვნივ"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"ბოლო აპების სანახავად სენსორულ პანელზე სამი თითით გადაფურცლეთ ზემოთ და მოიცადეთ"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"ყველა აპის სანახავად დააჭირეთ მოქმედების კლავიშს თქვენს კლავიატურაზე"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"ტექსტს ადევს ცენზურა"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"განბლოკვა სანახავად"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"კონტექსტური განათლება"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"უკან დასაბრუნებლად გამოიყენეთ სენსორული პანელი"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"გადაფურცლეთ მარცხნივ ან მარჯვნივ სამი თითით. შეეხეთ მეტი ჟესტის შესასწავლად."</string>
diff --git a/packages/SystemUI/res/values-ka/tiles_states_strings.xml b/packages/SystemUI/res/values-ka/tiles_states_strings.xml
index 81fc54d8381e..7a2298143e4c 100644
--- a/packages/SystemUI/res/values-ka/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ka/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"გამორთული"</item>
<item msgid="5908720590832378783">"ჩართული"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"მიუწვდომელი"</item>
+ <item msgid="6641673879029894995">"გამორთული"</item>
+ <item msgid="5806682401126108403">"ჩართული"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index bf12aca88d5d..506ce8b32905 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth қосылған."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth құрылғысы белгішесі"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Құрылғы деректерін конфигурациялау үшін басыңыз."</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Барлық құрылғыны көру үшін басыңыз."</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Жаңа құрылғы жұптау үшін басыңыз."</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Кіріс"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Есту аппараттары"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Қосылып жатыр…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Жарықтықты реттеу мүмкін емес, себебі ол\n жетекші қолданба арқылы басқарылады."</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Жарықтықты реттеу мүмкін емес, себебі ол жетекші қолданба арқылы басқарылады."</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автоматты түрде бұру"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоматты айналатын экран"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Локация"</string>
@@ -689,11 +693,11 @@
<string name="screen_pinning_negative" msgid="6882816864569211666">"Жоқ, рақмет"</string>
<string name="screen_pinning_start" msgid="7483998671383371313">"Қолданба бекітілді."</string>
<string name="screen_pinning_exit" msgid="4553787518387346893">"Қолданба босатылды."</string>
- <string name="stream_voice_call" msgid="7468348170702375660">"Қоңырау шалу"</string>
+ <string name="stream_voice_call" msgid="7468348170702375660">"Сөйлесу кезіндегі дыбыс"</string>
<string name="stream_system" msgid="7663148785370565134">"Жүйе"</string>
- <string name="stream_ring" msgid="7550670036738697526">"Шылдыр"</string>
+ <string name="stream_ring" msgid="7550670036738697526">"Қоңырау сигналы"</string>
<string name="stream_music" msgid="2188224742361847580">"Мультимедиа"</string>
- <string name="stream_alarm" msgid="16058075093011694">"Дабыл"</string>
+ <string name="stream_alarm" msgid="16058075093011694">"Оятқыш"</string>
<string name="stream_notification" msgid="7930294049046243939">"Хабарландыру"</string>
<string name="stream_bluetooth_sco" msgid="6234562365528664331">"Bluetooth"</string>
<string name="stream_dtmf" msgid="7322536356554673067">"Қос үнді көп жиілік"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> әңгіме функцияларын қолдамайды."</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Пікір"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Жабу"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Бекітілген ретінде көрсетпеу"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Нақты уақыттағы жаңартуларды көрсету"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Бекітілген хабарландырулар қолданбалардың нақты уақыттағы ақпаратын көрсетеді және әрдайым күй жолағында және құлып экранында көрсетіледі."</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Бұл хабарландыруларды өзгерту мүмкін емес."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Қоңырау туралы хабарландыруларды өзгерту мүмкін емес."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Мұндай хабарландырулар бұл жерде конфигурацияланбайды."</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Мультитаскинг"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Қолданбаны бөлінген экранның оң жағынан пайдалану"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Қолданбаны бөлінген экранның сол жағынан пайдалану"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Толық экранға ауысу"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Бөлінген экранда оң не төмен жақтағы қолданбаға ауысу"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Бөлінген экранда сол не жоғары жақтағы қолданбаға ауысу"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Экранды бөлу кезінде: бір қолданбаны басқасымен алмастыру"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Маңызды емес хабарландыру белгішелерін көрсету"</string>
<string name="other" msgid="429768510980739978">"Басқа"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"бөлшекті өшіру"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"соңғы позицияға бөлшек қосу"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Бөлшекті жылжыту"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Соңғы қолданбаларды көру"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Қолданба ауыстыру"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Дайын"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Қайталап көріңіз"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Артқа"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Сенсорлық тақтада үш саусақпен оңға немесе солға сырғытыңыз."</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Сенсорлық тақтада үш саусақпен жоғары сырғытып, басып тұрсаңыз, соңғы ашылған қолданбаларды көресіз."</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Пернетақтада әрекет пернесін басып, барлық қолданбаны көре аласыз."</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Жасырылған"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Көру үшін құлыпты ашыңыз."</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Контекстік білім"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Артқа қайту үшін сенсорлық тақтаны қолданыңыз"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Үш саусақпен солға не оңға сырғытыңыз. Басқа қимылдарды үйрену үшін түртіңіз."</string>
diff --git a/packages/SystemUI/res/values-kk/tiles_states_strings.xml b/packages/SystemUI/res/values-kk/tiles_states_strings.xml
index 32562c652750..2b839c89a6e3 100644
--- a/packages/SystemUI/res/values-kk/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-kk/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Өшірулі"</item>
<item msgid="5908720590832378783">"Қосулы"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Қолжетімді емес"</item>
+ <item msgid="6641673879029894995">"Өшірулі"</item>
+ <item msgid="5806682401126108403">"Қосулы"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index e12fd1315636..1fa0acbe418d 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"បាន​តភ្ជាប់​ប៊្លូធូស។"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"រូបឧបករណ៍​ប៊្លូធូស"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ចុចដើម្បីកំណត់រចនាសម្ព័ន្ធព័ត៌មានលម្អិតអំពីឧបករណ៍"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"ចុច ដើម្បីមើលឃើញឧបករណ៍ទាំងអស់"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"ចុច ដើម្បីផ្គូផ្គងឧបករណ៍ថ្មី"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"បញ្ចូល"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ឧបករណ៍ជំនួយការស្ដាប់"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"កំពុង​បើក..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"មិនអាចកែតម្រូវកម្រិតពន្លឺបានទេ ដោយសារវាកំពុងស្ថិតក្រោម\nការគ្រប់គ្រងរបស់កម្មវិធីខាងលើគេ"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"មិនអាចកែតម្រូវកម្រិតពន្លឺបានទេ ដោយសារវាកំពុងស្ថិតក្រោមការគ្រប់គ្រងរបស់កម្មវិធីខាងលើគេ"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"បង្វិល​ស្វ័យ​ប្រវត្តិ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"បង្វិលអេក្រង់ស្វ័យប្រវត្តិ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ទី​តាំង​"</string>
@@ -689,7 +693,7 @@
<string name="screen_pinning_negative" msgid="6882816864569211666">"ទេ អរគុណ"</string>
<string name="screen_pinning_start" msgid="7483998671383371313">"បានខ្ទាស់​កម្មវិធី"</string>
<string name="screen_pinning_exit" msgid="4553787518387346893">"បានដកខ្ទាស់​កម្មវិធី"</string>
- <string name="stream_voice_call" msgid="7468348170702375660">"ហៅ"</string>
+ <string name="stream_voice_call" msgid="7468348170702375660">"ការហៅទូរសព្ទ"</string>
<string name="stream_system" msgid="7663148785370565134">"ប្រព័ន្ធ"</string>
<string name="stream_ring" msgid="7550670036738697526">"រោទ៍"</string>
<string name="stream_music" msgid="2188224742361847580">"មេឌៀ"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> មិនអាចប្រើ​មុខងារ​សន្ទនា​បានទេ"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"មតិកែលម្អ"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ច្រានចោល"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"កុំបង្ហាញដូចអ្វីដែលបានខ្ទាស់"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"ការបង្ហាញព័ត៌មាន​បន្តផ្ទាល់"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"ការជូនដំណឹងដែលបានខ្ទាស់បង្ហាញព័ត៌មានបន្តផ្ទាល់ពីកម្មវិធី និងតែងតែបង្ហាញនៅលើរបារ​ស្ថានភាព និងអេក្រង់ចាក់សោ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"មិនអាច​កែប្រែ​ការជូនដំណឹង​ទាំងនេះ​បានទេ។"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"មិនអាច​កែប្រែ​ការជូនដំណឹងអំពីការហៅទូរសព្ទបានទេ។"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"មិនអាច​កំណត់​រចនាសម្ព័ន្ធ​ក្រុមការជូនដំណឹងនេះ​នៅទីនេះ​បានទេ"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ការដំណើរការបានច្រើន"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ប្រើមុខងារបំបែកអេក្រង់ជាមួយកម្មវិធីនៅខាងស្ដាំ"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ប្រើមុខងារបំបែកអេក្រង់ជាមួយកម្មវិធីនៅខាងឆ្វេង"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"ប្ដូរទៅ​អេក្រង់ពេញ"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"ប្ដូរទៅកម្មវិធីនៅខាងស្ដាំ ឬខាងក្រោម ពេលកំពុងប្រើមុខងារ​បំបែកអេក្រង់"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"ប្ដូរទៅកម្មវិធីនៅខាងឆ្វេង ឬខាងលើ ពេលកំពុងប្រើមុខងារ​បំបែកអេក្រង់"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"ក្នុងអំឡុងពេលប្រើមុខងារបំបែកអេក្រង់៖ ជំនួសកម្មវិធីពីមួយទៅមួយទៀត"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"បង្ហាញ​រូប​ការជូនដំណឹង​ដែលមានអាទិភាពទាប"</string>
<string name="other" msgid="429768510980739978">"ផ្សេងៗ"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ដកប្រអប់ចេញ"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"បញ្ចូលប្រអប់ទៅទីតាំងចុងក្រោយ"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ផ្លាស់ទី​ប្រអប់"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"មើលកម្មវិធីថ្មីៗ"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ប្ដូរ​កម្មវិធី"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"រួចរាល់"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"សូមព្យាយាមម្ដងទៀត!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ថយ​ក្រោយ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"អូសទៅឆ្វេង ឬស្ដាំដោយប្រើ​ម្រាមដៃបីនៅលើផ្ទាំងប៉ះរបស់អ្នក"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"ដើម្បីមើលកម្មវិធីថ្មីៗ សូមអូសឡើងលើ ហើយសង្កត់ឱ្យជាប់ដោយប្រើម្រាមដៃបីនៅលើផ្ទាំងប៉ះ"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"ដើម្បីមើលកម្មវិធីទាំងអស់របស់អ្នក សូមចុចគ្រាប់ចុចសកម្មភាពនៅលើក្ដារចុចរបស់អ្នក"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"បាន​កែ​លម្អ​ពាក្យពេចន៍"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"ដោះសោដើម្បីមើល"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"ការអប់រំ​តាមបរិបទ"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"ប្រើផ្ទាំងប៉ះរបស់អ្នក ដើម្បីថយក្រោយ"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"អូសទៅឆ្វេង ឬស្ដាំដោយប្រើ​ម្រាមដៃបី។ ចុច ដើម្បីស្វែងយល់បន្ថែមអំពីចលនា។"</string>
diff --git a/packages/SystemUI/res/values-km/tiles_states_strings.xml b/packages/SystemUI/res/values-km/tiles_states_strings.xml
index 0e47250b8f33..7085509a596a 100644
--- a/packages/SystemUI/res/values-km/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-km/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"បិទ"</item>
<item msgid="5908720590832378783">"បើក"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"មិនមានទេ"</item>
+ <item msgid="6641673879029894995">"បិទ"</item>
+ <item msgid="5806682401126108403">"បើក"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index 3bb4e4de91ea..5363c62a644a 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ಬ್ಲೂಟೂತ್‌‌ ಸಂಪರ್ಕಗೊಂಡಿದೆ."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ಬ್ಲೂಟೂತ್ ಸಾಧನ ಐಕಾನ್"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ಸಾಧನದ ವಿವರಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"ಎಲ್ಲಾ ಸಾಧನಗಳನ್ನು ನೋಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"ಹೊಸ ಸಾಧನವನ್ನು ಪೇರ್ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ಇನ್‌ಪುಟ್"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ಶ್ರವಣ ಸಾಧನಗಳು"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ಆನ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ಬ್ರೈಟ್‌ನೆಸ್ ಅನ್ನು ಅಡ್ಜಸ್ಟ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ,\n ಏಕೆಂದರೆ ಅದನ್ನು ಟಾಪ್ ಆ್ಯಪ್ ನಿಯಂತ್ರಿಸುತ್ತಿದೆ"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ಬ್ರೈಟ್‌ನೆಸ್ ಅನ್ನು ಅಡ್ಜಸ್ಟ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ, ಏಕೆಂದರೆ ಅದನ್ನು ಟಾಪ್ ಆ್ಯಪ್ ನಿಯಂತ್ರಿಸುತ್ತಿದೆ"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ಸ್ವಯಂ-ತಿರುಗುವಿಕೆ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ಪರದೆಯನ್ನು ಸ್ವಯಂ-ತಿರುಗಿಸಿ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ಸ್ಥಳ"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"ಸಂವಾದ ಫೀಚರ್‌ಗಳನ್ನು <xliff:g id="APP_NAME">%1$s</xliff:g> ಬೆಂಬಲಿಸುವುದಿಲ್ಲ"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ಫೀಡ್‌ಬ್ಯಾಕ್"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ವಜಾಗೊಳಿಸಿ"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"ಪಿನ್ ಮಾಡಿದ ಹಾಗೆ ತೋರಿಸಬೇಡಿ"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"ಲೈವ್ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ತೋರಿಸಲಾಗುತ್ತಿದೆ"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"ಪಿನ್ ಮಾಡಲಾದ ನೋಟಿಫಿಕೇಶನ್‌ಗಳು ಆ್ಯಪ್‌ಗಳಿಂದ ಲೈವ್ ಮಾಹಿತಿಯನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತವೆ ಹಾಗೂ ಅವುಗಳು ಯಾವಾಗಲೂ ಸ್ಥಿತಿ ಪಟ್ಟಿ ಮತ್ತು ಲಾಕ್ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"ಕರೆ ಅಧಿಸೂಚನೆಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"ಈ ಗುಂಪಿನ ಅಧಿಸೂಚನೆಗಳನ್ನು ಇಲ್ಲಿ ಕಾನ್ಫಿಗರ್‌ ಮಾಡಲಾಗಿರುವುದಿಲ್ಲ"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ಮಲ್ಟಿಟಾಸ್ಕಿಂಗ್"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ಬಲಭಾಗದಲ್ಲಿ ಆ್ಯಪ್ ಮೂಲಕ ಸ್ಪ್ಲಿಟ್ ಸ್ಕ್ರೀನ್ ಬಳಸಿ"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ಎಡಭಾಗದಲ್ಲಿ ಆ್ಯಪ್ ಮೂಲಕ ಸ್ಪ್ಲಿಟ್ ಸ್ಕ್ರೀನ್ ಬಳಸಿ"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"ಫುಲ್‌ಸ್ಕ್ರೀನ್ ಮೋಡ್‌ಗೆ ಬದಲಿಸಿ"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"ಸ್ಕ್ರೀನ್ ಬೇರ್ಪಡಿಸಿ ಮೋಡ್ ಬಳಸುವಾಗ ಬಲಭಾಗ ಅಥವಾ ಕೆಳಭಾಗದಲ್ಲಿರುವ ಆ್ಯಪ್‌ಗೆ ಬದಲಿಸಿ"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"ಸ್ಕ್ರೀನ್ ಬೇರ್ಪಡಿಸಿ ಮೋಡ್ ಬಳಸುವಾಗ ಎಡಭಾಗ ಅಥವಾ ಮೇಲ್ಭಾಗದಲ್ಲಿರುವ ಆ್ಯಪ್‌ಗೆ ಬದಲಿಸಿ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"ಸ್ಕ್ರೀನ್ ಬೇರ್ಪಡಿಸುವ ಸಮಯದಲ್ಲಿ: ಒಂದು ಆ್ಯಪ್‌ನಿಂದ ಮತ್ತೊಂದು ಆ್ಯಪ್‌ಗೆ ಬದಲಿಸಿ"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"ಕಡಿಮೆ-ಆದ್ಯತೆ ಸೂಚನೆಯ ಐಕಾನ್‌ಗಳನ್ನು ತೋರಿಸಿ"</string>
<string name="other" msgid="429768510980739978">"ಇತರ"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ಟೈಲ್ ಅನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ಕೊನೆಯ ಸ್ಥಾನಕ್ಕೆ ಟೈಲ್ ಅನ್ನು ಸೇರಿಸಿ"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ಟೈಲ್ ಸರಿಸಿ"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"ಇತ್ತೀಚಿನ ಆ್ಯಪ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ಆ್ಯಪ್‌ಗಳನ್ನು ಬದಲಿಸಿ"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"ಮುಗಿದಿದೆ"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"ಪುನಃ ಪ್ರಯತ್ನಿಸಿ!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ಹಿಂತಿರುಗಿ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"ನಿಮ್ಮ ಟಚ್‌ಪ್ಯಾಡ್‌ನಲ್ಲಿ ಮೂರು ಬೆರಳುಗಳನ್ನು ಬಳಸಿ ಎಡ ಅಥವಾ ಬಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"ಇತ್ತೀಚಿನ ಆ್ಯಪ್‌ಗಳನ್ನು ನೋಡಲು, ಟಚ್‌ಪ್ಯಾಡ್‌ನಲ್ಲಿ ಮೂರು ಬೆರಳುಗಳಿಂದ ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ ಹಾಗೂ ಹೋಲ್ಡ್ ಮಾಡಿ"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"ನಿಮ್ಮ ಎಲ್ಲಾ ಆ್ಯಪ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಲು, ನಿಮ್ಮ ಕೀಬೋರ್ಡ್‌ನಲ್ಲಿರುವ ಆ್ಯಕ್ಷನ್‌ ಕೀಯನ್ನು ಒತ್ತಿರಿ"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"ಅರ್ಥಬದ್ಧವಾಗಿಸಲಾಗಿದೆ"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"ನೋಡಲು ಅನ್‌ಲಾಕ್ ಮಾಡಿ"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"ಸಂದರ್ಭೋಚಿತ ಶಿಕ್ಷಣ"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"ಹಿಂತಿರುಗಲು ನಿಮ್ಮ ಟಚ್‌ಪ್ಯಾಡ್ ಅನ್ನು ಬಳಸಿ"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"ಮೂರು ಬೆರಳುಗಳಿಂದ ಎಡಕ್ಕೆ ಅಥವಾ ಬಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ. ಇನ್ನಷ್ಟು ಗೆಸ್ಚರ್‌ಗಳನ್ನು ತಿಳಿಯಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
diff --git a/packages/SystemUI/res/values-kn/tiles_states_strings.xml b/packages/SystemUI/res/values-kn/tiles_states_strings.xml
index b3543f9d2638..487be133293f 100644
--- a/packages/SystemUI/res/values-kn/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-kn/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"ಆಫ್ ಆಗಿದೆ"</item>
<item msgid="5908720590832378783">"ಆನ್ ಆಗಿದೆ"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"ಲಭ್ಯವಿಲ್ಲ"</item>
+ <item msgid="6641673879029894995">"ಆಫ್ ಆಗಿದೆ"</item>
+ <item msgid="5806682401126108403">"ಆನ್ ಆಗಿದೆ"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 33f54b69b4d5..931daa09699b 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"블루투스가 연결되었습니다."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"블루투스 기기 아이콘"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"기기 세부정보를 구성하려면 클릭하세요."</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"모든 기기를 보려면 클릭하세요"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"새 기기를 페어링하려면 클릭하세요"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"입력"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"보청기"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"켜는 중..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"상위 앱에서 밝기를 제어하고 있으므로\n 밝기를 조절할 수 없습니다."</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"상위 앱에서 밝기를 제어하고 있으므로 밝기를 조절할 수 없습니다."</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"자동 회전"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"화면 자동 회전"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"위치"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> 앱은 대화 기능을 지원하지 않습니다."</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"의견"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"닫기"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"고정된 것으로 표시 안함"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"실시간 소식 표시"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"고정된 알림은 앱의 실시간 정보를 표시하며, 항상 상태 표시줄과 잠금 화면에 표시됩니다."</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"이 알림은 수정할 수 없습니다."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"전화 알림은 수정할 수 없습니다."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"이 알림 그룹은 여기에서 설정할 수 없습니다."</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"멀티태스킹"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"앱이 오른쪽에 오도록 화면 분할 사용"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"앱이 왼쪽에 오도록 화면 분할 사용"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"전체 화면으로 전환"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"화면 분할을 사용하는 중에 오른쪽 또는 아래쪽에 있는 앱으로 전환"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"화면 분할을 사용하는 중에 왼쪽 또는 위쪽에 있는 앱으로 전환하기"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"화면 분할 중: 다른 앱으로 바꾸기"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"우선순위가 낮은 알림 아이콘 표시"</string>
<string name="other" msgid="429768510980739978">"기타"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"타일 삭제"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"마지막 위치에 타일 추가"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"타일 이동"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"최근 앱 보기"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"앱 전환"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"완료"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"다시 시도해 보세요"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"뒤로"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"세 손가락을 사용해 터치패드에서 왼쪽 또는 오른쪽으로 스와이프하세요."</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"최근 앱을 보려면 터치패드에서 세 손가락으로 위로 스와이프한 후 잠시 기다리세요"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"모든 앱을 보려면 키보드의 작업 키를 누르세요"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"수정됨"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"잠금 해제하여 보기"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"컨텍스트 교육"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"터치패드를 사용하여 돌아가기"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"세 손가락을 사용해 왼쪽 또는 오른쪽으로 스와이프하세요. 더 많은 동작을 알아보려면 탭하세요."</string>
diff --git a/packages/SystemUI/res/values-ko/tiles_states_strings.xml b/packages/SystemUI/res/values-ko/tiles_states_strings.xml
index c512435020dd..dfdcefe0ca0f 100644
--- a/packages/SystemUI/res/values-ko/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ko/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"사용 안함"</item>
<item msgid="5908720590832378783">"사용"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"사용할 수 없음"</item>
+ <item msgid="6641673879029894995">"사용 안함"</item>
+ <item msgid="5806682401126108403">"사용"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index e764badc2d37..f1c4eef878b8 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth байланышта"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth түзмөгүнүн сүрөтчөсү"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Түзмөктүн чоо-жайын конфигурациялоо үчүн чыкылдатыңыз"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Бардык түзмөктөрдү көрүү үчүн чыкылдатыңыз"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Жаңы түзмөк кошуу үчүн чыкылдатыңыз"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Киргизүү"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Угуу аппараттары"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Күйгүзүлүүдө…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Жарыктыкты тууралоого болбойт, анткени аны\n жогорку колдонмо көзөмөлдөйт"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Жарыктыкты тууралоого болбойт, анткени аны жогорку колдонмо көзөмөлдөйт"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Авто буруу"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Экранды авто буруу"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Жайгашкан жер"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунда оозеки сүйлөшкөнгө болбойт"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Пикир билдирүү"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Жабуу"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Билдирмелерди бошотуу"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Анык убакыттагы билдирмелерди көрсөтүү"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Кадалган билдирмелер ар дайым абал тилкесинде жана кулпуланган экранда көрсөтүлүп, колдонмолордогу маалыматты анык убакытта көрсөтөт"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Бул билдирмелерди өзгөртүүгө болбойт."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Чалуу билдирмелерин өзгөртүүгө болбойт."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Бул билдирмелердин тобун бул жерде конфигурациялоого болбойт"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Бир нече тапшырма аткаруу"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Колдонмону оңго жылдырып, экранды бөлүү"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Колдонмону солго жылдырып, экранды бөлүү"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Толук экранга которулуу"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Бөлүнгөн экранда сол же төмөн жактагы колдонмого которулуу"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Бөлүнгөн экранды колдонуп жатканда сол же жогору жактагы колдонмого которулуңуз"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Экранды бөлүү режиминде бир колдонмону экинчисине алмаштыруу"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Анча маанилүү эмес билдирменин сүрөтчөлөрүн көрсөтүү"</string>
<string name="other" msgid="429768510980739978">"Башка"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ыкчам баскычты өчүрүү"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"аягына карта кошуу"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Ыкчам баскычты жылдыруу"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Акыркы колдонмолорду көрүү"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Колдонмолорду которуштуруу"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Бүттү"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Кайталап көрүңүз!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Артка кайтуу"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Сенсордук тактаны үч манжаңыз менен солго же оңго сүрүңүз"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Акыркы колдонмолорду көрүү үчүн сенсордук тактаны үч манжаңыз менен өйдө сүрүп, кармап туруңуз"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Бардык колдонмолоруңузду көрүү үчүн баскычтобуңуздагы аракет баскычын басыңыз"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Жашырылды"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Көрүү үчүн кулпусун ачыңыз"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Контексттик билим берүү"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Артка кайтуу үчүн сенсордук тактаны колдонуңуз"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Үч манжаңыз менен солго же оңго сүрүңүз. Башка жаңсоолорду үйрөнүү үчүн таптаңыз."</string>
diff --git a/packages/SystemUI/res/values-ky/tiles_states_strings.xml b/packages/SystemUI/res/values-ky/tiles_states_strings.xml
index 47e36da6126f..6077f6647ca9 100644
--- a/packages/SystemUI/res/values-ky/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ky/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Өчүк"</item>
<item msgid="5908720590832378783">"Күйүк"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Жеткиликсиз"</item>
+ <item msgid="6641673879029894995">"Өчүк"</item>
+ <item msgid="5806682401126108403">"Күйүк"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-land-television/dimens.xml b/packages/SystemUI/res/values-land-television/dimens.xml
index d3bafbca4bb7..b1a46a6805ff 100644
--- a/packages/SystemUI/res/values-land-television/dimens.xml
+++ b/packages/SystemUI/res/values-land-television/dimens.xml
@@ -20,7 +20,7 @@
<dimen name="volume_dialog_panel_width">48dp</dimen>
<dimen name="volume_dialog_panel_width_half">24dp</dimen>
<dimen name="volume_dialog_panel_transparent_padding">24dp</dimen>
- <dimen name="volume_dialog_slider_width">4dp</dimen>
+ <dimen name="volume_dialog_slider_width_legacy">4dp</dimen>
<dimen name="volume_dialog_slider_corner_radius">@dimen/volume_dialog_slider_width</dimen>
<dimen name="volume_dialog_background_blur_radius">31dp</dimen>
<dimen name="volume_tool_tip_right_margin">136dp</dimen>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index 3236b2e2faad..de9694af818d 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ເຊື່ອມຕໍ່ Bluetooth ແລ້ວ."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ໄອຄອນອຸປະກອນ Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ຄລິກເພື່ອຕັ້ງຄ່າລາຍລະອຽດອຸປະກອນ"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"ຄລິກເພື່ອເບິ່ງອຸປະກອນທັງໝົດ"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"ຄລິກເພື່ອຈັບຄູ່ອຸປະກອນໃໝ່"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ການປ້ອນຂໍ້ມູນ"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ເຄື່ອງຊ່ວຍຟັງ"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ກຳລັງເປີດ..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ບໍ່ສາມາດປັບຄວາມແຈ້ງເນື່ອງຈາກມັນ\n ຖືກຄວບຄຸມໂດຍແອັບຍອດນິຍົມ"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ບໍ່ສາມາດປັບຄວາມແຈ້ງເນື່ອງຈາກມັນ ຖືກຄວບຄຸມໂດຍແອັບຍອດນິຍົມ"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ໝຸນ​ອັດ​ຕະ​ໂນ​ມັດ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ໝຸນໜ້າຈໍອັດຕະໂນມັດ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ສະຖານທີ່"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ບໍ່ຮອງຮັບຄຸນສົມບັດການສົນທະນາ"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ຄຳຕິຊົມ"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ປິດໄວ້"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"ຢ່າສະແດງເປັນປັກໝຸດ"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"ກຳລັງສະແດງອັບເດດສົດ"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"ການແຈ້ງເຕືອນທີ່ປັກໝຸດໄວ້ຈະສະແດງຂໍ້ມູນສົດຈາກແອັບຕ່າງໆ ແລະ ຈະປາກົດຢູ່ແຖບສະຖານະ ແລະ ໜ້າຈໍລັອກສະເໝີ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ບໍ່ສາມາດແກ້ໄຂການແຈ້ງເຕືອນເຫຼົ່ານີ້ໄດ້."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"ບໍ່ສາມາດແກ້ໄຂການແຈ້ງເຕືອນການໂທໄດ້."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"ບໍ່ສາມາດຕັ້ງຄ່າກຸ່ມການແຈ້ງເຕືອນນີ້ຢູ່ບ່ອນນີ້ໄດ້"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ການເຮັດຫຼາຍໜ້າວຽກພ້ອມກັນ"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ໃຊ້ໂໝດແບ່ງໜ້າຈໍໂດຍໃຫ້ແອັບຢູ່ເບື້ອງຂວາ"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ໃຊ້ໂໝດແບ່ງໜ້າຈໍໂດຍໃຫ້ແອັບຢູ່ເບື້ອງຊ້າຍ"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"ສະຫຼັບໄປໃຊ້ໂໝດເຕັມຈໍ"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"ສະຫຼັບໄປໃຊ້ແອັບຢູ່ຂວາ ຫຼື ທາງລຸ່ມໃນຂະນະທີ່ໃຊ້ແບ່ງໜ້າຈໍ"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"ສະຫຼັບໄປໃຊ້ແອັບຢູ່ຊ້າຍ ຫຼື ທາງເທິງໃນຂະນະທີ່ໃຊ້ແບ່ງໜ້າຈໍ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"ໃນລະຫວ່າງແບ່ງໜ້າຈໍ: ໃຫ້ປ່ຽນຈາກແອັບໜຶ່ງເປັນອີກແອັບໜຶ່ງ"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"ສະແດງໄອຄອນການແຈ້ງເຕືອນຄວາມສຳຄັນຕ່ຳ"</string>
<string name="other" msgid="429768510980739978">"ອື່ນໆ"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ລຶບແຜ່ນອອກ"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ເພີ່ມແຜ່ນໃສ່ຕຳແໜ່ງສຸດທ້າຍ"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ຍ້າຍແຜ່ນ"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"ເບິ່ງແອັບຫຼ້າສຸດ"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ສະຫຼັບແອັບ"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"ແລ້ວໆ"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"ກະລຸນາລອງໃໝ່!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ກັບຄືນ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"ປັດຊ້າຍ ຫຼື ຂວາໂດຍໃຊ້ມືສາມນິ້ວຢູ່ແຜ່ນສໍາຜັດຂອງທ່ານ"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"ເພື່ອເບິ່ງແອັບຫຼ້າສຸດ, ໃຫ້ໃຊ້ 3 ນິ້ວປັດຂຶ້ນ ແລ້ວຄ້າງໄວ້ເທິງແຜ່ນສໍາຜັດ"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"ເພື່ອເບິ່ງແອັບທັງໝົດຂອງທ່ານ, ໃຫ້ກົດປຸ່ມຄຳສັ່ງຢູ່ແປ້ນພິມຂອງທ່ານ"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"ປົກປິດໄວ້ແລ້ວ"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"ປົດລັອກເພື່ອເບິ່ງ"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"ການສຶກສາຕາມບໍລິບົດ"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"ໃຊ້ແຜ່ນສໍາຜັດຂອງທ່ານເພື່ອກັບຄືນ"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"ໃຊ້ 3 ນິ້ວປັດຊ້າຍ ຫຼື ຂວາ. ແຕະເພື່ອສຶກສາທ່າທາງເພີ່ມເຕີມ."</string>
diff --git a/packages/SystemUI/res/values-lo/tiles_states_strings.xml b/packages/SystemUI/res/values-lo/tiles_states_strings.xml
index 71e084a21b7c..294d6af2b863 100644
--- a/packages/SystemUI/res/values-lo/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-lo/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"ປິດ"</item>
<item msgid="5908720590832378783">"ເປີດ"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"ບໍ່ພ້ອມໃຫ້ນຳໃຊ້"</item>
+ <item msgid="6641673879029894995">"ປິດ"</item>
+ <item msgid="5806682401126108403">"ເປີດ"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 25208b0ca6e2..59f0ad34295d 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"„Bluetooth“ prijungtas."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"„Bluetooth“ įrenginio piktograma"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Spustelėkite, jei norite konfigūruoti išsamią įrenginio informaciją"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Spustelėkite, kad peržiūrėtumėte visus įrenginius"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Spustelėkite, kad susietumėte naują įrenginį"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"„<xliff:g id="DEVICE_NAME">%s</xliff:g>“. Konfigūruoti išsamią įrenginio informaciją"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Žr. visus įrenginius"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Susieti naują įrenginį"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Akumuliatoriaus energija procentais nežinoma."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Prisijungta prie „<xliff:g id="BLUETOOTH">%s</xliff:g>“."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Prisijungta prie <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Įvestis"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Klausos aparatai"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Įjungiama…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Negalima koreguoti ryškumo, nes jį valdo\n viršuje esanti programa"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Negalima koreguoti ryškumo, nes jį valdo viršuje esanti programa"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatinis pasukimas"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatiškai sukti ekraną"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Vietovė"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"Programa „<xliff:g id="APP_NAME">%1$s</xliff:g>“ nepalaiko pokalbių funkcijų"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Atsiliepimai"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Uždaryti"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Nerodyti kaip prisegtą"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Rodomos tiesioginės naujienos"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Prisegti pranešimai rodo tiesioginę informaciją iš programų ir visada rodomi būsenos juostoje bei užrakinimo ekrane"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Šių pranešimų keisti negalima."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Skambučių pranešimų keisti negalima."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Šios grupės pranešimai čia nekonfigūruojami"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Kelių užduočių atlikimas"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Naudokite išskaidyto ekrano režimą su programa dešinėje"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Naudokite išskaidyto ekrano režimą su programa kairėje"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Perjunkite į viso ekrano režimą"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Naudoti viso ekrano režimą"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Naudoti rodinio versiją staliniams kompiuteriams"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Perjunkite į programą dešinėje arba apačioje išskaidyto ekrano režimu"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Perjunkite į programą kairėje arba viršuje išskaidyto ekrano režimu"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Išskaidyto ekrano režimu: pakeisti iš vienos programos į kitą"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Rodyti mažo prioriteto pranešimų piktogramas"</string>
<string name="other" msgid="429768510980739978">"Kita"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"pašalintumėte išklotinės elementą"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"pridėti išklotinės elementą paskutinėje pozicijoje"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Perkelti išklotinės elementą"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Peržiūrėti naujausias programas"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Perjungti programas"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Atlikta"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Kitas"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Bandykite dar kartą!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Grįžti"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Braukite kairėn arba dešinėn trimis pirštais bet kur jutiklinėje dalyje"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Peržiūrėkite naujausias programas, jutiklinėje dalyje perbraukę aukštyn trimis pirštais ir palaikę"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Jei norite peržiūrėti visas programas, paspauskite klaviatūros veiksmų klavišą"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Paslėpta"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Atrakinkite, kad peržiūrėtumėte"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstinis švietimas"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Naudokite klaviatūrą, kad grįžtumėte atgal"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Perbraukite į kairę ar dešinę trimis pirštais. Palieskite, kad sužinotumėte daugiau gestų."</string>
diff --git a/packages/SystemUI/res/values-lt/tiles_states_strings.xml b/packages/SystemUI/res/values-lt/tiles_states_strings.xml
index 893d6aef3069..46c6f6904875 100644
--- a/packages/SystemUI/res/values-lt/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-lt/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Išjungta"</item>
<item msgid="5908720590832378783">"Įjungta"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Nepasiekiama"</item>
+ <item msgid="6641673879029894995">"Išjungta"</item>
+ <item msgid="5806682401126108403">"Įjungta"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index bf1ef9692c71..9962226de520 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth savienojums ir izveidots."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth ierīces ikona"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Lai konfigurētu ierīces informāciju, noklikšķiniet"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Noklikšķiniet, lai skatītu visas ierīces"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Noklikšķiniet, lai savienotu pārī jaunu ierīci"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Ievade"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Dzirdes aparāti"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Notiek ieslēgšana…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nevar mainīt spilgtumu, jo to kontrolē\n aktīvā lietotne."</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nevar mainīt spilgtumu, jo to kontrolē aktīvā lietotne."</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automātiska pagriešana"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automātiska ekrāna pagriešana"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Atrašanās vieta"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"Lietotnē <xliff:g id="APP_NAME">%1$s</xliff:g> netiek atbalstītas sarunu funkcijas."</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Atsauksmes"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Nerādīt"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Nerādīt kā piespraustu"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Reāllaika jaunumu rādīšana"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Piespraustajos paziņojumos tiek rādīta reāllaika informācija no lietotnēm, un tie vienmēr tiek rādīti statusa joslā un bloķēšanas ekrānā."</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Šos paziņojumus nevar modificēt."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Paziņojumus par zvaniem nevar modificēt."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Šeit nevar konfigurēt šo paziņojumu grupu."</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Vairākuzdevumu režīms"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Izmantot ekrāna sadalīšanu ar lietotni labajā pusē"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Izmantot ekrāna sadalīšanu ar lietotni kreisajā pusē"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Pārslēgšana pilnekrāna režīmā"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Pāriet uz lietotni pa labi/lejā, kamēr izmantojat sadalīto ekrānu."</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Pāriet uz lietotni pa kreisi/augšā, kamēr izmantojat sadalīto ekrānu."</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Ekrāna sadalīšanas režīmā: pārvietot lietotni no viena ekrāna uz otru"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Rādīt zemas prioritātes paziņojumu ikonas"</string>
<string name="other" msgid="429768510980739978">"Citi"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"noņemt elementu"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"pievienotu elementu pēdējā pozīcijā"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Pārvietot elementu"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Skatīt nesen izmantotās lietotnes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Pārslēgties starp lietotnēm"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Gatavs"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Mēģiniet vēlreiz."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Atpakaļ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Skārienpaliktnī ar trīs pirkstiem velciet pa kreisi vai pa labi."</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Lai skatītu nesenās lietotnes, ar trīs pirkstiem uz skārienpaliktņa velciet augšup un turiet."</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Lai skatītu visas savas lietotnes, tastatūrā nospiediet darbību taustiņu."</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Rediģēts"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Lai skatītu, atbloķējiet"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstuāla pamācība"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Atgriešanās, izmantojot skārienpaliktni"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Ar trīs pirkstiem velciet pa kreisi vai pa labi. Lai apgūtu citus žestus, pieskarieties šeit."</string>
diff --git a/packages/SystemUI/res/values-lv/tiles_states_strings.xml b/packages/SystemUI/res/values-lv/tiles_states_strings.xml
index 732975135494..8e9268a97f6e 100644
--- a/packages/SystemUI/res/values-lv/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-lv/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Izslēgts"</item>
<item msgid="5908720590832378783">"Ieslēgts"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Nav pieejams"</item>
+ <item msgid="6641673879029894995">"Izslēgts"</item>
+ <item msgid="5806682401126108403">"Ieslēgts"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index e34d9d88cc82..9d9c0743a67f 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth е поврзан."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Икона за уред со Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Кликнете за да ги конфигурирате деталите за уредот"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Кликнете за да се прикажат сите уреди"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Кликнете за да спарите нов уред"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Влез"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слушни помагала"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Се вклучува…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Не може да се приспособи осветленоста бидејќи е\n контролирана од горната апликација"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Не може да се приспособи осветленоста бидејќи е контролирана од горната апликација"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автоматско ротирање"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоматско ротирање на екранот"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Локација"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> не поддржува функции за разговор"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Повратни информации"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Отфрли"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Не прикажувај како закачено"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Прикажува новости во живо"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Закачените известувања прикажуваат информации во живо од апликациите и секогаш се појавуваат на статусната лента и на заклучениот екран"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Овие известувања не може да се изменат"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Известувањата за повици не може да се изменат."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Оваа група известувања не може да се конфигурира тука"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Мултитаскинг"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Користете поделен екран со апликацијата оддесно"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Користете поделен екран со апликацијата одлево"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Префрлете се на цел екран"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Префрлете се на апликацијата десно или долу при користењето поделен екран"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Префрлете се на апликацијата лево или горе при користењето поделен екран"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"При поделен екран: префрлете ги аплик. од едната на другата страна"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Прикажувај икони за известувања со низок приоритет"</string>
<string name="other" msgid="429768510980739978">"Друго"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"отстранување на плочката"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"додајте плочка на последната позиција"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Преместување на плочката"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Прикажи ги неодамнешните апликации"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Сменете ги апликациите"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Готово"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Обидете се повторно!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Назад"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Повлечете налево или надесно со три прста на допирната подлога"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"За да ги видите скорешните апликации, повлечете нагоре и задржете со три прста на допирната подлога"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Притиснете го копчето за дејство на тастатурата за да ги видите сите апликации"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Редактирано"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Отклучете за приказ"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Контекстуално образование"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Користете ја допирната подлога за да се вратите назад"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Повлечете налево или надесно со три прста. Допрете за да научите повеќе движења."</string>
diff --git a/packages/SystemUI/res/values-mk/tiles_states_strings.xml b/packages/SystemUI/res/values-mk/tiles_states_strings.xml
index 67baf7c305ce..752c386113ed 100644
--- a/packages/SystemUI/res/values-mk/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-mk/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Исклучено"</item>
<item msgid="5908720590832378783">"Вклучено"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Недостапно"</item>
+ <item msgid="6641673879029894995">"Исклучено"</item>
+ <item msgid="5806682401126108403">"Вклучено"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index 226822a606bf..301c3da380d8 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ബ്ലൂടൂത്ത് കണക്‌റ്റുചെയ്തു."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth ഉപകരണ ഐക്കൺ"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ഉപകരണത്തിന്റെ വിശദാംശങ്ങൾ കോൺഫിഗർ ചെയ്യാൻ ക്ലിക്ക് ചെയ്യുക"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"എല്ലാ ഉപകരണങ്ങളും കാണാൻ ക്ലിക്ക് ചെയ്യുക"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"പുതിയ ഉപകരണം ജോടിയാക്കാൻ ക്ലിക്ക് ചെയ്യുക"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ഇൻപുട്ട്"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ശ്രവണ സഹായികൾ"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ഓണാക്കുന്നു…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"തെളിച്ചം അഡ്‌ജസ്റ്റ് ചെയ്യാനാകില്ല, അത്\n നിയന്ത്രിക്കുന്നത് ഏറ്റവും മുകളിലുള്ള ആപ്പാണ്"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"തെളിച്ചം അഡ്‌ജസ്റ്റ് ചെയ്യാനാകില്ല, അത് നിയന്ത്രിക്കുന്നത് ഏറ്റവും മുകളിലുള്ള ആപ്പാണ്"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"സ്‌ക്രീൻ സ്വയമേവ തിരിയൽ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"സ്‌ക്രീൻ സ്വയമേവ തിരിക്കുക"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ലൊക്കേഷൻ"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"സംഭാഷണ ഫീച്ചറുകളെ <xliff:g id="APP_NAME">%1$s</xliff:g> പിന്തുണയ്‌ക്കുന്നില്ല"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ഫീഡ്ബാക്ക്"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ഡിസ്‌മിസ് ചെയ്യുക"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"പിൻ ചെയ്തതായി കാണിക്കരുത്"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"തത്സമയ അപ്‌ഡേറ്റുകൾ കാണിക്കുന്നു"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"പിൻ ചെയ്ത അറിയിപ്പുകൾ, ആപ്പുകളിൽ നിന്നുള്ള തത്സമയ വിവരങ്ങൾ പ്രദർശിപ്പിക്കും, അവ എപ്പോഴും സ്റ്റാറ്റസ് ബാറിലും ലോക്ക് സ്‌ക്രീനിലും ദൃശ്യമാകും"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ഈ അറിയിപ്പുകൾ പരിഷ്ക്കരിക്കാനാവില്ല."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"കോൾ അറിയിപ്പുകൾ പരിഷ്‌കരിക്കാനാകുന്നില്ല."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"അറിയിപ്പുകളുടെ ഈ ഗ്രൂപ്പ് ഇവിടെ കോണ്‍ഫിഗര്‍ ചെയ്യാൻ കഴിയില്ല"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"മൾട്ടിടാസ്‌കിംഗ്"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"വലതുവശത്തുള്ള ആപ്പിനൊപ്പം സ്‌ക്രീൻ വിഭജന മോഡ് ഉപയോഗിക്കുക"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ഇടതുവശത്തുള്ള ആപ്പിനൊപ്പം സ്‌ക്രീൻ വിഭജന മോഡ് ഉപയോഗിക്കുക"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"പൂർണ്ണ സ്‌ക്രീനിലേക്ക് മാറുക"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"സ്ക്രീൻ വിഭജന മോഡ് ഉപയോഗിക്കുമ്പോൾ വലതുവശത്തെ/താഴത്തെ ആപ്പിലേക്ക് മാറുക"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"സ്ക്രീൻ വിഭജന മോഡ് ഉപയോഗിക്കുമ്പോൾ ഇടതുവശത്തെ/മുകളിലെ ആപ്പിലേക്ക് മാറൂ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"സ്‌ക്രീൻ വിഭജന മോഡിൽ: ഒരു ആപ്പിൽ നിന്ന് മറ്റൊന്നിലേക്ക് മാറുക"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"പ്രാധാന്യം കുറഞ്ഞ അറിയിപ്പ് ചിഹ്‌നങ്ങൾ"</string>
<string name="other" msgid="429768510980739978">"മറ്റുള്ളവ"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ടൈൽ നീക്കം ചെയ്യുക"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"അവസാന ഭാഗത്ത് ടൈൽ ചേർക്കുക"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ടൈൽ നീക്കുക"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"അടുത്തിടെയുള്ള ആപ്പുകൾ കാണുക"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ആപ്പുകൾ മാറുക"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"പൂർത്തിയായി"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"വീണ്ടും ശ്രമിക്കുക!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"മടങ്ങുക"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"ടച്ച്‌പാഡിൽ മൂന്ന് വിരലുകൾ കൊണ്ട് ഇടത്തേക്കോ വലത്തേക്കോ സ്വൈപ്പ് ചെയ്യുക"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"അടുത്തിടെ ഉപയോഗിച്ച ആപ്പുകൾ കാണാൻ, മൂന്ന് വിരലുകൾ ഉപയോഗിച്ച് ടച്ച്‌പാഡിൽ സ്വൈപ്പ് ചെയ്ത് പിടിക്കുക"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"എല്ലാ ആപ്പുകളും കാണാൻ, നിങ്ങളുടെ കീബോർഡിലെ ആക്‌ഷൻ കീ അമർത്തുക"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"മറച്ചത്"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"കാണാൻ, അൺലോക്ക് ചെയ്യുക"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"സന്ദർഭോചിത വിദ്യാഭ്യാസം"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"തിരികെ പോകാൻ നിങ്ങളുടെ ടച്ച്‌പാഡ് ഉപയോഗിക്കുക"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"മൂന്ന് വിരലുകൾ കൊണ്ട് ഇടത്തേക്കോ വലത്തേക്കോ സ്വൈപ്പ് ചെയ്യൂ. കൂടുതൽ ജെസ്ച്ചറുകളറിയാൻ ടാപ്പ് ചെയ്യൂ."</string>
diff --git a/packages/SystemUI/res/values-ml/tiles_states_strings.xml b/packages/SystemUI/res/values-ml/tiles_states_strings.xml
index 8639c1030cbe..e197c928e98a 100644
--- a/packages/SystemUI/res/values-ml/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ml/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"ഓഫാണ്"</item>
<item msgid="5908720590832378783">"ഓണാണ്"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"ലഭ്യമല്ല"</item>
+ <item msgid="6641673879029894995">"ഓഫാണ്"</item>
+ <item msgid="5806682401126108403">"ഓണാണ്"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 06b62e9ae8eb..7c2e69c17df1 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth холбогдсон."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth төхөөрөмжийн дүрс тэмдэг"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Төхөөрөмжийн дэлгэрэнгүйг тохируулахын тулд товшино уу"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Бүх төхөөрөмжийг харахын тулд товшино уу"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Шинэ төхөөрөмж хослуулахын тулд товшино уу"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Оролт"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Сонсголын төхөөрөмж"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Асааж байна…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Гэрэлтүүлгийг\nдавуу эрхтэй аппаас хянаж байгаа тул тохируулах боломжгүй"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Гэрэлтүүлгийгдавуу эрхтэй аппаас хянаж байгаа тул тохируулах боломжгүй"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автоматаар эргэх"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Дэлгэцийг автоматаар эргүүлэх"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Байршил"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> нь харилцан ярианы онцлогуудыг дэмждэггүй"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Санал хүсэлт"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Хаах"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Бэхэлсэн байдлаар бүү харуул"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Шууд шинэчлэлтийг харуулж байна"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Бэхэлсэн мэдэгдэл нь аппуудын шууд мэдээллийг харуулдаг бөгөөд статусын мөр, түгжээтэй дэлгэц дээр үргэлж харагдана"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Эдгээр мэдэгдлийг өөрчлөх боломжгүй."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Дуудлагын мэдэгдлийг өөрчлөх боломжгүй."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Энэ бүлэг мэдэгдлийг энд тохируулах боломжгүй байна"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Олон ажил зэрэг хийх"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Аппыг баруун талд байгаагаар дэлгэцийг хуваахыг ашиглах"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Аппыг зүүн талд байгаагаар дэлгэцийг хуваахыг ашиглах"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Бүтэн дэлгэц рүү сэлгэх"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Дэлгэц хуваахыг ашиглаж байхдаа баруун талд эсвэл доор байх апп руу сэлгэ"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Дэлгэц хуваахыг ашиглаж байхдаа зүүн талд эсвэл дээр байх апп руу сэлгэ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Дэлгэц хуваах үеэр: аппыг нэгээс нөгөөгөөр солих"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Бага ач холбогдолтой мэдэгдлийн дүрс тэмдгийг харуулах"</string>
<string name="other" msgid="429768510980739978">"Бусад"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"хавтанг хасна уу"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"хавтанг сүүлийн байрлалд нэмэх"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Хавтанг зөөх"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Саяхны аппуудыг харах"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Апп сэлгэх"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Болсон"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Дахин оролдоно уу!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Буцах"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Мэдрэгч самбар дээрээ гурван хуруугаа ашиглан зүүн эсвэл баруун тийш шударна уу"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Саяхны аппуудыг харахын тулд мэдрэгч самбар дээр гурван хуруугаараа дээш шудраад, удаан дарна уу"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Бүх аппаа харахын тулд гар дээр тань байх тусгай товчлуурыг дарна уу"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Хассан"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Харахын тулд түгжээг тайлна уу"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Хам сэдэвт боловсрол"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Буцахын тулд мэдрэгч самбараа ашиглах"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Гурван хуруугаараа зүүн эсвэл баруун тийш шударна уу. Илүү олон зангаа сурахын тулд товшино уу."</string>
diff --git a/packages/SystemUI/res/values-mn/tiles_states_strings.xml b/packages/SystemUI/res/values-mn/tiles_states_strings.xml
index 678033cf4a07..7ca88e97777b 100644
--- a/packages/SystemUI/res/values-mn/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-mn/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Унтраалттай"</item>
<item msgid="5908720590832378783">"Асаалттай"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Боломжгүй"</item>
+ <item msgid="6641673879029894995">"Унтраалттай"</item>
+ <item msgid="5806682401126108403">"Асаалттай"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 4c2fd29355ce..68891791ac3f 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ब्लूटूथ कनेक्‍ट केले."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ब्लूटूथ डिव्‍हाइस आयकन"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"डिव्हाइसचे तपशील कॉन्फिगर करण्यासाठी क्लिक करा"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"सर्व डिव्हाइस पाहण्यासाठी क्लिक करा"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"नवीन डिव्हाइस पेअर करण्यासाठी क्लिक करा"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. डिव्हाइसचे तपशील कॉन्फिगर करा"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"सर्व डिव्हाइस पहा"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"नवीन डिव्हाइस पेअर करा"</string>
<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>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"इनपुट"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"श्रवणयंत्रे"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"सुरू करत आहे…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ब्राइटनेस ॲडजस्ट करू शकत नाही, कारण तो\n टॉप ॲपद्वारे नियंत्रित केला जात आहे"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ब्राइटनेस ॲडजस्ट करू शकत नाही, कारण तो टॉप ॲपद्वारे नियंत्रित केला जात आहे"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ऑटो-रोटेट"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ऑटो-रोटेट स्क्रीन"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"स्थान"</string>
@@ -417,7 +418,7 @@
<string name="hearing_devices_presets_error" msgid="350363093458408536">"प्रीसेट अपडेट करता आले नाही"</string>
<string name="hearing_devices_preset_label" msgid="7878267405046232358">"प्रीसेट"</string>
<string name="hearing_devices_spinner_item_selected" msgid="3137083889662762383">"निवडला आहे"</string>
- <string name="hearing_devices_ambient_label" msgid="629440938614895797">"जवळपासचे आवाज"</string>
+ <string name="hearing_devices_ambient_label" msgid="629440938614895797">"जवळपासचे"</string>
<string name="hearing_devices_ambient_control_left" msgid="3586965448230412600">"डावे"</string>
<string name="hearing_devices_ambient_control_right" msgid="6192137602448918383">"उजवे"</string>
<string name="hearing_devices_ambient_expand_controls" msgid="2131816068187709200">"डाव्या आणि उजव्या स्वतंत्र नियंत्रणांचा विस्तार करा"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> हे संभाषण वैशिष्ट्यांना सपोर्ट करत नाही"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"फीडबॅक"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"डिसमिस करा"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"पिन केलेले म्हणून दाखवू नका"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"लाइव्ह अपडेट दाखवत आहे"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"पिन केलेली नोटिफिकेशन अ‍ॅप्समधील लाइव्ह माहिती दाखवतात आणि नेहमी स्टेटस बार व लॉक स्‍क्रीनवर दिसतात"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"या सूचनांमध्ये सुधारणा केली जाऊ शकत नाही."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"कॉलशी संबंधित सूचनांमध्ये फेरबदल केला जाऊ शकत नाही."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"या सूचनांचा संच येथे कॉन्फिगर केला जाऊ शकत नाही"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"मल्टिटास्किंग"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ॲप उजवीकडे ठेवून स्प्लिट स्क्रीन वापरा"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ॲप डावीकडे ठेवून स्प्लिट स्क्रीन वापरा"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"फुल स्क्रीनवर स्विच करणे"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"फुल स्क्रीन वापरा"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"डेस्कटॉप दृश्य पहा"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"स्प्लिट स्क्रीन वापरताना उजवीकडील किंवा खालील अ‍ॅपवर स्विच करा"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"स्प्लिट स्क्रीन वापरताना डावीकडील किंवा वरील अ‍ॅपवर स्विच करा"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"स्प्लिट स्क्रीनदरम्यान: एक अ‍ॅप दुसऱ्या अ‍ॅपने बदला"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"कमी प्राधान्य सूचना आयकन दर्शवा"</string>
<string name="other" msgid="429768510980739978">"अन्य"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"टाइल काढून टाका"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"टाइल शेवटच्या स्थानावर जोडा"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"टाइल हलवा"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"अलीकडील अ‍ॅप्स पहा"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"अ‍ॅप्स स्विच करा"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"पूर्ण झाले"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"पुढील"</string>
<string name="gesture_error_title" msgid="469064941635578511">"पुन्हा प्रयत्न करा!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"मागे जा"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"तुमच्या टचपॅडवर तीन बोटांनी डावीकडे किंवा उजवीकडे स्‍वाइप करा"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"अलीकडील ॲप्स पाहण्यासाठी, टचपॅडवर तीन बोटांनी वरती स्वाइप करा आणि धरून ठेवा"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"तुमची सर्व ॲप्स पाहण्यासाठी, तुमच्या कीबोर्डवरील अ‍ॅक्शन की प्रेस करा"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"रिडॅक्ट केलेले"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"पाहण्यासाठी अनलॉक करा"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"संदर्भीय शिक्षण"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"मागे जाण्यासाठी तुमचा टचपॅड वापरा"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"तीन बोटांनी डावीकडे किंवा उजवीकडे स्वाइप करा. आणखी जेश्चर जाणून घेण्यासाठी टॅप करा."</string>
diff --git a/packages/SystemUI/res/values-mr/tiles_states_strings.xml b/packages/SystemUI/res/values-mr/tiles_states_strings.xml
index ec876598a95d..58c4d06e39dd 100644
--- a/packages/SystemUI/res/values-mr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-mr/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"बंद आहे"</item>
<item msgid="5908720590832378783">"सुरू आहे"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"उपलब्ध नाही"</item>
+ <item msgid="6641673879029894995">"बंद आहे"</item>
+ <item msgid="5806682401126108403">"सुरू आहे"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 93f25ffc012e..b7e3153027ff 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth disambungkan."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikon peranti Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klik untuk mengkonfigurasi butiran peranti"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Klik untuk melihat semua peranti"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Klik untuk menggandingkan peranti baharu"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Peratusan kuasa bateri tidak diketahui."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Disambungkan kepada <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Disambungkan ke <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Alat bantu pendengaran"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Menghidupkan…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Tidak dapat melaraskan kecerahan kerana peranti\n dikawal oleh apl popular"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Tidak dapat melaraskan kecerahan kerana peranti dikawal oleh apl popular"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autoputar"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Autoputar skrin"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokasi"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> tidak menyokong ciri perbualan"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Maklum balas"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Ketepikan"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Jangan papar sebagai disemat"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Menunjukkan Kemaskinian Langsung"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Pemberitahuan yang disematkan memaparkan maklumat langsung daripada apl dan sentiasa dipaparkan pada bar status dan skrin kunci"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Pemberitahuan ini tidak boleh diubah suai."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Pemberitahuan panggilan tidak boleh diubah suai."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Kumpulan pemberitahuan ini tidak boleh dikonfigurasikan di sini"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Berbilang tugas"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Gunakan skrin pisah dengan apl pada sebelah kanan"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Gunakan skrin pisah dengan apl pada sebelah kiri"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Beralih kepada skrin penuh"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Tukar kepada apl di sebelah kanan/bawah semasa menggunakan skrin pisah"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Tukar kepada apl di sebelah kiri/atas semasa menggunakan skrin pisah"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Semasa skrin pisah: gantikan apl daripada satu apl kepada apl lain"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Tunjukkan ikon pemberitahuan keutamaan rendah"</string>
<string name="other" msgid="429768510980739978">"Lain-lain"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"alih keluar jubin"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"tambahkan jubin pada kedudukan terakhir"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Alihkan jubin"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Lihat apl terbaharu"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Tukar apl"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Selesai"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Cuba lagi!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Kembali"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Leret ke kiri atau ke kanan menggunakan tiga jari pada pad sentuh"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Untuk melihat apl terbaharu, leret ke atas dan tahan dengan tiga jari pada pad sentuh"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Untuk melihat semua apl, tekan kekunci tindakan pada papan kekunci"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Disunting"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Buka kunci untuk melihat"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Pendidikan kontekstual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Gunakan pad sentuh anda untuk kembali"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Leret ke kiri atau ke kanan dengan tiga jari. Ketik dan ketahui lebih lanjut tentang gerak isyarat."</string>
diff --git a/packages/SystemUI/res/values-ms/tiles_states_strings.xml b/packages/SystemUI/res/values-ms/tiles_states_strings.xml
index 6dc9827997f7..5a55b76feb5a 100644
--- a/packages/SystemUI/res/values-ms/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ms/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Mati"</item>
<item msgid="5908720590832378783">"Hidup"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Tidak tersedia"</item>
+ <item msgid="6641673879029894995">"Mati"</item>
+ <item msgid="5806682401126108403">"Hidup"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index bed07ef4cf49..72f0369de1fd 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ဘလူးတုသ်ချိတ်ဆက်ထားမှု"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ဘလူးတုသ်သုံးစက် သင်္ကေတ"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"စက်အသေးစိတ်ကို စီစဉ်သတ်မှတ်ရန် နှိပ်ပါ"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"စက်အားလုံးကြည့်ရန် နှိပ်ပါ"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"စက်အသစ် တွဲချိတ်ရန် နှိပ်ပါ"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"အဝင်"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"နားကြားကိရိယာ"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ဖွင့်နေသည်…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"၎င်းကို ထိပ်ဆုံးရှိအက်ပ်က\n ထိန်းချုပ်နေသဖြင့် တောက်ပမှုကို ပြင်ဆင်၍မရပါ"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"၎င်းကို ထိပ်ဆုံးရှိအက်ပ်က ထိန်းချုပ်နေသဖြင့် တောက်ပမှုကို ပြင်ဆင်၍မရပါ"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"အော်တို-လည်"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"မျက်နှာပြင်အား အလိုအလျောက်လှည့်ခြင်း"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"တည်နေရာ"</string>
@@ -530,7 +534,7 @@
<string name="accessibility_action_label_remove_widget" msgid="3373779447448758070">"ဝိဂျက် ဖယ်ရှားရန်"</string>
<string name="accessibility_action_label_place_widget" msgid="1914197458644168978">"ရွေးချယ်ထားသော ဝိဂျက်ကို တင်ရန်"</string>
<string name="communal_widget_picker_title" msgid="1953369090475731663">"လော့ခ်မျက်နှာပြင် ဝိဂျက်များ"</string>
- <string name="communal_widget_picker_description" msgid="490515450110487871">"တက်ဘလက်လော့ခ်ချထားသော်လည်း မည်သူမဆို လော့ခ်မျက်နှာပြင်ဝိဂျက်ကို ကြည့်နိုင်သည်။"</string>
+ <string name="communal_widget_picker_description" msgid="490515450110487871">"တက်ဘလက်လော့ခ်ချထားစဉ် မည်သူမဆို လော့ခ်မျက်နှာပြင်ရှိ ဝိဂျက်များကို မြင်နိုင်သည်။"</string>
<string name="accessibility_action_label_unselect_widget" msgid="1041811747619468698">"ဝိဂျက် ပြန်ဖြုတ်ရန်"</string>
<string name="accessibility_action_label_shrink_widget" msgid="8259511040536438771">"အမြင့်ကို လျှော့ရန်"</string>
<string name="accessibility_action_label_expand_widget" msgid="9190524260912211759">"အမြင့်ကို တိုးရန်"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> က စကားဝိုင်းဝန်ဆောင်မှုများကို မပံ့ပိုးပါ"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"အကြံပြုချက်"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ပယ်ရန်"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"ပင်ထိုးထားသည့်အတိုင်း မပြရ"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"တိုက်ရိုက် အပ်ဒိတ်များ ပြနေသည်"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"ပင်ထိုးထားသော အကြောင်းကြားချက်များသည် အက်ပ်များမှ တိုက်ရိုက်အချက်အလက်များကိုပြပြီး ၎င်းတို့ကို အခြေအနေပြဘားနှင့် လော့ခ်မျက်နှာပြင်တို့တွင် အမြဲမြင်ရသည်"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ဤအကြောင်းကြားချက်များကို ပြုပြင်၍ မရပါ။"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"ခေါ်ဆိုမှုအကြောင်းကြားချက်များကို ပြင်၍မရပါ။"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"ဤအကြောင်းကြားချက်အုပ်စုကို ဤနေရာတွင် စီစဉ်သတ်မှတ်၍ မရပါ"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"တစ်ပြိုင်နက် များစွာလုပ်ခြင်း"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"အက်ပ်ကို ညာ၌ထားကာ မျက်နှာပြင် ခွဲ၍ပြသခြင်း သုံးရန်"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"အက်ပ်ကို ဘယ်၌ထားကာ မျက်နှာပြင် ခွဲ၍ပြသခြင်း သုံးရန်"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"ဖန်သားပြင်အပြည့် ပြောင်းရန်"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"မျက်နှာပြင်ခွဲ၍ပြသခြင်း သုံးစဉ် ညာ (သို့) အောက်ရှိအက်ပ်သို့ ပြောင်းရန်"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"မျက်နှာပြင် ခွဲ၍ပြသခြင်းသုံးစဉ် ဘယ် (သို့) အထက်ရှိအက်ပ်သို့ ပြောင်းရန်"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"မျက်နှာပြင် ခွဲ၍ပြသစဉ်- အက်ပ်တစ်ခုကို နောက်တစ်ခုနှင့် အစားထိုးရန်"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"အရေးမကြီးသော အကြောင်းကြားချက် သင်္ကေတများ ပြရန်"</string>
<string name="other" msgid="429768510980739978">"အခြား"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"အကွက်ငယ်ကို ဖယ်ရှားရန်"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"နောက်ဆုံးနေရာတွင် အကွက်ငယ် ထည့်ရန်"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"အကွက်ငယ်ကို ရွှေ့ရန်"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"မကြာသေးမီကအက်ပ်များကို ကြည့်ရန်"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"အက်ပ်များကူးပြောင်းခြင်း"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"ပြီးပြီ"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"ထပ်စမ်းကြည့်ပါ။"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ပြန်သွားရန်"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"သင့်တာ့ချ်ပက်တွင် လက်သုံးချောင်းဖြင့် ဘယ် (သို့) ညာသို့ ပွတ်ဆွဲပါ"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"လတ်တလောအက်ပ်များကို ကြည့်ရန် တာ့ချ်ပက်ပေါ်တွင် လက်သုံးချောင်းဖြင့် အပေါ်သို့ပွတ်ဆွဲပြီး ဖိထားပါ"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"သင့်အက်ပ်အားလုံးကြည့်ရန် ကီးဘုတ်ပေါ်ရှိ လုပ်ဆောင်ချက်ကီးကို နှိပ်ပါ"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"အစားထိုးထားသည်"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"ကြည့်ရန် ဖွင့်ပါ"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"အကြောင်းအရာအလိုက် ပညာရေး"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"နောက်ပြန်သွားရန် သင့်တာ့ချ်ပက်ကို သုံးပါ"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"လက်သုံးချောင်းဖြင့် ဘယ် (သို့) ညာသို့ ပွတ်ဆွဲပါ။ လက်ဟန်များ ပိုမိုလေ့လာရန် တို့ပါ။"</string>
diff --git a/packages/SystemUI/res/values-my/tiles_states_strings.xml b/packages/SystemUI/res/values-my/tiles_states_strings.xml
index 424b4b9ef33e..778920506f03 100644
--- a/packages/SystemUI/res/values-my/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-my/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"ပိတ်"</item>
<item msgid="5908720590832378783">"ဖွင့်"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"မရနိုင်ပါ"</item>
+ <item msgid="6641673879029894995">"ပိတ်"</item>
+ <item msgid="5806682401126108403">"ဖွင့်"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 7e87efc4f0dc..72d79569353b 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth er tilkoblet."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikon for Bluetooth-enheter"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klikk for å konfigurere enhetsdetaljer"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Klikk for å se alle enhetene"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Klikk for å koble sammen en ny enhet"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Innenhet"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Høreapparater"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Slår på …"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Kan ikke justere lysstyrken, fordi den\n kontrolleres av appen på toppen"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Kan ikke justere lysstyrken, fordi den kontrolleres av appen på toppen"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotér automatisk"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotér skjermen automatisk"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Sted"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> støtter ikke samtalefunksjoner"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Tilbakemelding"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Lukk"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Ikke vis som festet"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Viser direkteoppdateringer"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Festede varsler viser sanntidsinformasjon fra apper og vises alltid i statusfeltet og på låseskjermen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Disse varslene kan ikke endres."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Anropsvarsler kan ikke endres."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Denne varselgruppen kan ikke konfigureres her"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Bruk delt skjerm med appen til høyre"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Bruk delt skjerm med appen til venstre"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Bytt til fullskjerm"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Bytt til appen til høyre eller under mens du bruker delt skjerm"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Bytt til appen til venstre eller over mens du bruker delt skjerm"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"I delt skjerm: Bytt ut en app"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Vis ikoner for varsler med lav prioritet"</string>
<string name="other" msgid="429768510980739978">"Annet"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"fjerne infobrikken"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"legge til en brikke på den siste posisjonen"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Flytt infobrikken"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Se nylige apper"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Bytt app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Ferdig"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Prøv på nytt."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Gå tilbake"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Sveip til venstre eller høyre med tre fingre på styreflaten"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"For å se nylige apper, sveip opp og hold med tre fingre på styreflaten"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"For å se alle appene dine, trykk på handlingstasten på tastaturet"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Fjernet"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Lås opp for å se"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstuell opplæring"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Bruk styreflaten for å gå tilbake"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Sveip til venstre eller høyre med tre fingre. Trykk for å lære flere bevegelser."</string>
diff --git a/packages/SystemUI/res/values-nb/tiles_states_strings.xml b/packages/SystemUI/res/values-nb/tiles_states_strings.xml
index bbeafd86ecc0..25b22052ea8d 100644
--- a/packages/SystemUI/res/values-nb/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-nb/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Av"</item>
<item msgid="5908720590832378783">"På"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Utilgjengelig"</item>
+ <item msgid="6641673879029894995">"Av"</item>
+ <item msgid="5806682401126108403">"På"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index cc07b7fa1001..8e0ee778113d 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ब्लुटुथ जडान भयो।"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ब्लुटुथ डिभाइस जनाउने आइकन"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"डिभाइसको विवरण कन्फिगर गर्न क्लिक गर्नुहोस्"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"सबै डिभाइसहरू हेर्न क्लिक गर्नुहोस्"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"नयाँ डिभाइसमा कनेक्ट गर्न क्लिक गर्नुहोस्"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"इनपुट"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"हियरिङ डिभाइसहरू"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"सक्रिय गर्दै…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"टप एपले चमक नियन्त्रण गरिरहेकाले\n चमक मिलाउन मिल्दैन"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"टप एपले चमक नियन्त्रण गरिरहेकाले चमक मिलाउन मिल्दैन"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"अटो रोटेट"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"स्क्रिन स्वतःघुम्ने"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"लोकेसन"</string>
@@ -424,7 +428,7 @@
<string name="hearing_devices_ambient_collapse_controls" msgid="2261097656446201581">"कोल्याप्स गरी एउटै कन्ट्रोल बनाउनुहोस्"</string>
<string name="hearing_devices_ambient_mute" msgid="1836882837647429416">"वरपरका आवाज म्युट गर्नुहोस्"</string>
<string name="hearing_devices_ambient_unmute" msgid="2187938085943876814">"वरपरका आवाज अनम्युट गर्नुहोस्"</string>
- <string name="hearing_devices_tools_label" msgid="1929081464316074476">"टुल"</string>
+ <string name="hearing_devices_tools_label" msgid="1929081464316074476">"टुलहरू"</string>
<string name="quick_settings_hearing_devices_live_caption_title" msgid="1054814050932225451">"लाइभ क्याप्सन"</string>
<string name="quick_settings_notes_label" msgid="1028004078001002623">"नोट"</string>
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"डिभाइसको माइक्रोफोन अनब्लक गर्ने हो?"</string>
@@ -506,7 +510,7 @@
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"कम्युनल ट्युटोरियल सुरु गर्न बायाँतिर स्वाइप गर्नुहोस्"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"कस्टमाइज गर्नुहोस्"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"खारेज गर्नुहोस्"</string>
- <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"यो स्पेसमा आफ्ना विजेटहरू हाल्नुहोस्, हटाउनुहोस् र तिनका क्रम फेरि मिलाउनुहोस्"</string>
+ <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"यो स्पेसमा विजेटहरू हाल्नुहोस्, हटाउनुहोस् र तिनको क्रम मिलाउनुहोस्"</string>
<string name="cta_label_to_open_widget_picker" msgid="3874946756976360699">"थप विजेटहरू हाल्नुहोस्"</string>
<string name="popup_on_dismiss_cta_tile_text" msgid="8292501780996070019">"विजेटहरू कस्टमाइज गर्न केही बेरसम्म थिच्नुहोस्"</string>
<string name="button_to_configure_widgets_text" msgid="4191862850185256901">"विजेटहरू कस्टमाइज गर्नुहोस्"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> मा वार्तालापसम्बन्धी सुविधा प्रयोग गर्न मिल्दैन"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"प्रतिक्रिया"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"हटाउनुहोस्"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"पिन गरिएका अपडेटका रूपमा नदेखाउनुहोस्"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"लाइभ अपडेटहरू देखाइँदै छन्"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"पिन गरिएका नोटिफिकेसनमा एपहरूबाट प्राप्त हालको जानकारी देखाइन्छ र ती नोटिफिकेसन सधैँ स्ट्याटस बार र लक स्क्रिनमा देखिन्छन्"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"यी सूचनाहरू परिमार्जन गर्न मिल्दैन।"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"कलसम्बन्धी सूचनाहरू परिमार्जन गर्न मिल्दैन।"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"यहाँबाट सूचनाहरूको यो समूह कन्फिगर गर्न सकिँदैन"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"मल्टिटास्किङ"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"हालको एप दायाँ भागमा पारेर स्प्लिट स्क्रिन प्रयोग गर्नुहोस्"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"हालको एप बायाँ भागमा पारेर स्प्लिट स्क्रिन प्रयोग गर्नुहोस्"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"फुल स्क्रिन प्रयोग गर्नुहोस्"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"स्प्लिट स्क्रिन प्रयोग गर्दै गर्दा दायाँ वा तलको एप चलाउनुहोस्"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"स्प्लिट स्क्रिन प्रयोग गर्दै गर्दा बायाँ वा माथिको एप चलाउनुहोस्"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"स्प्लिट स्क्रिन प्रयोग गरिएका बेला: एउटा स्क्रिनमा भएको एप अर्कोमा लैजानुहोस्"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"कम प्राथमिकताका सूचना आइकनहरू देखाउनुहोस्"</string>
<string name="other" msgid="429768510980739978">"अन्य"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"टाइल हटाउनुहोस्"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"अन्तिम स्थानमा टाइल हाल्नुहोस्"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"टाइल सार्नुहोस्"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"हालसालै चलाइएका एपहरू हेर्नुहोस्"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"एपहरू बदल्नुहोस्"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"सम्पन्न भयो"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"फेरि प्रयास गर्नुहोस्!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"पछाडि जानुहोस्"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"तीन वटा औँला प्रयोग गरी टचप्याडमा बायाँ वा दायाँतिर स्वाइप गर्नुहोस्"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"आफूले हालसालै चलाएका एपहरू हेर्न तीन वटा औँलाले टचप्याडमा माथितिर स्वाइप गर्नुहोस् र होल्ड गर्नुहोस्"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"आफ्ना सबै एपहरू हेर्न आफ्नो किबोर्डमा भएको एक्सन की थिच्नुहोस्"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"जानकारी लुकाउन सम्पादन गरिएको"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"हेर्नका लागि अनलक गर्नुहोस्"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"सान्दर्भिक शिक्षा"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"पछाडि जान आफ्नो टचप्याड प्रयोग गर्नुहोस्"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"तीन वटा औँला प्रयोग गरी बायाँ वा दायाँतिर स्वाइप गर्नुहोस्। थप जेस्चर प्रयोग गर्ने तरिका सिक्न ट्याप गर्नुहोस्।"</string>
diff --git a/packages/SystemUI/res/values-ne/tiles_states_strings.xml b/packages/SystemUI/res/values-ne/tiles_states_strings.xml
index de3baa0a33cf..fe812f846e41 100644
--- a/packages/SystemUI/res/values-ne/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ne/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"अफ छ"</item>
<item msgid="5908720590832378783">"अन छ"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"उपलब्ध छैन"</item>
+ <item msgid="6641673879029894995">"अफ छ"</item>
+ <item msgid="5806682401126108403">"अन छ"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index b778cecfee22..e78979853cbd 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth-verbinding ingesteld."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icoon voor bluetooth-apparaat"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klik om de apparaatgegevens in te stellen"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Klik om alle apparaten te bekijken"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Klik om nieuw apparaat te koppelen"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Batterijpercentage onbekend."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Verbonden met <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Verbonden met <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Invoer"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hoortoestellen"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aanzetten…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Kan de helderheid niet aanpassen omdat deze wordt\n beheerd door de bovenste app"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Kan de helderheid niet aanpassen omdat deze wordt beheerd door de bovenste app"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatisch draaien"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Scherm automatisch draaien"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Locatie"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ondersteunt geen gespreksfuncties"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Sluiten"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Niet tonen als vastgezet"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Live updates worden getoond"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Vastgezette meldingen tonen live informatie van apps en verschijnen altijd in de statusbalk en op het vergrendelscherm"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Deze meldingen kunnen niet worden aangepast."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Gespreksmeldingen kunnen niet worden aangepast."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Deze groep meldingen kan hier niet worden ingesteld"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasken"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Gesplitst scherm gebruiken met de app aan de rechterkant"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Gesplitst scherm gebruiken met de app aan de linkerkant"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Overschakelen naar volledig scherm"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Naar de app rechts of onderaan gaan als je een gesplitst scherm gebruikt"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Naar de app links of bovenaan gaan als je een gesplitst scherm gebruikt"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Tijdens gesplitst scherm: een app vervangen door een andere"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Iconen voor meldingen met lage prioriteit tonen"</string>
<string name="other" msgid="429768510980739978">"Overig"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"tegel verwijderen"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"tegel toevoegen op de laatste positie"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Tegel verplaatsen"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Recente apps bekijken"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Wisselen tussen apps"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Klaar"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Probeer het nog eens."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Terug"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Swipe met 3 vingers naar links of rechts op de touchpad"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Als je recente apps wilt bekijken, swipe je met 3 vingers omhoog op de touchpad en houd je vast"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Als je alle apps wilt bekijken, druk je op de actietoets op je toetsenbord"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Verborgen"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Ontgrendelen om te bekijken"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Contextuele educatie"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Je touchpad gebruiken om terug te gaan"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Swipe met 3 vingers naar links of rechts. Tik voor meer gebaren."</string>
diff --git a/packages/SystemUI/res/values-nl/tiles_states_strings.xml b/packages/SystemUI/res/values-nl/tiles_states_strings.xml
index 90572b674ab4..bb8fbe0604dc 100644
--- a/packages/SystemUI/res/values-nl/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-nl/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Uit"</item>
<item msgid="5908720590832378783">"Aan"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Niet beschikbaar"</item>
+ <item msgid="6641673879029894995">"Uit"</item>
+ <item msgid="5806682401126108403">"Aan"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index 0ef622b6b6eb..469ae2803f29 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"ବ୍ଲୁଟୂଥ୍‍‌ ସଂଯୋଗ କରାଯାଇଛି।"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ବ୍ଲୁଟୁଥ ଡିଭାଇସ ଆଇକନ"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ଡିଭାଇସ ବିବରଣୀକୁ କନଫିଗର କରିବା ପାଇଁ କ୍ଲିକ କରନ୍ତୁ"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"ସମସ୍ତ ଡିଭାଇସ ଦେଖିବାକୁ କ୍ଲିକ କରନ୍ତୁ"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"ନୂଆ ଡିଭାଇସ ପେୟାର କରିବାକୁ କ୍ଲିକ କରନ୍ତୁ"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ଇନପୁଟ୍"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ଶ୍ରବଣ ଯନ୍ତ୍ର"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ଅନ୍ ହେଉଛି…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ଟପ ଆପ ଦ୍ୱାରା ଉଜ୍ଜ୍ୱଳତା ନିୟନ୍ତ୍ରିତ\nହେଉଥିବା ଯୋଗୁଁ ଏହାକୁ ଆଡଜଷ୍ଟ କରିପାରିବେ ନାହିଁ"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ଟପ ଆପ ଦ୍ୱାରା ଉଜ୍ଜ୍ୱଳତା ନିୟନ୍ତ୍ରିତହେଉଥିବା ଯୋଗୁଁ ଏହାକୁ ଆଡଜଷ୍ଟ କରିପାରିବେ ନାହିଁ"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ଅଟୋ-ରୋଟେଟ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ଅଟୋ-ରୋଟେଟ ସ୍କ୍ରିନ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ଲୋକେସନ"</string>
@@ -354,7 +358,7 @@
<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>
- <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"ୟୁଜରମାନଙ୍କୁ ପରିଚାଳନା କରନ୍ତୁ"</string>
+ <string name="quick_settings_more_user_settings" msgid="7634653308485206306">"ୟୁଜରଙ୍କୁ ପରିଚାଳନା"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"ହୋଇଗଲା"</string>
<string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"ସଂଯୁକ୍ତ"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ବାର୍ତ୍ତାଳାପ ଫିଚରଗୁଡ଼ିକୁ ସମର୍ଥନ କରେ ନାହିଁ"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ମତାମତ"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ଖାରଜ କରନ୍ତୁ"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"ପିନ ଥିବା ଭାବେ ଦେଖାନ୍ତୁ ନାହିଁ"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"ଲାଇଭ ଅପଡେଟଗୁଡ଼ିକୁ ଦେଖାଉଛି"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"ପିନ କରାଯାଇଥିବା ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଆପ୍ସରୁ ଲାଇଭ ସୂଚନା ଡିସପ୍ଲେ କରେ ଏବଂ ସର୍ବଦା ଷ୍ଟାଟସ ବାର ଓ ଲକ ସ୍କ୍ରିନରେ ଦେଖାଯାଏ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ପରିବର୍ତ୍ତନ କରିହେବ ନାହିଁ।"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"କଲ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ପରିବର୍ତ୍ତନ କରାଯାଇପାରିବ ନାହିଁ।"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"ଏଠାରେ ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକର ଗ୍ରୁପ୍ କନଫ୍ୟୁଗର୍ କରାଯାଇପାରିବ ନାହିଁ"</string>
@@ -835,7 +836,7 @@
<string name="notification_menu_gear_description" msgid="6429668976593634862">"ବିଜ୍ଞପ୍ତି ନିୟନ୍ତ୍ରଣ"</string>
<string name="notification_menu_snooze_description" msgid="4740133348901973244">"ବିଜ୍ଞପ୍ତି ସ୍ନୁଜ୍‍ ବିକଳ୍ପ"</string>
<string name="notification_menu_snooze_action" msgid="5415729610393475019">"ମୋତେ ରିମାଇଣ୍ଡର୍ କରନ୍ତୁ"</string>
- <string name="snooze_undo" msgid="2738844148845992103">"ପୂର୍ବବତ୍ କରନ୍ତୁ"</string>
+ <string name="snooze_undo" msgid="2738844148845992103">"ଅନଡୁ କରନ୍ତୁ"</string>
<string name="snooze_undo_content_description" msgid="2711656788917580801">"ବିଜ୍ଞପ୍ତି ସ୍ନୁଜକୁ ପୂର୍ବବତ କରନ୍ତୁ"</string>
<string name="snoozed_for_time" msgid="7586689374860469469">"<xliff:g id="TIME_AMOUNT">%1$s</xliff:g> ପାଇଁ ସ୍ନୁଜ୍‍ କରାଗଲା"</string>
<string name="snoozeHourOptions" msgid="2332819756222425558">"{count,plural, =1{# ଘଣ୍ଟା}=2{# ଘଣ୍ଟା}other{# ଘଣ୍ଟା}}"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ମଲ୍ଟିଟାସ୍କିଂ"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ଡାହାଣରେ ଆପ ସହିତ ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନକୁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ବାମରେ ଆପ ସହିତ ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନକୁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନକୁ ସୁଇଚ କରନ୍ତୁ"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନ ବ୍ୟବହାର କରିବା ସମୟରେ ଡାହାଣପଟର ବା ତଳର ଆପକୁ ସୁଇଚ କରନ୍ତୁ"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନ ବ୍ୟବହାର କରିବା ସମୟରେ ବାମପଟର ବା ଉପରର ଆପକୁ ସୁଇଚ କରନ୍ତୁ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନ ସମୟରେ: କୌଣସି ଆପକୁ ଗୋଟିଏରୁ ଅନ୍ୟ ଏକ ଆପରେ ବଦଳାନ୍ତୁ"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"କମ୍‍-ଅଗ୍ରାଧିକାର ବିଜ୍ଞପ୍ତି ଆଇକନ୍‍ ଦେଖାନ୍ତୁ"</string>
<string name="other" msgid="429768510980739978">"ଅନ୍ୟ"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ଟାଇଲ୍ କାଢ଼ି ଦିଅନ୍ତୁ"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ଶେଷ ପୋଜିସନରେ ଟାଇଲ ଯୋଗ କରିବା"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ଟାଇଲ୍ ମୁଭ୍ କରନ୍ତୁ"</string>
@@ -1132,7 +1138,7 @@
<string name="accessibility_magnification_magnifier_window_settings" msgid="2834685072221468434">"ମ୍ୟାଗ୍ନିଫାୟର ୱିଣ୍ଡୋର ସେଟିଂସ"</string>
<string name="accessibility_floating_button_migration_tooltip" msgid="5217151214439341902">"ଆକ୍ସେସିବିଲିଟୀ ଫିଚର ଖୋଲିବାକୁ ଟାପ କରନ୍ତୁ। ସେଟିଂସରେ ଏହି ବଟନକୁ କଷ୍ଟମାଇଜ କର କିମ୍ବା ବଦଳାଅ।\n\n"<annotation id="link">"ସେଟିଂସ ଦେଖନ୍ତୁ"</annotation></string>
<string name="accessibility_floating_button_docking_tooltip" msgid="6814897496767461517">"ବଟନକୁ ଅସ୍ଥାୟୀ ଭାବେ ଲୁଚାଇବା ପାଇଁ ଏହାକୁ ଗୋଟିଏ ଧାରକୁ ମୁଭ୍ କରନ୍ତୁ"</string>
- <string name="accessibility_floating_button_undo" msgid="511112888715708241">"ପୂର୍ବବତ୍ କରନ୍ତୁ"</string>
+ <string name="accessibility_floating_button_undo" msgid="511112888715708241">"ଅନଡୁ କରନ୍ତୁ"</string>
<string name="accessibility_floating_button_hidden_notification_title" msgid="4115036997406994799">"ଆକ୍ସେସିବିଲିଟୀ ବଟନକୁ ଲୁଚାଯାଇଛି"</string>
<string name="accessibility_floating_button_hidden_notification_text" msgid="1457021647040915658">"ଆକ୍ସେସିବିଲିଟୀ ବଟନ ଦେଖାଇବାକୁ ଟାପ କରନ୍ତୁ"</string>
<string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> ସର୍ଟକଟକୁ କାଢ଼ି ଦିଆଯାଇଛି"</string>
@@ -1210,7 +1216,7 @@
<string name="controls_media_smartspace_rec_item_description" msgid="2189271793070870883">"<xliff:g id="APP_LABEL">%3$s</xliff:g>ରୁ <xliff:g id="ARTIST_NAME">%2$s</xliff:g>ଙ୍କ <xliff:g id="SONG_NAME">%1$s</xliff:g> ଚଲାନ୍ତୁ"</string>
<string name="controls_media_smartspace_rec_item_no_artist_description" msgid="8703614798636591077">"<xliff:g id="APP_LABEL">%2$s</xliff:g>ରୁ <xliff:g id="SONG_NAME">%1$s</xliff:g> ଚଲାନ୍ତୁ"</string>
<string name="controls_media_smartspace_rec_header" msgid="5053461390357112834">"ଆପଣଙ୍କ ପାଇଁ"</string>
- <string name="media_transfer_undo" msgid="1895606387620728736">"ପୂର୍ବବତ୍ କରନ୍ତୁ"</string>
+ <string name="media_transfer_undo" msgid="1895606387620728736">"ଅନଡୁ କରନ୍ତୁ"</string>
<string name="media_move_closer_to_start_cast" msgid="2673104707465013176">"<xliff:g id="DEVICENAME">%1$s</xliff:g>ରେ ପ୍ଲେ କରିବା ପାଇଁ ପାଖକୁ ମୁଭ କରନ୍ତୁ"</string>
<string name="media_move_closer_to_end_cast" msgid="7302555909119374738">"ଏଠାରେ ପ୍ଲେ କରିବା ପାଇଁ <xliff:g id="DEVICENAME">%1$s</xliff:g> ପାଖକୁ ମୁଭ କରନ୍ତୁ"</string>
<string name="media_transfer_playing_different_device" msgid="7186806382609785610">"<xliff:g id="DEVICENAME">%1$s</xliff:g>ରେ ପ୍ଲେ ହେଉଛି"</string>
@@ -1356,7 +1362,7 @@
<string name="clipboard_image_preview" msgid="2156475174343538128">"ଇମେଜ ପ୍ରିଭ୍ୟୁ"</string>
<string name="clipboard_edit" msgid="4500155216174011640">"ଏଡିଟ କରନ୍ତୁ"</string>
<string name="add" msgid="81036585205287996">"ଯୋଗ କରନ୍ତୁ"</string>
- <string name="manage_users" msgid="1823875311934643849">"ୟୁଜରମାନଙ୍କୁ ପରିଚାଳନା କରନ୍ତୁ"</string>
+ <string name="manage_users" msgid="1823875311934643849">"ୟୁଜରଙ୍କୁ ପରିଚାଳନା"</string>
<string name="drag_split_not_supported" msgid="7173481676120546121">"ଏହି ବିଜ୍ଞପ୍ତି ସ୍ପ୍ଲିଟ ସ୍କ୍ରିନକୁ ଟାଣିବାକୁ ସମର୍ଥନ କରେ ନାହିଁ"</string>
<string name="dream_overlay_location_active" msgid="6484763493158166618">"ଲୋକେସନ ସକ୍ରିୟ ଅଛି"</string>
<string name="dream_overlay_status_bar_wifi_off" msgid="4497069245055003582">"ୱାଇ-ଫାଇ ଉପଲବ୍ଧ ନାହିଁ"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"ବର୍ତ୍ତମାନର ଆପ୍ସ ଭ୍ୟୁ କରନ୍ତୁ"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ଆପ୍ସକୁ ସୁଇଚ କରନ୍ତୁ"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"ହୋଇଗଲା"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ପଛକୁ ଫେରନ୍ତୁ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"ଆପଣଙ୍କ ଟଚପେଡରେ ତିନୋଟି ଆଙ୍ଗୁଠି ବ୍ୟବହାର କରି ବାମ କିମ୍ବା ଡାହାଣକୁ ସ୍ୱାଇପ କରନ୍ତୁ"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"ବର୍ତ୍ତମାନର ଆପ୍ସ ଭ୍ୟୁ କରିବାକୁ, ଟଚପେଡରେ ତିନୋଟି ଆଙ୍ଗୁଠିରେ ଉପରକୁ ସ୍ୱାଇପ କରି ଧରି ରଖନ୍ତୁ"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"ଆପଣଙ୍କ ସମସ୍ତ ଆପ୍ସ ଭ୍ୟୁ କରିବା ପାଇଁ ଆପଣଙ୍କ କୀବୋର୍ଡରେ ଆକ୍ସନ କୀ\'କୁ ଦବାନ୍ତୁ"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"ଲୁଚା ଯାଇଥିବା"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"ଭ୍ୟୁ କରିବାକୁ ଅନଲକ କରନ୍ତୁ"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"ପ୍ରାସଙ୍ଗିକ ଶିକ୍ଷା"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"ପଛକୁ ଫେରିବା ପାଇଁ ଆପଣଙ୍କ ଟଚପେଡକୁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"ତିନୋଟି ଆଙ୍ଗୁଠିରେ ବାମ ବା ଡାହାଣକୁ ସ୍ୱାଇପ କରନ୍ତୁ। ଜେଶ୍ଚରଗୁଡ଼ିକ ବିଷୟରେ ଅଧିକ ଜାଣିବାକୁ ଟାପ କରନ୍ତୁ।"</string>
diff --git a/packages/SystemUI/res/values-or/tiles_states_strings.xml b/packages/SystemUI/res/values-or/tiles_states_strings.xml
index c9c319892ab8..eae984b6c1f3 100644
--- a/packages/SystemUI/res/values-or/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-or/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"ବନ୍ଦ ଅଛି"</item>
<item msgid="5908720590832378783">"ଚାଲୁ ଅଛି"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"ଅନୁପଲବ୍ଧ"</item>
+ <item msgid="6641673879029894995">"ବନ୍ଦ ଅଛି"</item>
+ <item msgid="5806682401126108403">"ଚାଲୁ ଅଛି"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 4be78a32282c..70d249759cb8 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth ਕਨੈਕਟ ਕੀਤੀ।"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ਬਲੂਟੁੱਥ ਡੀਵਾਈਸ ਦਾ ਪ੍ਰਤੀਕ"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"ਡੀਵਾਈਸ ਦੇ ਵੇਰਵੇ ਦਾ ਸੰਰੂਪਣ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"\'ਸਾਰੇ ਡੀਵਾਈਸ ਦੇਖੋ\' \'ਤੇ ਕਲਿੱਕ ਕਰੋ"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"\'ਨਵਾਂ ਡੀਵਾਈਸ ਜੋੜਾਬੱਧ ਕਰੋ\' \'ਤੇ ਕਲਿੱਕ ਕਰੋ"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. ਡੀਵਾਈਸ ਦੇ ਵੇਰਵੇ ਦਾ ਸੰਰੂਪਣ ਕਰੋ"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"ਸਾਰੇ ਡੀਵਾਈਸ ਦੇਖੋ"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"ਨਵਾਂ ਡੀਵਾਈਸ ਜੋੜਾਬੱਧ ਕਰੋ"</string>
<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>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ਇਨਪੁੱਟ"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ਸੁਣਨ ਦੇ ਸਾਧਨ"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ਚਮਕ ਨੂੰ ਵਿਵਸਥਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਕਿਉਂਕਿ ਇਹ ਪਹਿਲਾਂ ਚੱਲ ਰਹੀ ਐਪ ਵੱਲੋਂ ਕੰਟਰੋਲ ਕਰਨ ਕਰਕੇ \n ਹੋ ਰਿਹਾ ਹੈ"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ਚਮਕ ਨੂੰ ਵਿਵਸਥਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਕਿਉਂਕਿ ਇਹ ਪਹਿਲਾਂ ਚੱਲ ਰਹੀ ਐਪ ਵੱਲੋਂ ਕੰਟਰੋਲ ਕਰਨ ਕਰਕੇ ਹੋ ਰਿਹਾ ਹੈ"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ਸਵੈ-ਘੁਮਾਓ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ਸਕ੍ਰੀਨ ਨੂੰ ਆਪਣੇ ਆਪ ਘੁੰਮਾਓ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ਟਿਕਾਣਾ"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਐਪ ਗੱਲਬਾਤ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੀ"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ਵਿਚਾਰ"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ਖਾਰਜ ਕਰੋ"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"ਪਿੰਨ ਕੀਤੇ ਵਜੋਂ ਨਾ ਦਿਖਾਓ"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"ਲਾਈਵ ਅੱਪਡੇਟ ਦਿਖਾਏ ਜਾ ਰਹੇ ਹਨ"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"ਪਿੰਨ ਕੀਤੀਆਂ ਸੂਚਨਾਵਾਂ ਐਪਾਂ ਤੋਂ ਲਾਈਵ ਜਾਣਕਾਰੀ ਦਿਖਾਉਂਦੀਆਂ ਹਨ ਅਤੇ ਇਹ ਜਾਣਕਾਰੀ ਹਮੇਸ਼ਾਂ ਸਥਿਤੀ ਪੱਟੀ ਅਤੇ ਲਾਕ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਖਦੀ ਹੈ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਸੋਧਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"ਕਾਲ ਸੰਬੰਧੀ ਸੂਚਨਾਵਾਂ ਨੂੰ ਸੋਧਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ।"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"ਇਹ ਸੂਚਨਾਵਾਂ ਦਾ ਗਰੁੱਪ ਇੱਥੇ ਸੰਰੂਪਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ਮਲਟੀਟਾਸਕਿੰਗ"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ਸੱਜੇ ਪਾਸੇ ਵਾਲੀ ਐਪ ਨਾਲ ਸਪਲਿਟ ਸਕ੍ਰੀਨ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ਖੱਬੇ ਪਾਸੇ ਵਾਲੀ ਐਪ ਨਾਲ ਸਪਲਿਟ ਸਕ੍ਰੀਨ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"ਪੂਰੀ-ਸਕ੍ਰੀਨ \'ਤੇ ਸਵਿੱਚ ਕਰੋ"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"ਪੂਰੀ ਸਕ੍ਰੀਨ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"ਡੈਸਕਟਾਪ ਦ੍ਰਿਸ਼ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"ਸਪਲਿਟ ਸਕ੍ਰੀਨ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵੇਲੇ ਸੱਜੇ ਜਾਂ ਹੇਠਾਂ ਮੌਜੂਦ ਐਪ \'ਤੇ ਸਵਿੱਚ ਕਰੋ"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"ਸਪਲਿਟ ਸਕ੍ਰੀਨ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵੇਲੇ ਖੱਬੇ ਜਾਂ ਉੱਪਰ ਮੌਜੂਦ ਐਪ \'ਤੇ ਸਵਿੱਚ ਕਰੋ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"ਸਪਲਿਟ ਸਕ੍ਰੀਨ ਦੌਰਾਨ: ਇੱਕ ਐਪ ਨਾਲ ਦੂਜੀ ਐਪ ਨੂੰ ਬਦਲੋ"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"ਘੱਟ ਤਰਜੀਹ ਵਾਲੇ ਸੂਚਨਾ ਪ੍ਰਤੀਕਾਂ ਨੂੰ ਦਿਖਾਓ"</string>
<string name="other" msgid="429768510980739978">"ਹੋਰ"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ਟਾਇਲ ਹਟਾਓ"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ਪਿਛਲੀ ਸਥਿਤੀ \'ਤੇ ਟਾਇਲ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ਟਾਇਲ ਨੂੰ ਲਿਜਾਓ"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"ਹਾਲੀਆ ਐਪਾਂ ਦੇਖੋ"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ਐਪਾਂ ਵਿਚਕਾਰ ਸਵਿੱਚ ਕਰੋ"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"ਹੋ ਗਿਆ"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"ਅੱਗੇ"</string>
<string name="gesture_error_title" msgid="469064941635578511">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ਵਾਪਸ ਜਾਓ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"ਆਪਣੇ ਟੱਚਪੈਡ \'ਤੇ ਤਿੰਨ ਉਂਗਲਾਂ ਦੀ ਵਰਤੋਂ ਕਰ ਕੇ ਖੱਬੇ ਜਾਂ ਸੱਜੇ ਪਾਸੇ ਵੱਲ ਸਵਾਈਪ ਕਰੋ"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"ਹਾਲੀਆ ਐਪਾਂ ਨੂੰ ਦੇਖਣ ਲਈ, ਟੱਚਪੈਡ \'ਤੇ ਤਿੰਨ ਉਂਗਲਾਂ ਨਾਲ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰ ਕੇ ਦਬਾਈ ਰੱਖੋ"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"ਆਪਣੀਆਂ ਸਾਰੀਆਂ ਐਪਾਂ ਨੂੰ ਦੇਖਣ ਲਈ, ਆਪਣੇ ਕੀ-ਬੋਰਡ \'ਤੇ ਕਾਰਵਾਈ ਕੁੰਜੀ ਨੂੰ ਦਬਾਓ"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"ਅਸਪਸ਼ਟ ਬਣਾਇਆ ਗਿਆ"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"ਦੇਖਣ ਲਈ ਅਣਲਾਕ ਕਰੋ"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"ਸੰਦਰਭੀ ਸਿੱਖਿਆ"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"ਪਿੱਛੇ ਜਾਣ ਲਈ ਆਪਣੇ ਟੱਚਪੈਡ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"ਤਿੰਨ ਉਂਗਲਾਂ ਦੀ ਵਰਤੋਂ ਕਰ ਕੇ ਖੱਬੇ ਜਾਂ ਸੱਜੇ ਪਾਸੇ ਵੱਲ ਸਵਾਈਪ ਕਰੋ। ਹੋਰ ਇਸ਼ਾਰਿਆਂ ਨੂੰ ਜਾਣਨ ਲਈ ਟੈਪ ਕਰੋ।"</string>
diff --git a/packages/SystemUI/res/values-pa/tiles_states_strings.xml b/packages/SystemUI/res/values-pa/tiles_states_strings.xml
index eeb9a5beba7a..2baff30ad6d6 100644
--- a/packages/SystemUI/res/values-pa/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pa/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"ਬੰਦ"</item>
<item msgid="5908720590832378783">"ਚਾਲੂ"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"ਉਪਲਬਧ ਨਹੀਂ"</item>
+ <item msgid="6641673879029894995">"ਬੰਦ ਹੈ"</item>
+ <item msgid="5806682401126108403">"ਚਾਲੂ ਹੈ"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index d358b9f708b5..6a4b3d5627bb 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth połączony."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikona urządzenia Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kliknij, aby skonfigurować szczegóły urządzenia"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Kliknij, aby zobaczyć wszystkie urządzenia"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Kliknij, aby sparować nowe urządzenie"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Wejście"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparaty słuchowe"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Włączam…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nie można dostosować jasności, ponieważ jest ona\nkontrolowana przez aplikację na pierwszym planie"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nie można dostosować jasności, ponieważ jest onakontrolowana przez aplikację na pierwszym planie"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Autoobracanie"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Autoobracanie ekranu"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokalizacja"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"Aplikacja <xliff:g id="APP_NAME">%1$s</xliff:g> nie obsługuje funkcji rozmów"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Opinia"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Zamknij"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Nie pokazuj jako przypiętych"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Wyświetlanie aktualizacji na żywo"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Przypięte powiadomienia wyświetlają na żywo informacje z aplikacji i zawsze pojawiają się na pasku stanu oraz na ekranie blokady"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Tych powiadomień nie można zmodyfikować."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Powiadomień o połączeniach nie można modyfikować."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Tej grupy powiadomień nie można tu skonfigurować"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Wielozadaniowość"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Podziel ekran z aplikacją widoczną po prawej"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Podziel ekran z aplikacją widoczną po lewej"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Włącz pełny ekran"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Przełącz się na aplikację po prawej lub poniżej na podzielonym ekranie"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Przełącz się na aplikację po lewej lub powyżej na podzielonym ekranie"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Podczas podzielonego ekranu: zastępowanie aplikacji"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Pokazuj ikony powiadomień o niskim priorytecie"</string>
<string name="other" msgid="429768510980739978">"Inne"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"usunąć kartę"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"dodaj kafelek do ostatniej pozycji"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Przenieś kartę"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Wyświetlanie ostatnich aplikacji"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Przełączanie aplikacji"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Gotowe"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Spróbuj jeszcze raz"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Wróć"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Przesuń 3 palcami w prawo lub w lewo na touchpadzie"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Aby wyświetlić ostatnie aplikacje, przesuń w górę za pomocą 3 palców na touchpadzie i przytrzymaj."</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Aby wyświetlić wszystkie swoje aplikacje, naciśnij klawisz działania na klawiaturze"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Usunięto"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Odblokuj, aby zobaczyć"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Edukacja kontekstowa"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Przechodzenie wstecz za pomocą touchpada"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Przesuń trzema palcami w prawo lub lewo. Kliknij, aby poznać więcej gestów."</string>
diff --git a/packages/SystemUI/res/values-pl/tiles_states_strings.xml b/packages/SystemUI/res/values-pl/tiles_states_strings.xml
index bc59a9057618..bd3a828c868f 100644
--- a/packages/SystemUI/res/values-pl/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pl/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Wyłączony"</item>
<item msgid="5908720590832378783">"Włączony"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Niedostępne"</item>
+ <item msgid="6641673879029894995">"Wyłączone"</item>
+ <item msgid="5806682401126108403">"Włączone"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 3a7d1f2db002..42ce3f436a54 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth conectado."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ícone de dispositivo Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Clique para configurar os detalhes do dispositivo"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Clique para conferir todos os dispositivos"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Clique para parear o novo dispositivo"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Porcentagem da bateria desconhecida."</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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparelhos auditivos"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Ativando…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Não é possível ajustar o brilho, porque ele está sendo\n controlado pelo app principal"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Não é possível ajustar o brilho, porque ele está sendo controlado pelo app principal"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Giro automático"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Giro automático da tela"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Localização"</string>
@@ -808,12 +812,9 @@
<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>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Enviar feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Dispensar"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Não mostrar como fixadas"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Mostrar atualizações em tempo real"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"As notificações fixadas mostram informações em tempo real dos apps e sempre aparecem na barra de status e na tela de bloqueio"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Não é possível modificar essas notificações."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Não é possível modificar as notificações de chamada."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Não é possível configurar esse grupo de notificações aqui"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitarefas"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Usar a tela dividida com o app à direita"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Usar a tela dividida com o app à esquerda"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Mudar para tela cheia"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Mudar para o app à direita ou abaixo ao usar a tela dividida"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Mudar para o app à esquerda ou acima ao usar a tela dividida"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Com a tela dividida: substituir um app por outro"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Mostrar ícones de notificações de baixa prioridade"</string>
<string name="other" msgid="429768510980739978">"Outros"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"remover o bloco"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"adicionar o bloco à última posição"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mover bloco"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Ver os apps recentes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Mudar de app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Concluído"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Tente de novo"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Voltar"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Deslize para a esquerda ou direita com 3 dedos no touchpad"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Se quiser ver os apps recentes, deslize para cima e pressione o touchpad com três dedos"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Para ver todos os apps, pressione a tecla de ação no teclado"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Encoberto"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Desbloquear para visualizar"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Educação contextual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Use o touchpad para voltar"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Deslize para a esquerda ou direita usando três dedos. Toque para aprender outros gestos."</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/tiles_states_strings.xml b/packages/SystemUI/res/values-pt-rBR/tiles_states_strings.xml
index 3e75cdd2bd09..b16d6f2b94e9 100644
--- a/packages/SystemUI/res/values-pt-rBR/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Desativado"</item>
<item msgid="5908720590832378783">"Ativado"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Indisponível"</item>
+ <item msgid="6641673879029894995">"Desativado"</item>
+ <item msgid="5806682401126108403">"Ativado"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index ff0ba3666efe..37ec3da877fe 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth ligado."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ícone de dispositivo Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Clique para configurar o detalhe do dispositivo"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Clique para ver todos os dispositivos"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Clique para sincronizar um novo dispositivo"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Configure o detalhe do dispositivo"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Veja todos os dispositivos"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Sincronize um novo dispositivo"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Percentagem da bateria desconhecida."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Ligado a <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Ligado a <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparelhos auditivos"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"A ativar..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Não é possível ajustar o brilho porque está a ser\n controlado pela app principal"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Não é possível ajustar o brilho porque está a ser controlado pela app principal"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotação auto."</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rodar o ecrã automaticamente"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Localização"</string>
@@ -506,7 +507,7 @@
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Deslize rapidamente para a esquerda para iniciar o tutorial coletivo"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizar"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Ignorar"</string>
- <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"Adicionar, remover e reordenar widgets neste espaço"</string>
+ <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"Adicione, remova e reordene widgets aqui"</string>
<string name="cta_label_to_open_widget_picker" msgid="3874946756976360699">"Adicionar mais widgets"</string>
<string name="popup_on_dismiss_cta_tile_text" msgid="8292501780996070019">"Mantenha pressionado para personalizar os widgets"</string>
<string name="button_to_configure_widgets_text" msgid="4191862850185256901">"Personalizar widgets"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"A app <xliff:g id="APP_NAME">%1$s</xliff:g> não suporta funcionalidades de conversa."</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Ignorar"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Não mostrar como afixada"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"A mostrar atualizações em direto"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"As notificações afixadas apresentam informações em direto das apps e aparecem sempre na barra de estado e no ecrã de bloqueio"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Não é possível modificar estas notificações."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Não é possível modificar as notificações de chamadas."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Não é possível configurar este grupo de notificações aqui."</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Execução de várias tarefas em simultâneo"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Use o ecrã dividido com a app à direita"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Use o ecrã dividido com a app à esquerda"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Mude para ecrã inteiro"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Use o ecrã inteiro"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Use a vista de computador"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Mudar para a app à direita ou abaixo enquanto usa o ecrã dividido"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Mude para a app à esquerda ou acima enquanto usa o ecrã dividido"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Durante o ecrã dividido: substituir uma app por outra"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Mostrar ícones de notificações de prioridade baixa"</string>
<string name="other" msgid="429768510980739978">"Outro"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"remover o cartão"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"adicionar o mosaico à última posição"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mover cartão"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Ver apps recentes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Mudar de app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Concluir"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Seguinte"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Tente novamente!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Voltar"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Deslize rapidamente para a esquerda ou direita com 3 dedos no touchpad"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Para ver as apps recentes, deslize rapidamente para cima e mantenha premido com 3 dedos no touchpad"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Para ver todas as suas apps, prima a tecla de ação no teclado"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Revisto"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Desbloqueie para ver"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Educação contextual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Use o touchpad para retroceder"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Deslize rapidamente para a esquerda ou direita com 3 dedos. Toque para aprender mais gestos."</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/tiles_states_strings.xml b/packages/SystemUI/res/values-pt-rPT/tiles_states_strings.xml
index 7e7e6734f57e..3beca27a1d29 100644
--- a/packages/SystemUI/res/values-pt-rPT/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Desativado"</item>
<item msgid="5908720590832378783">"Ativado"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Indisponível"</item>
+ <item msgid="6641673879029894995">"Desativado"</item>
+ <item msgid="5806682401126108403">"Ativado"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 3a7d1f2db002..42ce3f436a54 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth conectado."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ícone de dispositivo Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Clique para configurar os detalhes do dispositivo"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Clique para conferir todos os dispositivos"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Clique para parear o novo dispositivo"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Porcentagem da bateria desconhecida."</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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Entrada"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparelhos auditivos"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Ativando…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Não é possível ajustar o brilho, porque ele está sendo\n controlado pelo app principal"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Não é possível ajustar o brilho, porque ele está sendo controlado pelo app principal"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Giro automático"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Giro automático da tela"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Localização"</string>
@@ -808,12 +812,9 @@
<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>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Enviar feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Dispensar"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Não mostrar como fixadas"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Mostrar atualizações em tempo real"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"As notificações fixadas mostram informações em tempo real dos apps e sempre aparecem na barra de status e na tela de bloqueio"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Não é possível modificar essas notificações."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Não é possível modificar as notificações de chamada."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Não é possível configurar esse grupo de notificações aqui"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitarefas"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Usar a tela dividida com o app à direita"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Usar a tela dividida com o app à esquerda"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Mudar para tela cheia"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Mudar para o app à direita ou abaixo ao usar a tela dividida"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Mudar para o app à esquerda ou acima ao usar a tela dividida"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Com a tela dividida: substituir um app por outro"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Mostrar ícones de notificações de baixa prioridade"</string>
<string name="other" msgid="429768510980739978">"Outros"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"remover o bloco"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"adicionar o bloco à última posição"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mover bloco"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Ver os apps recentes"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Mudar de app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Concluído"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Tente de novo"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Voltar"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Deslize para a esquerda ou direita com 3 dedos no touchpad"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Se quiser ver os apps recentes, deslize para cima e pressione o touchpad com três dedos"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Para ver todos os apps, pressione a tecla de ação no teclado"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Encoberto"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Desbloquear para visualizar"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Educação contextual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Use o touchpad para voltar"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Deslize para a esquerda ou direita usando três dedos. Toque para aprender outros gestos."</string>
diff --git a/packages/SystemUI/res/values-pt/tiles_states_strings.xml b/packages/SystemUI/res/values-pt/tiles_states_strings.xml
index 3e75cdd2bd09..b16d6f2b94e9 100644
--- a/packages/SystemUI/res/values-pt/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-pt/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Desativado"</item>
<item msgid="5908720590832378783">"Ativado"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Indisponível"</item>
+ <item msgid="6641673879029894995">"Desativado"</item>
+ <item msgid="5806682401126108403">"Ativado"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 2417c840a2cd..a23f95eaaefb 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Conectat prin Bluetooth."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Pictograma de dispozitiv Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Dă clic pentru a configura detaliile dispozitivului"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Dă clic pentru a vedea toate dispozitivele"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Dă clic pentru a asocia noul dispozitiv"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Intrare"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparate auditive"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Se activează..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nu se poate ajusta luminozitatea deoarece este\n controlată de aplicația de top"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Nu se poate ajusta luminozitatea deoarece este controlată de aplicația de top"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotire automată"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotirea automată a ecranului"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Locație"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> nu acceptă funcții pentru conversații"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Închide"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Nu le afișa ca fixate"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Se afișează actualizări live"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Notificările fixate afișează informații live din aplicații și apar întotdeauna în bara de stare și pe ecranul de blocare"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Aceste notificări nu pot fi modificate."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Notificările pentru apeluri nu pot fi modificate."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Acest grup de notificări nu poate fi configurat aici"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Folosește ecranul împărțit cu aplicația în dreapta"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Folosește ecranul împărțit cu aplicația în stânga"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Treci la ecran complet"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Treci la aplicația din dreapta sau de mai jos cu ecranul împărțit"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Treci la aplicația din stânga sau de mai sus cu ecranul împărțit"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"În modul ecran împărțit: înlocuiește o aplicație cu alta"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Afișează pictogramele de notificare cu prioritate redusă"</string>
<string name="other" msgid="429768510980739978">"Altele"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"elimină cardul"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"adaugă cardul în ultima poziție"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Mută cardul"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Vezi aplicațiile recente"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Comută între aplicații"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Gata"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Încearcă din nou!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Înapoi"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Glisează la stânga sau la dreapta cu trei degete pe touchpad"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Ca să vezi aplicațiile recente, glisează în sus și ține apăsat cu trei degete pe touchpad"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Ca să vezi toate aplicațiile, apasă tasta de acțiuni de pe tastatură"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Ascunsă"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Deblochează pentru a afișa"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Educație contextuală"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Folosește-ți touchpadul ca să revii"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Glisează la stânga sau la dreapta cu trei degete. Atinge ca să înveți mai multe gesturi."</string>
diff --git a/packages/SystemUI/res/values-ro/tiles_states_strings.xml b/packages/SystemUI/res/values-ro/tiles_states_strings.xml
index 6dcb0d3c1635..b55598725a0f 100644
--- a/packages/SystemUI/res/values-ro/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ro/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Dezactivat"</item>
<item msgid="5908720590832378783">"Activat"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Indisponibil"</item>
+ <item msgid="6641673879029894995">"Dezactivat"</item>
+ <item msgid="5806682401126108403">"Activat"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index f6968d531535..1d40a6c30239 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth-соединение установлено."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Значок устройства Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Нажмите, чтобы изменить информацию об устройстве"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Нажмите, чтобы показать все устройства"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Нажмите, чтобы подключить устройство"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Устройство ввода"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слуховые аппараты"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Включение…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Невозможно изменить яркость,\nтак как она регулируется общими настройками."</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Невозможно изменить яркость,так как она регулируется общими настройками."</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автоповорот"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоповорот экрана"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Геолокация"</string>
@@ -471,7 +475,7 @@
<string name="zen_silence_introduction" msgid="6117517737057344014">"В этом режиме будут отключены вибросигнал и все звуки (в том числе для будильника, музыкального проигрывателя, игр и видео)."</string>
<string name="notification_tap_again" msgid="4477318164947497249">"Нажмите ещё раз, чтобы открыть"</string>
<string name="tap_again" msgid="1315420114387908655">"Нажмите ещё раз"</string>
- <string name="keyguard_unlock" msgid="8031975796351361601">"Проведите вверх, чтобы открыть"</string>
+ <string name="keyguard_unlock" msgid="8031975796351361601">"Проведите вверх, чтобы открыть."</string>
<string name="keyguard_unlock_press" msgid="9140109453735019209">"Нажмите на значок разблокировки."</string>
<string name="keyguard_face_successful_unlock_swipe" msgid="6180997591385846073">"Сканирование выполнено. Чтобы открыть, проведите вверх."</string>
<string name="keyguard_face_successful_unlock_press" msgid="25520941264602588">"Сканирование выполнено. Нажмите на значок разблокировки."</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" не поддерживает функции разговоров."</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Оставить отзыв"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Закрыть"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Открепить уведомления"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Показывать уведомления в реальном времени"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Закрепленные уведомления с текущей информацией из приложений всегда показываются в строке состояния и на заблокированном экране"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Эти уведомления нельзя изменить."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Уведомления о звонках нельзя изменить."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Эту группу уведомлений нельзя настроить здесь."</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Многозадачность"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Разделить экран и поместить открытое приложение справа"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Разделить экран и поместить открытое приложение слева"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Включить полноэкранный режим"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Перейти к приложению справа или внизу на разделенном экране"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Перейти к приложению слева или вверху на разделенном экране"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"В режиме разделения экрана заменить одно приложение другим"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Показывать значки уведомлений с низким приоритетом"</string>
<string name="other" msgid="429768510980739978">"Другое"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"удалить панель"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"добавить параметр в конец"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Переместить панель"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Просмотр недавних приложений"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Переход в другое приложение"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Готово"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Попробуйте ещё раз"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Назад"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Проведите тремя пальцами влево или вправо по сенсорной панели."</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Чтобы увидеть недавние приложения, проведите по сенсорной панели тремя пальцами вверх и удерживайте."</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Чтобы открыть список всех своих приложений, нажмите клавишу действия."</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Скрыто"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Разблокируйте экран, чтобы посмотреть."</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Контекстные подсказки"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Используйте сенсорную панель, чтобы возвращаться назад"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Для этого проведите тремя пальцами влево или вправо. Чтобы посмотреть другие жесты, нажмите здесь."</string>
diff --git a/packages/SystemUI/res/values-ru/tiles_states_strings.xml b/packages/SystemUI/res/values-ru/tiles_states_strings.xml
index e7ff74d61ce3..8279183345a8 100644
--- a/packages/SystemUI/res/values-ru/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ru/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Отключено"</item>
<item msgid="5908720590832378783">"Включено"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Недоступно"</item>
+ <item msgid="6641673879029894995">"Отключено"</item>
+ <item msgid="5806682401126108403">"Включено"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index eb816b804c68..440b3209e49e 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"බ්ලූටූත් සම්බන්ධිතයි."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"බ්ලූටූත් උපාංග නිරූපකය"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"උපාංග විස්තර වින්‍යාස කිරීමට ක්ලික් කරන්න"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"සියලු උපාංග බැලීමට ක්ලික් කරන්න"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"නව උපාංගය යුගල කිරීමට ක්ලික් කරන්න"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ආදානය"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"ශ්‍රවණාධාරක"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ක්‍රියාත්මක කරමින්…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ඉහළ යෙදුම මඟින් එය පාලනය වන නිසා\nදීප්තිය ගැළපුම් කළ නොහැක"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ඉහළ යෙදුම මඟින් එය පාලනය වන නිසාදීප්තිය ගැළපුම් කළ නොහැක"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ස්වයංක්‍රීය කරකැවීම"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"ස්වයංක්‍රීයව-භ්‍රමණය වන තිරය"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ස්ථානය"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> සංවාද විශේෂාංගවලට සහාය නොදක්වයි"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ප්‍රතිපෝෂණය"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"අස් කරන්න"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"අමුණන ලද ලෙස නොපෙන්වන්න"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"සජීවී යාවත්කාලීන කිරීම් පෙන්වමින්"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"ඇමුණුම් කළ දැනුම්දීම් යෙදුම් වලින් සජීවී තතු පෙන්වන අතර, සෑම විට ම තත්ත්ව තීරුවේ සහ අගුළු තිරයේ දිස් වේ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"මෙම දැනුම්දීම් වෙනස් කළ නොහැක."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"ඇමතුම් දැනුම්දීම් වෙනස් කළ නොහැකිය."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"මෙම දැනුම්දීම් සමූහය මෙහි වින්‍යාස කළ නොහැක"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"බහුකාර්ය"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"දකුණේ යෙදුම සමග බෙදීම් තිරය භාවිතා කරන්න"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"වම් පැත්තේ යෙදුම සමග බෙදීම් තිරය භාවිතා කරන්න"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"සම්පූර්ණ තිරයට මාරු වන්න"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"බෙදුම් තිරය භාවිත කරන අතරතුර දකුණේ හෝ පහළින් ඇති යෙදුමට මාරු වන්න"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"බෙදුම් තිරය භාවිත කරන අතරතුර වමේ හෝ ඉහළ ඇති යෙදුමට මාරු වන්න"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"බෙදුම් තිරය අතරතුර: යෙදුමක් එකකින් තවත් එකක් ප්‍රතිස්ථාපනය කරන්න"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"අඩු ප්‍රමුඛතා දැනුම්දීම් අයිකන පෙන්වන්න"</string>
<string name="other" msgid="429768510980739978">"වෙනත්"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ටයිල් ඉවත් කරන්න"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ටයිල් එක අවසාන ස්ථානයට එක් කරන්න"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ටයිල් ගෙන යන්න"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"මෑත යෙදුම් බලන්න"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"යෙදුම් මාරු කරන්න"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"නිමයි"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"නැවත උත්සාහ කරන්න!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ආපස්සට යන්න"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"ඔබේ ස්පර්ශ පුවරුව මත ඇඟිලි තුනක් භාවිතයෙන් වමට හෝ දකුණට ස්වයිප් කරන්න"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"මෑත යෙදුම් බැලීමට, ඉහළට ස්වයිප් කර ස්පර්ශ පුවරුව මත ඇඟිලි තුනකින් අල්ලාගෙන සිටින්න"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"ඔබේ සියලුම යෙදුම් බැලීමට, ඔබේ යතුරුපුවරුවේ ක්‍රියාකාරී යතුර ඔබන්න"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"නැවත සකස් කරන ලද"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"බැලීමට අගුළු හරින්න"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"සන්දර්භීය අධ්‍යාපනය"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"ආපසු යාමට ඔබේ ස්පර්ශ පුවරුව භාවිත කරන්න"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"ඇඟිලි තුනක් භාවිතයෙන් වමට හෝ දකුණට ස්වයිප් කරන්න. තව ඉංගිත දැන ගැනීමට තට්ටු කරන්න."</string>
diff --git a/packages/SystemUI/res/values-si/tiles_states_strings.xml b/packages/SystemUI/res/values-si/tiles_states_strings.xml
index 710e9aa1893d..9397ca7221e9 100644
--- a/packages/SystemUI/res/values-si/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-si/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"ක්‍රියාවිරහිතයි"</item>
<item msgid="5908720590832378783">"ක්‍රියාත්මකයි"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"නොමැත"</item>
+ <item msgid="6641673879029894995">"ක්‍රියාවිරහිතයි"</item>
+ <item msgid="5806682401126108403">"ක්‍රියාත්මකයි"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index fcb281d3bf59..274c46e7a3de 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth pripojené."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikona zariadenia s rozhraním Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kliknutím nakonfigurujte podrobnosti o zariadení"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Kliknutím zobrazíte všetky zariadenia"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Kliknutím spárujete nové zariadenie"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Percento batérie nie je známe."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Pripojené k zariadeniu <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Pripojené k zariadeniu <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Vstup"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Načúvadlá"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Zapína sa…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Jas sa nedá upraviť, pretože ho \n ovláda horná aplikácia"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Jas sa nedá upraviť, pretože ho ovláda horná aplikácia"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Automatické otáčanie"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Automatické otáčanie obrazovky"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Poloha"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> nepodporuje funkcie konverzácie"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Spätná väzba"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Zavrieť"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Nezobrazovať ako pripnuté"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Zobrazovanie aktualít naživo"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Pripnuté upozornenia zobrazujú aktuálne informácie z aplikácií a vždy sa zobrazujú v stavovom riadku a na uzamknutej obrazovke"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Tieto upozornenia sa nedajú upraviť."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Upozornenia na hovory sa nedajú upraviť."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Túto skupinu upozornení nejde na tomto mieste konfigurovať"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multitasking"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Rozdelenie obrazovky, aktuálna aplikácia vpravo"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Rozdelenie obrazovky, aktuálna aplikácia vľavo"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Prepnutie na celú obrazovku"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Prechod na aplikáciu vpravo alebo dole pri rozdelenej obrazovke"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Prechod na aplikáciu vľavo alebo hore pri rozdelenej obrazovke"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Počas rozdelenej obrazovky: nahradenie aplikácie inou"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Zobraziť ikony upozornení s nízkou prioritou"</string>
<string name="other" msgid="429768510980739978">"Ďalšie"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"odstrániť kartu"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"pridáte kartu na poslednú pozíciu"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Presunúť kartu"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Zobraziť nedávne aplikácie"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Prepínanie aplikácií"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Hotovo"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Skúste to znova."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Späť"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Potiahnite troma prstami na touchpade doľava alebo doprava"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Ak si chcete zobraziť nedávne aplikácie, potiahnite po touchpade troma prstami nahor a pridržte ich."</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Ak si chcete zobraziť všetky aplikácie, stlačte na klávesnici akčný kláves"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Zamaskované"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Zobrazíte odomknutím"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontextová náuka"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Prechádzajte späť pomocou touchpadu"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Potiahnite troma prstami doľava alebo doprava. Viac o gestách sa dozviete klepnutím."</string>
diff --git a/packages/SystemUI/res/values-sk/tiles_states_strings.xml b/packages/SystemUI/res/values-sk/tiles_states_strings.xml
index 83235060a612..3e618846a6c3 100644
--- a/packages/SystemUI/res/values-sk/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sk/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Vypnuté"</item>
<item msgid="5908720590832378783">"Zapnuté"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Nedostupné"</item>
+ <item msgid="6641673879029894995">"Vypnuté"</item>
+ <item msgid="5806682401126108403">"Zapnuté"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index e99906546861..eb1219a06305 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Povezava Bluetooth vzpostavljena."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikona naprave Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kliknite za konfiguriranje podrobnosti o napravi"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Kliknite za ogled vseh naprav"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Kliknite za seznanitev nove naprave"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Konfiguriranje podrobnosti o napravi"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Ogled vseh naprav"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Seznanitev nove naprave"</string>
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Neznan odstotek napolnjenosti baterije."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Povezava vzpostavljena z: <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Vzpostavljena povezava: <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Vhodna naprava"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Slušni aparati"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Vklapljanje …"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Svetlosti ni mogoče prilagoditi, ker jo\n nadzoruje aplikacija na vrhu"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Svetlosti ni mogoče prilagoditi, ker jo nadzoruje aplikacija na vrhu"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Samodejno sukanje"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Samodejno sukanje zaslona"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokacija"</string>
@@ -691,7 +692,7 @@
<string name="screen_pinning_exit" msgid="4553787518387346893">"Aplikacija je odpeta."</string>
<string name="stream_voice_call" msgid="7468348170702375660">"Klic"</string>
<string name="stream_system" msgid="7663148785370565134">"Sistem"</string>
- <string name="stream_ring" msgid="7550670036738697526">"Sprožitev zvonjenja"</string>
+ <string name="stream_ring" msgid="7550670036738697526">"Zvonjenje"</string>
<string name="stream_music" msgid="2188224742361847580">"Predstavnost"</string>
<string name="stream_alarm" msgid="16058075093011694">"Alarm"</string>
<string name="stream_notification" msgid="7930294049046243939">"Obvestilo"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> ne podpira pogovornih funkcij."</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Povratne informacije"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Opusti"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Ne prikaži kot pripeto"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Prikaz sprotnih obvestil"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Pripeta obvestila prikazujejo sprotne podatke iz aplikacij ter so vedno prikazana v vrstici stanja in na zaklenjenem zaslonu"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Za ta obvestila ni mogoče spremeniti nastavitev."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Obvestil o klicih ni mogoče spreminjati."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Te skupine obvestil ni mogoče konfigurirati tukaj"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Večopravilnost"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Uporaba razdeljenega zaslona z aplikacijo na desni"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Uporaba razdeljenega zaslona z aplikacijo na levi"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Preklop na celozaslonski način"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Uporaba celozaslonskega načina"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Uporaba pogleda za namizni računalnik"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Preklop na aplikacijo desno ali spodaj med uporabo razdeljenega zaslona"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Preklop na aplikacijo levo ali zgoraj med uporabo razdeljenega zaslona"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Pri razdeljenem zaslonu: medsebojna zamenjava aplikacij"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Pokaži ikone obvestil z nizko stopnjo prednosti"</string>
<string name="other" msgid="429768510980739978">"Drugo"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"odstranitev ploščice"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"dodajanje ploščice na zadnji položaj"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Premik ploščice"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Ogled nedavnih aplikacij"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Preklop aplikacij"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Končano"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Naprej"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Poskusite znova"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Nazaj"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Na sledilni ploščici s tremi prsti povlecite levo ali desno"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Za ogled nedavnih aplikacij povlecite s tremi prsti navzgor po sledilni ploščici in pridržite"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Za ogled vseh aplikacij pritisnite tipko za dejanja na tipkovnici"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Zakrito"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Odklenite za ogled"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstualno izobraževanje"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Uporaba sledilne ploščice za pomik nazaj"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"S tremi prsti povlecite levo ali desno. Dotaknite se, če želite spoznati več potez."</string>
diff --git a/packages/SystemUI/res/values-sl/tiles_states_strings.xml b/packages/SystemUI/res/values-sl/tiles_states_strings.xml
index d644038f9a8d..814680254a8c 100644
--- a/packages/SystemUI/res/values-sl/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sl/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Izklopljeno"</item>
<item msgid="5908720590832378783">"Vklopljeno"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Ni na voljo"</item>
+ <item msgid="6641673879029894995">"Izklopljeno"</item>
+ <item msgid="5806682401126108403">"Vklopljeno"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index 7e2b6980b61c..ea1f3aaf0538 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Pajisja është lidhur me \"bluetooth\"."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Ikona e pajisjes me Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Kliko për të konfiguruar detajet e pajisjes"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Kliko për të shikuar të gjitha pajisjet"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Kliko për të çiftuar një pajisje të re"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Hyrja"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Aparatet e dëgjimit"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Po aktivizohet…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ndriçimi nuk mund të rregullohet pasi\n po kontrollohet nga aplikacioni i sipërm"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ndriçimi nuk mund të rregullohet pasi po kontrollohet nga aplikacioni i sipërm"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rrotullim automatik"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rrotullimi automatik i ekranit"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Vendndodhja"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> nuk mbështet veçoritë e bisedës"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Koment"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Hiq"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Mos shfaq si të gozhduar"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Po shfaqen përditësimet drejtpërdrejt"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Njoftimet e gozhduara shfaqin informacione të drejtpërdrejta nga aplikacionet dhe shfaqen gjithmonë në shiritin e statusit dhe ekranin e kyçjes"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Këto njoftime nuk mund të modifikohen."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Njoftimet e telefonatave nuk mund të modifikohen."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Ky grup njoftimesh nuk mund të konfigurohet këtu"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Kryerja e shumë detyrave"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Përdor ekranin e ndarë me aplikacionin në të djathtë"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Përdor ekranin e ndarë me aplikacionin në të majtë"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Kalo në ekran të plotë"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Kalo tek aplikacioni djathtas ose poshtë kur përdor ekranin e ndarë"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Kalo tek aplikacioni në të majtë ose sipër kur përdor ekranin e ndarë"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Gjatë ekranit të ndarë: zëvendëso një aplikacion me një tjetër"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Shfaq ikonat e njoftimeve me përparësi të ulët"</string>
<string name="other" msgid="429768510980739978">"Të tjera"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"hiq pllakëzën"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"shtuar pllakëzën në pozicionin e fundit"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Zhvendos pllakëzën"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Shiko aplikacionet e fundit"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Ndërro aplikacionet"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"U krye"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Provo përsëri!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Kthehu prapa"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Rrëshqit shpejt majtas ose djathtas duke përdorur tre gishta në bllokun me prekje"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Për aplikacionet e fundit, rrëshqit shpejt lart dhe mbaj shtypur me tre gishta në bllokun me prekje"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Për të shikuar të gjitha aplikacionet, shtyp tastin e veprimit në tastierë"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Redaktuar"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Shkyçe për ta parë"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Edukimi kontekstual"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Përdor bllokun me prekje për t\'u kthyer prapa"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Rrëshqit shpejt majtas ose djathtas duke përdorur tre gishta. Trokit për të mësuar më shumë gjeste."</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 1e44e0c2799d..eac07123e911 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth је прикључен."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Икона Bluetooth уређаја"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Кликните да бисте конфигурисали детаље о уређају"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Кликните да бисте видели све уређаје"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Кликните да бисте упарили нов уређај"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>. Конфигуришите детаље о уређају"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"Погледајте све уређаје"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"Упарите нови уређај"</string>
<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>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Унос"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слушни апарати"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Укључује се..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Не можете да прилагодите осветљеност јер је\n контролише апликација у врху"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Не можете да прилагодите осветљеност јер је контролише апликација у врху"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Аутоматска ротација"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Аутоматско ротирање екрана"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Локација"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> не подржава функције конверзације"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Повратне информације"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Одбаци"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Не приказуј као закачено"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Приказују се новости уживо"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Закачена обавештења приказују информације уживо из апликација и увек се појављују на статусној траци и закључаном екрану"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ова обавештења не могу да се мењају."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Обавештења о позивима не могу да се мењају."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Ова група обавештења не може да се конфигурише овде"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Обављање више задатака истовремено"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Користи подељени екран са апликацијом с десне стране"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Користи подељени екран са апликацијом с леве стране"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Пређи на режим преко целог екрана"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"Користи приказ преко целог екрана"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"Користи приказ за рачунаре"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Пређи у апликацију здесна или испод док је подељен екран"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Пређите у апликацију слева или изнад док користите подељени екран"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"У режиму подељеног екрана: замена једне апликације другом"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Прикажи иконе обавештења ниског приоритета"</string>
<string name="other" msgid="429768510980739978">"Друго"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"уклонили плочицу"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"додали плочицу на последњу позицију"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Преместите плочицу"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Прикажи недавно коришћене апликације"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Пређи на другу апликацију"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Готово"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"Даље"</string>
<string name="gesture_error_title" msgid="469064941635578511">"Пробајте поново."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Назад"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Превуците улево или удесно са три прста на тачпеду"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Да бисте прегледали недавне апликације, превуците нагоре и задржите са три прста на тачпеду"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Да бисте погледали све апликације, притисните тастер радњи на тастатури"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Редиговано"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Откључајте за приказ"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Контекстуално образовање"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Користите тачпед за враћање назад"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Превуците улево или удесно са три прста. Додирните да бисте видели више покрета."</string>
diff --git a/packages/SystemUI/res/values-sr/tiles_states_strings.xml b/packages/SystemUI/res/values-sr/tiles_states_strings.xml
index e1bd7b1740da..df9e574fe053 100644
--- a/packages/SystemUI/res/values-sr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sr/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Искључено"</item>
<item msgid="5908720590832378783">"Укључено"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Недоступно"</item>
+ <item msgid="6641673879029894995">"Искључено"</item>
+ <item msgid="5806682401126108403">"Укључено"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index d613922318db..dfb4e00508c1 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth ansluten."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Enhetsikon för Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Klicka för att konfigurera enhetsinformation"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Klicka för att se alla enheter"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Klicka för att parkoppla en ny enhet"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Ingång"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Hörapparater"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Aktiverar …"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Det går inte att justera ljusstyrkan eftersom den\n styrs av den översta appen"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Det går inte att justera ljusstyrkan eftersom den styrs av den översta appen"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Rotera automatiskt"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Rotera skärmen automatiskt"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Plats"</string>
@@ -506,7 +510,7 @@
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Svep åt vänster för att börja med gruppguiden"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Anpassa"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Ignorera"</string>
- <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"Lägg till, ta bort och ordna om dina widgetar i det här rummet"</string>
+ <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"Lägg till, ta bort och ordna om dina widgetar här"</string>
<string name="cta_label_to_open_widget_picker" msgid="3874946756976360699">"Lägg till fler widgetar"</string>
<string name="popup_on_dismiss_cta_tile_text" msgid="8292501780996070019">"Tryck länge för att anpassa widgetar"</string>
<string name="button_to_configure_widgets_text" msgid="4191862850185256901">"Anpassa widgetar"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> har inte stöd för konversationsfunktioner"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Stäng"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Visa inte som fäst"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Visar liveuppdateringar"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Fästa aviseringar visar liveinformation från appar och visas alltid i statusfältet och på låsskärmen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Det går inte att ändra de här aviseringarna."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Det går inte att ändra samtalsaviseringarna."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Den här aviseringsgruppen kan inte konfigureras här"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multikörning"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Använd delad skärm med appen till höger"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Använd delad skärm med appen till vänster"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Byt till helskärm"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Byt till appen till höger eller nedanför när du använder delad skärm"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Byt till appen till vänster eller ovanför när du använder delad skärm"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Med delad skärm: ersätt en app med en annan"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Visa ikoner för aviseringar med låg prioritet"</string>
<string name="other" msgid="429768510980739978">"Annat"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ta bort ruta"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"lägg till en ruta på den sista platsen"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Flytta ruta"</string>
@@ -1377,7 +1383,7 @@
<string name="bt_le_audio_broadcast_dialog_different_output" msgid="7885102097302562674">"Byt ljudutgång"</string>
<string name="bt_le_audio_broadcast_dialog_unknown_name" msgid="3791472237793443044">"Okänt"</string>
<string name="dream_time_complication_12_hr_time_format" msgid="4691197486690291529">"h.mm"</string>
- <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk.mm"</string>
+ <string name="dream_time_complication_24_hr_time_format" msgid="6248280719733640813">"kk:mm"</string>
<string name="log_access_confirmation_title" msgid="4843557604739943395">"Vill du tillåta att <xliff:g id="LOG_ACCESS_APP_NAME">%s</xliff:g> får åtkomst till alla enhetsloggar?"</string>
<string name="log_access_confirmation_allow" msgid="752147861593202968">"Tillåt engångsåtkomst"</string>
<string name="log_access_confirmation_deny" msgid="2389461495803585795">"Tillåt inte"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Se de senaste apparna"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Byta app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Klar"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Försök igen!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Tillbaka"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Svep åt vänster eller höger med tre fingrar på styrplattan"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Svep uppåt på styrplattan med tre fingrar och håll kvar för att se nyligen använda appar"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Tryck på åtgärdstangenten på tangentbordet för att se alla appar"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Anonymiserad"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Lås upp för att visa"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontextuell utbildning"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Använd styrplattan för att gå tillbaka"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Svep åt vänster eller höger med tre fingrar. Tryck för att lära dig fler rörelser."</string>
diff --git a/packages/SystemUI/res/values-sv/tiles_states_strings.xml b/packages/SystemUI/res/values-sv/tiles_states_strings.xml
index 37d757e93f49..76822d073668 100644
--- a/packages/SystemUI/res/values-sv/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sv/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Av"</item>
<item msgid="5908720590832378783">"På"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Inte tillgänglig"</item>
+ <item msgid="6641673879029894995">"Av"</item>
+ <item msgid="5806682401126108403">"På"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 33d8511edf96..c096e4177a81 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth imeunganishwa."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Aikoni ya Kifaa chenye Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Bofya ili uweke mipangilio ya maelezo ya kifaa"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Bofya ili uone vifaa vyote"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Bofya ili uoanishe kifaa kipya"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Vifaa vya kuingiza sauti"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Visaidizi vya kusikia"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Inawasha..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Imeshindwa kurekebisha mwangaza kwa sababu\n inadhibitiwa na programu inayotumika"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Imeshindwa kurekebisha mwangaza kwa sababu inadhibitiwa na programu inayotumika"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Zungusha kiotomatiki"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Skrini ijizungushe kiotomatiki"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Mahali"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> haitumii vipengele vya mazungumzo"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Maoni"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Ondoa"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Usionyeshe kama zilizobandikwa"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Inaonyesha Taarifa za Moja kwa Moja"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Arifa zilizobandikwa zinaonyesha maelezo ya moja kwa moja kutoka kwenye programu na huonekana kwenye sehemu ya arifa na skrini iliyofungwa"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Arifa hizi haziwezi kubadilishwa."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Arifa za simu haziwezi kubadilishwa."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Kikundi hiki cha arifa hakiwezi kuwekewa mipangilio hapa"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Majukumu mengi"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Tumia hali ya kugawa skrini na programu ya sasa iwe upande wa kulia"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Tumia hali ya kugawa skrini na programu ya sasa iwe upande wa kushoto"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Badilisha utumie skrini nzima"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Badilisha ili uende kwenye programu iliyo kulia au chini unapotumia hali ya kugawa skrini"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Badilisha uende kwenye programu iliyo kushoto au juu unapotumia hali ya kugawa skrini"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Ukigawanya skrini: badilisha kutoka programu moja hadi nyingine"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Onyesha aikoni za arifa zisizo muhimu"</string>
<string name="other" msgid="429768510980739978">"Nyingine"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ondoa kigae"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"weka kigae kwenye nafasi ya mwisho"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Hamisha kigae"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Angalia programu za hivi majuzi"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Badilisha programu"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Nimemaliza"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Jaribu tena!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Rudi nyuma"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Telezesha vidole vitatu kushoto au kulia kwenye padi yako ya kugusa"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Telezesha vidole vitatu juu na ushikilie kwenye padi ya kugusa ili uangalie programu za hivi majuzi"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Bonyeza kitufe cha vitendo kwenye kibodi yako ili uangalie programu zako zote"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Maandishi yameondolewa"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Fungua ili uone"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Elimu inayolingana na muktadha"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Kutumia padi yako ya kugusa ili kurudi nyuma"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Telezesha vidole vitatu kulia au kushoto. Gusa ili upate maelezo kuhusu miguso zaidi."</string>
diff --git a/packages/SystemUI/res/values-sw/tiles_states_strings.xml b/packages/SystemUI/res/values-sw/tiles_states_strings.xml
index fae42c3980b0..4070260456fe 100644
--- a/packages/SystemUI/res/values-sw/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-sw/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Limezimwa"</item>
<item msgid="5908720590832378783">"Limewashwa"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Hakipatikani"</item>
+ <item msgid="6641673879029894995">"Kimezimwa"</item>
+ <item msgid="5806682401126108403">"Kimewashwa"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index aa312c713a5d..342798f17055 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"புளூடூத் இணைக்கப்பட்டது."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"புளூடூத் சாதன ஐகான்"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"சாதன விவரத்தை உள்ளமைக்க கிளிக் செய்யலாம்"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"அனைத்துச் சாதனங்களையும் பார்க்க கிளிக் செய்யவும்"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"புதிய சாதனத்தை இணைக்க கிளிக் செய்யவும்"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"உள்ளீடு"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"செவித்துணைக் கருவி"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ஆன் செய்கிறது…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"சிறந்த ஆப்ஸால் ஒளிர்வு கட்டுப்படுத்தப்படுவதால்\n இதைச் சரிசெய்ய முடியவில்லை"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"சிறந்த ஆப்ஸால் ஒளிர்வு கட்டுப்படுத்தப்படுவதால் இதைச் சரிசெய்ய முடியவில்லை"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"தானாகச் சுழற்று"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"திரையைத் தானாகச் சுழற்று"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"இருப்பிடம்"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"உரையாடல் அம்சங்களை <xliff:g id="APP_NAME">%1$s</xliff:g> ஆதரிக்காது"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"கருத்து"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"மூடுக"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"பின் செய்யப்பட்டதாகக் காட்டாதே"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"நேரலை அறிவிப்புகளைக் காட்டுகிறது"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"பின் செய்யப்பட்ட அறிவிப்புகள் ஆப்ஸிலிருந்து நேரலைத் தகவல்களைக் காட்டும், அத்துடன் அவை எப்போதும் நிலைப் பட்டியிலும் பூட்டுத் திரையிலும் காட்டப்படும்"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"இந்த அறிவிப்புகளை மாற்ற இயலாது."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"அழைப்பு அறிவிப்புகளை மாற்ற முடியாது."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"இந்த அறிவுப்புக் குழுக்களை இங்கே உள்ளமைக்க இயலாது"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"பல வேலைகளைச் செய்தல்"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ஆப்ஸ் வலதுபுறம் வரும்படி திரைப் பிரிப்பைப் பயன்படுத்துதல்"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ஆப்ஸ் இடதுபுறம் வரும்படி திரைப் பிரிப்பைப் பயன்படுத்துதல்"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"முழுத்திரைக்கு மாற்றுதல்"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"திரைப் பிரிப்பைப் பயன்படுத்தும்போது வலது/கீழ் உள்ள ஆப்ஸுக்கு மாறுதல்"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"திரைப் பிரிப்பைப் பயன்படுத்தும்போது இடது/மேலே உள்ள ஆப்ஸுக்கு மாறுதல்"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"திரைப் பிரிப்பின்போது: ஓர் ஆப்ஸுக்குப் பதிலாக மற்றொன்றை மாற்றுதல்"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"குறைந்த முன்னுரிமை உள்ள அறிவிப்பு ஐகான்களைக் காட்டு"</string>
<string name="other" msgid="429768510980739978">"மற்றவை"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"கட்டத்தை அகற்றும்"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"கடைசி இடத்தில் கட்டத்தைச் சேர்க்கலாம்"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"கட்டத்தை நகர்த்து"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"சமீபத்திய ஆப்ஸைக் காட்டுதல்"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ஆப்ஸுக்கிடையில் மாறுங்கள்"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"முடிந்தது"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"மீண்டும் முயலவும்!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"பின்செல்"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"உங்கள் டச்பேடில் மூன்று விரல்களால் இடது அல்லது வலதுபுறம் ஸ்வைப் செய்யவும்"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"சமீபத்திய ஆப்ஸைப் பார்க்க, டச்பேடில் மூன்று விரல்களால் மேல்நோக்கி ஸ்வைப் செய்து பிடிக்கவும்"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"அனைத்து ஆப்ஸையும் பார்க்க, உங்கள் கீபோர்டில் உள்ள ஆக்ஷன் பட்டனை அழுத்தவும்"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"அர்த்தம் புரியாதபடி திருத்தப்பட்டது"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"பார்ப்பதற்கு அன்லாக் செய்யவும்"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"சூழல் சார்ந்த கல்வி"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"பின்செல்ல, உங்கள் டச்பேடைப் பயன்படுத்துங்கள்"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"மூன்று விரல்களால் இடது அல்லது வலதுபுறம் ஸ்வைப் செய்யவும். சைகைகள் குறித்து மேலும் அறிய தட்டவும்."</string>
diff --git a/packages/SystemUI/res/values-ta/tiles_states_strings.xml b/packages/SystemUI/res/values-ta/tiles_states_strings.xml
index b09b17f40cd3..dc1c514c559d 100644
--- a/packages/SystemUI/res/values-ta/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ta/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"முடக்கப்பட்டுள்ளது"</item>
<item msgid="5908720590832378783">"இயக்கப்பட்டுள்ளது"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"கிடைக்கவில்லை"</item>
+ <item msgid="6641673879029894995">"முடக்கப்பட்டுள்ளது"</item>
+ <item msgid="5806682401126108403">"இயக்கப்பட்டுள்ளது"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index fc5361b54628..6f4619f7bada 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"బ్లూటూత్ కనెక్ట్ చేయబడింది."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"బ్లూటూత్ పరికర చిహ్నం"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"పరికర వివరాలను కాన్ఫిగర్ చేయడానికి క్లిక్ చేయండి"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"అన్ని పరికరాలను చూడటానికి క్లిక్ చేయండి"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"కొత్త పరికరాన్ని పెయిర్ చేయడానికి క్లిక్ చేయండి"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ఇన్‌పుట్"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"వినికిడి పరికరాలు"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"ఆన్ చేస్తోంది…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ఇది టాప్ యాప్ ద్వారా\n కంట్రోల్ చేయబడుతున్నందున బ్రైట్‌నెస్‌ను సర్దుబాటు చేయడం సాధ్యం కాదు"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ఇది టాప్ యాప్ ద్వారా కంట్రోల్ చేయబడుతున్నందున బ్రైట్‌నెస్‌ను సర్దుబాటు చేయడం సాధ్యం కాదు"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"ఆటో-రొటేట్‌"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"స్క్రీన్ ఆటో-రొటేట్‌"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"లొకేషన్"</string>
@@ -506,7 +510,7 @@
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"కమ్యూనల్ ట్యుటోరియల్‌ను ప్రారంభించడానికి ఎడమ వైపునకు స్వైప్ చేయండి"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"అనుకూలంగా మార్చండి"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"విస్మరించండి"</string>
- <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"ఈ స్పేస్‌లో మీ విడ్జెట్‌లను జోడించండి, తీసివేయండి, క్రమపద్ధతిలో అమర్చండి"</string>
+ <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"ఈ స్పేస్‌లోని విడ్జెట్‌ల జోడింపు, తీసివేత, అమరిక"</string>
<string name="cta_label_to_open_widget_picker" msgid="3874946756976360699">"మరిన్ని విడ్జెట్‌లను జోడించండి"</string>
<string name="popup_on_dismiss_cta_tile_text" msgid="8292501780996070019">"విడ్జెట్‌లను అనుకూలీకరించడానికి, నొక్కి, ఉంచండి"</string>
<string name="button_to_configure_widgets_text" msgid="4191862850185256901">"విడ్జెట్‌లను అనుకూలంగా మార్చండి"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> సంభాషణ ఫీచర్‌లను సపోర్ట్ చేయదు"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ఫీడ్‌బ్యాక్"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"విస్మరించండి"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"పిన్ చేసినట్లు చూపవద్దు"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"లైవ్ అప్‌డేట్‌లు చూపబడుతున్నాయి"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"పిన్ చేయబడిన నోటిఫికేషన్‌లు, యాప్‌ల నుండి ఎప్పటికప్పుడు తాజా సమాచారాన్ని చూపిస్తాయి, ఇంకా ఇవి ఎల్లప్పుడూ స్టేటస్ బార్, లాక్ స్క్రీన్‌లో కనిపిస్తాయి"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ఈ నోటిఫికేషన్‌లను ఎడిట్ చేయడం వీలుపడదు."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"కాల్ నోటిఫికేషన్‌లను ఎడిట్ చేయడం సాధ్యం కాదు."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"ఈ నోటిఫికేషన్‌ల గ్రూప్‌ను ఇక్కడ కాన్ఫిగర్ చేయలేము"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"మల్టీ-టాస్కింగ్"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"కుడి వైపు ప్రస్తుత యాప్‌తో స్ప్లిట్ స్క్రీన్‌ను ఉపయోగించండి"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ఎడమ వైపు ప్రస్తుత యాప్‌తో స్ప్లిట్ స్క్రీన్‌ను ఉపయోగించండి"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"ఫుల్ స్క్రీన్‌కు మారండి"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"స్ప్లిట్ స్క్రీన్ ఉపయోగిస్తున్నప్పుడు కుడి లేదా కింద యాప్‌నకు మారండి"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"స్ప్లిట్ స్క్రీన్ ఉపయోగిస్తున్నప్పుడు ఎడమ లేదా పైన యాప్‌నకు మారండి"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"స్ప్లిట్ స్క్రీన్ సమయంలో: ఒక దాన్నుండి మరో దానికి యాప్ రీప్లేస్ చేయండి"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"తక్కువ ప్రాధాన్యత నోటిఫికేషన్ చిహ్నాలను చూపించు"</string>
<string name="other" msgid="429768510980739978">"ఇతరం"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"టైల్‌ను తీసివేయండి"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"చివరి పొజిషన్‌కు టైల్‌ను జోడించండి"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"టైల్‌ను తరలించండి"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"ఇటీవలి యాప్‌లను చూడండి"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"యాప్‌ల మధ్య మారండి"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"పూర్తయింది"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"మళ్లీ ట్రై చేయండి!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"వెనుకకు"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"మీ టచ్‌ప్యాడ్‌లో మూడు వేళ్లను ఉపయోగించి ఎడమ వైపునకు లేదా కుడి వైపునకు స్వైప్ చేయండి"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"ఇటీవలి యాప్‌లను చూడటానికి, టచ్‌ప్యాడ్‌లో మూడు వేళ్లతో పైకి స్వైప్ చేసి, హోల్డ్ చేయండి"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"మీ యాప్‌లన్నింటినీ చూడటానికి, మీ కీబోర్డ్‌లో యాక్షన్ కీని నొక్కండి"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"దాచిపెట్టినది"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"చూడటానికి అన్‌లాక్ చేయండి"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"సందర్భోచిత విద్య"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"వెనుకకు వెళ్లడానికి మీ టచ్‌ప్యాడ్‌ను ఉపయోగించండి"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"మూడు వేళ్లతో ఎడమ / కుడి వైపునకు స్వైప్ చేయండి. మరిన్ని సంజ్ఞల గురించి తెలుసుకోవడానికి ట్యాప్ చేయండి."</string>
diff --git a/packages/SystemUI/res/values-te/tiles_states_strings.xml b/packages/SystemUI/res/values-te/tiles_states_strings.xml
index 7562aaec0118..d118429e7c55 100644
--- a/packages/SystemUI/res/values-te/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-te/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"ఆఫ్‌లో ఉంది"</item>
<item msgid="5908720590832378783">"ఆన్‌లో ఉంది"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"అందుబాటులో లేదు"</item>
+ <item msgid="6641673879029894995">"ఆఫ్‌లో ఉంది"</item>
+ <item msgid="5806682401126108403">"ఆన్‌లో ఉంది"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 873635d6add5..0b314f49c121 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"เชื่อมต่อบลูทูธแล้ว"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"ไอคอนอุปกรณ์บลูทูธ"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"คลิกเพื่อกำหนดค่ารายละเอียดอุปกรณ์"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"คลิกเพื่อดูอุปกรณ์ทั้งหมด"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"คลิกเพื่อจับคู่อุปกรณ์ใหม่"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g> กำหนดค่ารายละเอียดอุปกรณ์"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"ดูอุปกรณ์ทั้งหมด"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"จับคู่อุปกรณ์ใหม่"</string>
<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>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"อินพุต"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"เครื่องช่วยฟัง"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"กำลังเปิด..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ปรับความสว่างไม่ได้เนื่องจาก\nควบคุมโดยแอปที่อยู่ด้านบน"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"ปรับความสว่างไม่ได้เนื่องจากควบคุมโดยแอปที่อยู่ด้านบน"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"หมุนอัตโนมัติ"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"หมุนหน้าจออัตโนมัติ"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"ตำแหน่ง"</string>
@@ -506,7 +507,7 @@
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ปัดไปทางซ้ายเพื่อเริ่มบทแนะนำส่วนกลาง"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ปรับแต่ง"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ปิด"</string>
- <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"เพิ่ม นำออก และจัดลำดับวิดเจ็ตในพื้นที่นี้ใหม่"</string>
+ <string name="cta_label_to_edit_widget" msgid="6496885074209203756">"เพิ่ม นำออก และจัดลำดับวิด⁠เจ็ตในพื้นที่นี้ใหม่"</string>
<string name="cta_label_to_open_widget_picker" msgid="3874946756976360699">"เพิ่มวิดเจ็ตอีก"</string>
<string name="popup_on_dismiss_cta_tile_text" msgid="8292501780996070019">"กดค้างเพื่อปรับแต่งวิดเจ็ต"</string>
<string name="button_to_configure_widgets_text" msgid="4191862850185256901">"ปรับแต่งวิดเจ็ต"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ไม่รองรับฟีเจอร์การสนทนา"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"ความคิดเห็น"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"ปิด"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"ไม่แสดงเป็นรายการที่ปักหมุด"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"กำลังแสดงข้อมูลอัปเดตแบบเรียลไทม์"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"การแจ้งเตือนที่ปักหมุดไว้จะแสดงข้อมูลแบบเรียลไทม์จากแอป และจะปรากฏในแถบสถานะและหน้าจอล็อกเสมอ"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"แก้ไขการแจ้งเตือนเหล่านี้ไม่ได้"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"แก้ไขการแจ้งเตือนสายเรียกเข้าไม่ได้"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"การแจ้งเตือนกลุ่มนี้กำหนดค่าที่นี่ไม่ได้"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"การทํางานหลายอย่างพร้อมกัน"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"ใช้โหมดแยกหน้าจอโดยให้แอปอยู่ด้านขวา"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"ใช้โหมดแยกหน้าจอโดยให้แอปอยู่ด้านซ้าย"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"เปลี่ยนเป็นแบบเต็มหน้าจอ"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"ใช้โหมดเต็มหน้าจอ"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"ใช้มุมมองบนเดสก์ท็อป"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"เปลี่ยนไปใช้แอปทางด้านขวาหรือด้านล่างขณะใช้โหมดแยกหน้าจอ"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"เปลี่ยนไปใช้แอปทางด้านซ้ายหรือด้านบนขณะใช้โหมดแยกหน้าจอ"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"ระหว่างใช้โหมดแยกหน้าจอ: เปลี่ยนแอปหนึ่งเป็นอีกแอปหนึ่ง"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"แสดงไอคอนการแจ้งเตือนลำดับความสำคัญต่ำ"</string>
<string name="other" msgid="429768510980739978">"อื่นๆ"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"นำชิ้นส่วนออก"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"เพิ่มการ์ดไปยังตำแหน่งสุดท้าย"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ย้ายชิ้นส่วน"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"ดูแอปล่าสุด"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"เปลี่ยนแอป"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"เสร็จสิ้น"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"ถัดไป"</string>
<string name="gesture_error_title" msgid="469064941635578511">"ลองอีกครั้งนะ"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"ย้อนกลับ"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"ใช้ 3 นิ้วปัดไปทางซ้ายหรือขวาบนทัชแพด"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"หากต้องการดูแอปล่าสุด ให้ใช้ 3 นิ้วปัดขึ้นแล้วค้างไว้บนทัชแพด"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"หากต้องการดูแอปทั้งหมด ให้กดปุ่มดำเนินการบนแป้นพิมพ์"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"ปกปิดไว้"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"ปลดล็อกเพื่อดู"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"การศึกษาตามบริบท"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"ใช้ทัชแพดเพื่อย้อนกลับ"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"ใช้ 3 นิ้วปัดไปทางซ้ายหรือขวา แตะเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับท่าทางสัมผัสต่างๆ"</string>
diff --git a/packages/SystemUI/res/values-th/tiles_states_strings.xml b/packages/SystemUI/res/values-th/tiles_states_strings.xml
index 6d360367fac7..9fba3bdd9d6b 100644
--- a/packages/SystemUI/res/values-th/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-th/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"ปิด"</item>
<item msgid="5908720590832378783">"เปิด"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"ไม่พร้อมใช้งาน"</item>
+ <item msgid="6641673879029894995">"ปิด"</item>
+ <item msgid="5806682401126108403">"เปิด"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index e6aa410c269b..f5a7fde61ae8 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Nakakonekta ang Bluetooth."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Icon ng Bluetooth device"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"I-click para i-configure ang detalye ng device"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"I-click para tingnan ang lahat ng device"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"I-click para magpares ng bagong device"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Hindi alam ang porsyento ng baterya."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Nakakonekta sa <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Nakakonekta sa <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Input"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Mga hearing aid"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Ino-on…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Hindi ma-adjust ang liwanag dahil\n kinokontrol ito ng nangingibabaw na app"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Hindi ma-adjust ang liwanag dahil kinokontrol ito ng nangingibabaw na app"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"I-auto rotate"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Awtomatikong i-rotate ang screen"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Lokasyon"</string>
@@ -623,7 +627,7 @@
<string name="quick_settings_disclosure_management" msgid="5515296598440684962">"Pagmamay-ari ng iyong organisasyon ang device na ito"</string>
<string name="quick_settings_disclosure_named_management" msgid="3476472755775165827">"Pagmamay-ari ng <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ang device na ito"</string>
<string name="quick_settings_disclosure_management_vpns" msgid="929181757984262902">"Pag-aari ng organisasyon mo ang device na ito at nakakonekta ito sa internet sa pamamagitan ng VPN"</string>
- <string name="quick_settings_disclosure_named_management_vpns" msgid="3312645578322079185">"Pagmamay-ari ng <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ang device na ito at nakakoenekta ito sa internet sa pamamagitan ng mga VPN"</string>
+ <string name="quick_settings_disclosure_named_management_vpns" msgid="3312645578322079185">"Pagmamay-ari ng <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ang device na ito at nakakonekta ito sa internet sa pamamagitan ng mga VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Maaaring sumubaybay ang iyong organisasyon ng trapiko sa network sa profile sa trabaho mo"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"Maaaring subaybayan ng <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ang trapiko sa network sa iyong profile sa trabaho"</string>
<string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Nakikita ng IT admin ang aktibidad sa network"</string>
@@ -808,12 +812,9 @@
<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>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Feedback"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"I-dismiss"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Huwag ipakita bilang naka-pin"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Ipinapakita ang Mga Live na Update"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Nagpapakita ang mga naka-pin na notification ng live na impormasyon mula sa mga app, at palagi itong nasa status bar at lock screen"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Hindi puwedeng baguhin ang mga notification na ito."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Hindi mabago ang mga notification ng tawag."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Hindi mako-configure dito ang pangkat na ito ng mga notification"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Pag-multitask"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Gumamit ng split screen nang nasa kanan ang app"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Gumamit ng split screen nang nasa kaliwa ang app"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Lumipat sa full screen"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Lumipat sa app sa kanan o ibaba habang ginagamit ang split screen"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Lumipat sa app sa kaliwa o itaas habang ginagamit ang split screen"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Habang nasa split screen: magpalit-palit ng app"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Ipakita ang mga icon ng notification na may mababang priority"</string>
<string name="other" msgid="429768510980739978">"Iba pa"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"alisin ang tile"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"magdagdag ng tile sa huling posisyon"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Ilipat ang tile"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Tingnan ang mga kamakailang app"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Lumipat ng app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Tapos na"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Subukan ulit!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Bumalik"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Mag-swipe pakaliwa o pakanan gamit ang tatlong daliri sa iyong touchpad"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Para tingnan ang kamakailang app, mag-swipe pataas at i-hold gamit ang tatlong daliri sa touchpad"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Para tingnan ang lahat ng iyong app, pindutin ang action key sa keyboard mo"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Na-redact"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"I-unlock para tingnan"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Edukasyon ayon sa konteksto"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Gamitin ang iyong touchpad para bumalik"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Mag-swipe pakaliwa o pakanan gamit ang tatlong daliri. I-tap para matuto pa tungkol sa mga galaw."</string>
diff --git a/packages/SystemUI/res/values-tl/tiles_states_strings.xml b/packages/SystemUI/res/values-tl/tiles_states_strings.xml
index 112c0bf11e73..03cca6df05bd 100644
--- a/packages/SystemUI/res/values-tl/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-tl/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Naka-off"</item>
<item msgid="5908720590832378783">"Naka-on"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Hindi available"</item>
+ <item msgid="6641673879029894995">"Naka-off"</item>
+ <item msgid="5806682401126108403">"Naka-on"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 05fc1f23a24c..dca7381944be 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth bağlandı."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth cihaz simgesi"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Cihaz ayrıntılarını yapılandırmak için tıklayın"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Tüm cihazları görmek için tıklayın"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Yeni cihaz eşlemek için tıklayın"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Giriş"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"İşitme cihazları"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Açılıyor…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Parlaklık ayarlanamıyor, çünkü bu özellik\n en üstteki uygulama tarafından kontrol ediliyor"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Parlaklık ayarlanamıyor, çünkü bu özellik en üstteki uygulama tarafından kontrol ediliyor"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Otomatik döndür"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Ekranı otomatik döndür"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Konum"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g>, sohbet özelliklerini desteklemiyor"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Geri bildirim"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Kapat"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Sabitlenmiş olarak gösterme"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Canlı haberlerin gösterilmesi"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Sabitlenmiş bildirimler, uygulamalardan gelen canlı bilgileri gösterir ve durum çubuğu ile kilit ekranında her zaman görünür"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirimler değiştirilemez."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Arama bildirimleri değiştirilemez."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Bu bildirim grubu burada yapılandırılamaz"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Çoklu görev"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Sağdaki uygulamayla birlikte bölünmüş ekranı kullan"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Soldaki uygulamayla birlikte bölünmüş ekranı kullan"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Tam ekran moduna geç"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Bölünmüş ekran kullanırken sağdaki veya alttaki uygulamaya geçiş yap"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Bölünmüş ekran kullanırken soldaki veya üstteki uygulamaya geçiş yapın"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Bölünmüş ekran etkinken: Bir uygulamayı başkasıyla değiştir"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Düşük öncelikli bildirim simgelerini göster"</string>
<string name="other" msgid="429768510980739978">"Diğer"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"Kutuyu kaldırmak için"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"kutuyu son konuma ekleyin"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Kutuyu taşı"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Son uygulamaları görüntüle"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Uygulamalar arasında geçiş yapma"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Bitti"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Tekrar deneyin."</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Geri dön"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Dokunmatik alanda üç parmağınızla sola veya sağa kaydırın"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Son uygulamaları görüntülemek için dokunmatik alanda üç parmağınızla yukarı kaydırıp basılı tutun"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Tüm uygulamalarınızı görüntülemek için klavyenizdeki eylem tuşuna basın"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Çıkartıldı"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Görüntülemek için kilidi açın"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Bağlama dayalı eğitim"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Geri dönmek için dokunmatik alanınızı kullanın"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Üç parmağınızla sola veya sağa kaydırın. Daha fazla hareket öğrenmek için dokunun."</string>
diff --git a/packages/SystemUI/res/values-tr/tiles_states_strings.xml b/packages/SystemUI/res/values-tr/tiles_states_strings.xml
index f3c51c093c4a..7c17ace16d10 100644
--- a/packages/SystemUI/res/values-tr/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-tr/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Kapalı"</item>
<item msgid="5908720590832378783">"Açık"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Yok"</item>
+ <item msgid="6641673879029894995">"Kapalı"</item>
+ <item msgid="5806682401126108403">"Açık"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 0b0d6dc15c62..4f5c181e947b 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth під’єднано."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Значок пристрою з Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Натисніть, щоб змінити налаштування пристрою"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Натисніть, щоб переглянути всі пристрої"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Натисніть, щоб підключити новий пристрій"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Джерело сигналу"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Слухові апарати"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Увімкнення…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Не вдається змінити яскравість, оскільки\n нею керує основний додаток"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Не вдається змінити яскравість, оскільки нею керує основний додаток"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Автообертання"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Автоматично обертати екран"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Геодані"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> не підтримує функції розмов"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Надіслати відгук"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Закрити"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Не показувати як закріплені"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Показ інформації в реальному часі"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Закріплені сповіщення з актуальною інформацією від додатків. Завжди показуються в рядку стану й на заблокованому екрані."</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Ці сповіщення не можна змінити."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Сповіщення про виклик не можна змінити."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Цю групу сповіщень не можна налаштувати тут"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Багатозадачність"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Розділити екран і показувати додаток праворуч"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Розділити екран і показувати додаток ліворуч"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Перейти в повноекранний режим"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Перейти до додатка праворуч або внизу на розділеному екрані"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Під час розділення екрана перемикатися на додаток ліворуч або вгорі"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Під час розділення екрана: замінити додаток іншим"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Показувати значки сповіщень із низьким пріоритетом"</string>
<string name="other" msgid="429768510980739978">"Інше"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"вилучити опцію"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"додати панель на останню позицію"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Перемістити опцію"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Переглянути нещодавні додатки"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Перемикання між додатками"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Готово"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Спробуйте ще"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Назад"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Проведіть трьома пальцями вліво чи вправо по сенсорній панелі"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Щоб переглянути останні додатки, проведіть трьома пальцями вгору по сенсорній панелі й утримуйте їх"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Щоб переглянути всі додатки, натисніть клавішу дії на клавіатурі"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Замасковано"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Розблокуйте, щоб переглянути"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Контекстне навчання"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Щоб повернутися, використовуйте сенсорну панель"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Проведіть трьома пальцями вліво чи вправо. Натисніть, щоб дізнатися про інші жести."</string>
diff --git a/packages/SystemUI/res/values-uk/tiles_states_strings.xml b/packages/SystemUI/res/values-uk/tiles_states_strings.xml
index 4fac740d1693..8b50c085ddb4 100644
--- a/packages/SystemUI/res/values-uk/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-uk/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Вимкнено"</item>
<item msgid="5908720590832378783">"Увімкнено"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Недоступно"</item>
+ <item msgid="6641673879029894995">"Вимкнено"</item>
+ <item msgid="5806682401126108403">"Увімкнено"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index ab4dd7738030..7cdb223bdfa8 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"بلوٹوتھ مربوط ہے۔"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"بلوٹوتھ آلے کا آئیکن"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"آلہ کی تفصیل کو کنفیگر کرنے کے لیے کلک کریں"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"تمام آلات دیکھنے کے لیے کلک کریں"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"نئے آلے کا جوڑا بنانے کے لیے کلک کریں"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"‫<xliff:g id="DEVICE_NAME">%s</xliff:g>۔ آلہ کی تفصیل کنفیگر کریں"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"تمام آلات دیکھیں"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"نئے آلے کا جوڑا بنائیں"</string>
<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>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"ان پٹ"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"سماعتی آلات"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"آن ہو رہا ہے…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"چمک کو ایڈجسٹ نہیں کیا جا سکتا کیونکہ اسے سرفہرست ایپ کے ذریعے \n کنٹرول کیا جا رہا ہے"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"چمک کو ایڈجسٹ نہیں کیا جا سکتا کیونکہ اسے سرفہرست ایپ کے ذریعے کنٹرول کیا جا رہا ہے"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"خود کار طور پر گھمائیں"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"اسکرین کو خود کار طور پر گھمائیں"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"مقام"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ایپ گفتگو کی خصوصیات کو سپورٹ نہیں کرتی ہے"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"تاثرات"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"برخاست کریں"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"پن کردہ کے طور پر نہ دکھائیں"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"لائیو اپ ڈیٹس کو دکھایا جا رہا ہے"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"پن کردہ اطلاعات ایپس سے لائیو معلومات ڈسپلے کرتی ہیں اور ہمیشہ اسٹیٹس بار اور مقفل اسکرین پر ظاہر ہوتی ہیں"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"ان اطلاعات کی ترمیم نہیں کی جا سکتی۔"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"کال کی اطلاعات میں ترمیم نہیں کی جا سکتی۔"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"اطلاعات کے اس گروپ کو یہاں کنفیگر نہیں کیا جا سکتا"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ملٹی ٹاسکنگ"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"بائیں جانب ایپ کے ساتھ اسپلٹ اسکرین کا استعمال کریں"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"دائیں جانب ایپ کے ساتھ اسپلٹ اسکرین کا استعمال کریں"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"فُل اسکرین پر سوئچ کریں"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"فُل اسکرین استعمال کریں"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"ڈیسک ٹاپ منظر استعمال کریں"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"اسپلٹ اسکرین کا استعمال کرتے ہوئے دائیں یا نیچے ایپ پر سوئچ کریں"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"اسپلٹ اسکرین کا استعمال کرتے ہوئے بائیں یا اوپر ایپ پر سوئچ کریں"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"اسپلٹ اسکرین کے دوران: ایک ایپ کو دوسرے سے تبدیل کریں"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"کم ترجیحی اطلاع کے آئیکنز دکھائیں"</string>
<string name="other" msgid="429768510980739978">"دیگر"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"ٹائل ہٹائیں"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"ٹائل کو آخری پوزیشن پر شامل کریں"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"ٹائل منتقل کریں"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"حالیہ ایپس دیکھیں"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"ایپس سوئچ کریں"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"ہو گیا"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"اگلا"</string>
<string name="gesture_error_title" msgid="469064941635578511">"دوبارہ کوشش کریں!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"واپس جائیں"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"اپنے ٹچ پیڈ پر تین انگلیوں کا استعمال کرتے ہوئے دائیں یا بائیں طرف سوائپ کریں"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"حالیہ ایپس دیکھنے کے لیے، ٹچ پیڈ پر تین انگلیوں سے اوپر سوائپ کریں اور دبائے رکھیں"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"اپنی سبھی ایپس دیکھنے کے لیے، اپنے کی بورڈ پر ایکشن کلید دبائیں"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"چھپانے کیلئے تبدیل کردہ"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"دیکھنے کے لیے غیر مقفل کریں"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"سیاق و سباق کی تعلیم"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"واپس جانے کے لیے اپنے ٹچ پیڈ کا استعمال کریں"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"تین انگلیوں سے دائیں یا بائیں طرف سوائپ کریں۔ مزید اشارے جاننے کے لیے تھپتھپائیں۔"</string>
diff --git a/packages/SystemUI/res/values-ur/tiles_states_strings.xml b/packages/SystemUI/res/values-ur/tiles_states_strings.xml
index 06e213b36a99..fea05338be7c 100644
--- a/packages/SystemUI/res/values-ur/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-ur/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"آف"</item>
<item msgid="5908720590832378783">"آن"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"دستیاب نہیں ہے"</item>
+ <item msgid="6641673879029894995">"آف"</item>
+ <item msgid="5806682401126108403">"آن"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index 55caf257c255..037f83dc34f6 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth ulandi."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Bluetooth qurilma belgisi"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Qurilma haqida tafsilotlarni oʻzgartirish uchun bosing"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Barcha qurilmalarni koʻrish uchun bosing"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Yangi qurilmani ulash uchun bosing"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<string name="accessibility_battery_unknown" msgid="1807789554617976440">"Batareya quvvati foizi nomaʼlum."</string>
<string name="accessibility_bluetooth_name" msgid="7300973230214067678">"Ulangan: <xliff:g id="BLUETOOTH">%s</xliff:g>."</string>
<string name="accessibility_cast_name" msgid="7344437925388773685">"Bunga ulangan: <xliff:g id="CAST">%s</xliff:g>."</string>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Kirish"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Eshitish moslamalari"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Yoqilmoqda…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Yorqinlik umumiy sozlamalar orqali boshqariladi.\nUni moslash imkonsiz"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Yorqinlik umumiy sozlamalar orqali boshqariladi.Uni moslash imkonsiz"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Avto-burilish"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Ekranning avtomatik burilishi"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Joylashuv"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasida suhbat funksiyalari ishlamaydi"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Fikr-mulohaza"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Yopish"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Qadalgan sifatida chiqmasin"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Jonli yangiliklar koʻrsatilmoqda"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Qadalgan bildirishnomalar ilovalardagi jonli efir maʼlumotlarini koʻrsatadi va har doim holat qatori va ekran qulfida chiqadi"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Bu bildirishnomalarni tahrirlash imkonsiz."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Chaqiruv bildirishnomalarini tahrirlash imkonsiz."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Ushbu bildirishnomalar guruhi bu yerda sozlanmaydi"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Multi-vazifalilik"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Ekranni ajratib, joriy ilovani oʻngga joylash"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Ekranni ajratib, joriy ilovani chapga joylash"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Butun ekran rejimiga kirish"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Ajratilgan ekranda oʻngdagi yoki pastdagi ilovaga almashish"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Ajratilgan ekranda chapdagi yoki yuqoridagi ilovaga almashish"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Ajratilgan rejimda ilovalarni oʻzaro almashtirish"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Muhim boʻlmagan bildirishnoma ikonkalarini koʻrsatish"</string>
<string name="other" msgid="429768510980739978">"Boshqa"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"katakchani olib tashlash"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"kartochkani oxirgi oʻringa qoʻshish"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Katakchani boshqa joyga olish"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Oxirgi ilovalarni koʻrish"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Ilovalarni almashtirish"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Tayyor"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Qayta urining!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Orqaga qaytish"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Sensorli panelda uchta barmoq bilan chapga yoki oʻngga suring"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Oxirgi ilovalarni koʻrish uchun sensorli panelda uchta barmoq bilan tepaga surib, bosib turing"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Barcha ishoralarni koʻrish uchun klaviaturadagi amal tugmasini bosing"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Chiqarildi"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Koʻrish uchun qulfdan chiqaring"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Kontekstual taʼlim"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Sensorli panel orqali orqaga qaytish"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Uchta barmoq bilan chapga yoki oʻngga suring. Boshqa ishoralar bilan tanishish uchun bosing."</string>
diff --git a/packages/SystemUI/res/values-uz/tiles_states_strings.xml b/packages/SystemUI/res/values-uz/tiles_states_strings.xml
index f636bc61bb99..9b8ca80c2fee 100644
--- a/packages/SystemUI/res/values-uz/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-uz/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Yoqilmagan"</item>
<item msgid="5908720590832378783">"Yoniq"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Mavjud emas"</item>
+ <item msgid="6641673879029894995">"Yoqilmagan"</item>
+ <item msgid="5806682401126108403">"Yoniq"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 35fe2f2428d4..59e81bb6a458 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Đã kết nối bluetooth."</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Biểu tượng thiết bị Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Nhấp để định cấu hình thông tin thiết bị"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Nhấp để xem tất cả các thiết bị"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Nhấp để ghép nối thiết bị mới"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Thiết bị đầu vào"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Thiết bị trợ thính"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Đang bật…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Không điều chỉnh được độ sáng vì độ sáng đang được\n ứng dụng trên cùng điều khiển"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Không điều chỉnh được độ sáng vì độ sáng đang được ứng dụng trên cùng điều khiển"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Tự động xoay"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Tự động xoay màn hình"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Vị trí"</string>
@@ -808,12 +812,9 @@
<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>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Phản hồi"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Đóng"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Không hiện dưới dạng đã ghim"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Đang hiện thông tin cập nhật trực tiếp"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Thông báo được ghim sẽ hiện thông tin trực tiếp từ ứng dụng và luôn xuất hiện trên thanh trạng thái cũng như màn hình khoá"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Không thể sửa đổi các thông báo này."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Không thể sửa đổi các thông báo cuộc gọi."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Không thể định cấu hình nhóm thông báo này tại đây"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Đa nhiệm"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Dùng tính năng chia đôi màn hình với ứng dụng ở bên phải"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Dùng tính năng chia đôi màn hình với ứng dụng ở bên trái"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Chuyển sang chế độ toàn màn hình"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Chuyển sang ứng dụng bên phải hoặc ở dưới khi đang chia đôi màn hình"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Chuyển sang ứng dụng bên trái hoặc ở trên khi đang chia đôi màn hình"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Trong chế độ chia đôi màn hình: thay một ứng dụng bằng ứng dụng khác"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Hiển thị biểu tượng thông báo có mức ưu tiên thấp"</string>
<string name="other" msgid="429768510980739978">"Khác"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"xóa ô"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"thêm ô vào vị trí cuối cùng"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Di chuyển ô"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Xem các ứng dụng gần đây"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Chuyển đổi ứng dụng"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Xong"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Hãy thử lại!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Quay lại"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Dùng 3 ngón tay vuốt sang trái hoặc sang phải trên bàn di chuột"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Để xem các ứng dụng gần đây, hãy dùng 3 ngón tay vuốt lên và giữ trên bàn di chuột"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Để xem tất cả ứng dụng của bạn, hãy nhấn phím hành động trên bàn phím"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Bị loại bỏ"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Mở khoá để xem"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Hướng dẫn theo bối cảnh"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Dùng bàn di chuột để quay lại"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Dùng 3 ngón tay vuốt sang trái hoặc sang phải. Hãy nhấn để tìm hiểu các cử chỉ khác."</string>
diff --git a/packages/SystemUI/res/values-vi/tiles_states_strings.xml b/packages/SystemUI/res/values-vi/tiles_states_strings.xml
index d8e68875f07e..afbf477ebcd4 100644
--- a/packages/SystemUI/res/values-vi/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-vi/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Đang tắt"</item>
<item msgid="5908720590832378783">"Đang bật"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Không có"</item>
+ <item msgid="6641673879029894995">"Đang tắt"</item>
+ <item msgid="5806682401126108403">"Đang bật"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 530017cd087e..03c4cdf92174 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -245,8 +245,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"蓝牙已连接。"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"蓝牙设备图标"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"点击以配置设备详情"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"点击即可查看所有设备"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"点击即可配对新设备"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -328,7 +332,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"输入"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"助听器"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"正在开启…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"亮度无法调整,因为它正在被\n顶层应用控制"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"亮度无法调整,因为它正在被顶层应用控制"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"自动屏幕旋转"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"自动旋转屏幕"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"位置信息"</string>
@@ -808,12 +812,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"<xliff:g id="APP_NAME">%1$s</xliff:g>不支持对话功能"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"反馈"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"关闭"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"请勿显示在固定的通知中"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"显示实时动态"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"固定的通知会显示应用的实时信息,并始终显示在状态栏和锁定屏幕上"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"无法修改这些通知。"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"无法修改来电通知。"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"您无法在此处配置这组通知"</string>
@@ -900,7 +901,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"多任务处理"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"使用分屏模式,并将应用置于右侧"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"使用分屏模式,并将应用置于左侧"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"切换到全屏模式"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"使用分屏模式时,切换到右侧或下方的应用"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"使用分屏模式时,切换到左侧或上方的应用"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"在分屏期间:将一个应用替换为另一个应用"</string>
@@ -987,6 +991,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"显示低优先级的通知图标"</string>
<string name="other" msgid="429768510980739978">"其他"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"移除功能块"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"将功能块添加到最后一个位置"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"移动功能块"</string>
@@ -1501,6 +1507,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"查看最近用过的应用"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"切换应用"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"完成"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"再试一次!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"返回"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"在触控板上用三根手指向左或向右滑动"</string>
@@ -1538,7 +1546,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"如要查看最近用过的应用,请用三根手指在触控板上向上滑动并按住"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"如要查看所有应用,请按下键盘上的快捷操作按键"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"已隐去"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"解锁即可查看"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"内容相关指导"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"使用触控板返回"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"用三根手指向左或向右滑动。点按即可了解更多手势。"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/tiles_states_strings.xml b/packages/SystemUI/res/values-zh-rCN/tiles_states_strings.xml
index 6f3606578a48..a3922e5168c9 100644
--- a/packages/SystemUI/res/values-zh-rCN/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"关闭"</item>
<item msgid="5908720590832378783">"开启"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"不可用"</item>
+ <item msgid="6641673879029894995">"已关闭"</item>
+ <item msgid="5806682401126108403">"已开启"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index 496cbdb7b5cf..472f531b5c69 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"藍牙連線已建立。"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"藍牙裝置圖示"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"按一下即可設定裝置詳情"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"㩒一下就可以睇所有裝置"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"㩒一下就可以配對新裝置"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>。設定裝置詳細資料"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"查看所有裝置"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"配對新裝置"</string>
<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>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"輸入"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"助聽器"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"正在開啟…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"無法調整亮度,因為\n目前是由上層應用程式控制亮度"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"無法調整亮度,因為目前是由上層應用程式控制亮度"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"自動旋轉"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"自動旋轉螢幕"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"位置"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」不支援對話功能"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"意見反映"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"關閉"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"不要置頂顯示"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"顯示即時消息"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"置頂通知顯示應用程式的即時資訊,並且一律在狀態列和上鎖畫面顯示"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"無法修改這些通知。"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"無法修改通話通知。"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"無法在此設定這組通知"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"多工處理"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"使用分割螢幕,並在右側顯示應用程式"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"使用分割螢幕,並在左側顯示應用程式"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"切換至全螢幕"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"使用全螢幕模式"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"使用電腦檢視畫面"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"使用分割螢幕時,切換至右邊或下方的應用程式"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"使用分割螢幕時,切換至左邊或上方的應用程式"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"使用分割螢幕期間:更換應用程式"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"顯示低優先順序通知圖示"</string>
<string name="other" msgid="429768510980739978">"其他"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"移除圖塊"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"加圖塊去上一個位置"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"移動圖塊"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"查看最近使用的應用程式"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"切換應用程式"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"完成"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"繼續"</string>
<string name="gesture_error_title" msgid="469064941635578511">"請再試一次!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"返回"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"在觸控板上用三隻手指向左或向右滑動"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"如要查看最近使用的應用程式,請用三隻手指在觸控板上向上滑動並按住"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"如要查看所有應用程式,請在鍵盤上按下快捷操作鍵"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"已剔除"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"解鎖即可查看"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"內容教學"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"使用觸控板返回"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"用三隻手指向左或向右滑動。輕按即可瞭解更多手勢。"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/tiles_states_strings.xml b/packages/SystemUI/res/values-zh-rHK/tiles_states_strings.xml
index 25548e2d3c35..26bec2c5f0d7 100644
--- a/packages/SystemUI/res/values-zh-rHK/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"關閉"</item>
<item msgid="5908720590832378783">"開啟"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"無法使用"</item>
+ <item msgid="6641673879029894995">"關閉"</item>
+ <item msgid="5806682401126108403">"開啟"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index c63473fa0197..a56fc03b4b90 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -245,8 +245,9 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"藍牙連線已建立。"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"「藍牙裝置」圖示"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"按一下即可設定裝置詳細資料"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"按一下即可查看所有裝置"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"按一下即可配對新裝置"</string>
+ <string name="accessibility_bluetooth_device_settings_gear_with_name" msgid="114373701123165491">"<xliff:g id="DEVICE_NAME">%s</xliff:g>。設定裝置詳細資料"</string>
+ <string name="accessibility_bluetooth_device_settings_see_all" msgid="5260390270128256620">"查看所有裝置"</string>
+ <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="7988547106800504256">"配對新裝置"</string>
<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>
@@ -328,7 +329,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"輸入"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"助聽器"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"開啟中…"</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"無法調整亮度,因為\n目前是由上層應用程式控制亮度"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"無法調整亮度,因為目前是由上層應用程式控制亮度"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"自動旋轉"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"自動旋轉螢幕"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"定位"</string>
@@ -808,12 +809,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」不支援對話功能"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"意見回饋"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"關閉"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"不要顯示在固定的通知中"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"顯示最新即時資訊"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"固定的通知會提供應用程式即時資訊,並一律顯示在狀態列和螢幕鎖定畫面上"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"無法修改這些通知。"</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"無法修改來電通知。"</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"無法在這裡設定這個通知群組"</string>
@@ -900,7 +898,8 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"多工處理"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"使用分割畫面,並在右側顯示應用程式"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"使用分割畫面,並在左側顯示應用程式"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"切換至全螢幕模式"</string>
+ <string name="system_multitasking_full_screen" msgid="4221409316059910349">"使用全螢幕模式"</string>
+ <string name="system_multitasking_desktop_view" msgid="8829838918507805921">"使用電腦檢視畫面"</string>
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"使用分割畫面時,切換到右邊或上方的應用程式"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"使用分割畫面時,切換到左邊或上方的應用程式"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"使用分割畫面期間:更換應用程式"</string>
@@ -987,6 +986,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"顯示低優先順序通知圖示"</string>
<string name="other" msgid="429768510980739978">"其他"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"移除圖塊"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"將設定方塊新增到最後一個位置"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"移動圖塊"</string>
@@ -1501,6 +1502,7 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"查看最近使用的應用程式"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"切換應用程式"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"完成"</string>
+ <string name="touchpad_tutorial_next_button" msgid="9169718126626806688">"繼續"</string>
<string name="gesture_error_title" msgid="469064941635578511">"請再試一次!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"返回"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"在觸控板上用三指向左或向右滑動"</string>
@@ -1538,7 +1540,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"如要查看最近使用的應用程式,請在觸控板上向上滑動並按住"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"如要查看所有應用程式,請按下鍵盤上的快捷操作鍵"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"已遮蓋"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"解鎖即可查看"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"內容教學"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"使用觸控板返回"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"用三指向左或向右滑動。輕觸即可進一步瞭解手勢。"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/tiles_states_strings.xml b/packages/SystemUI/res/values-zh-rTW/tiles_states_strings.xml
index 3a192ba951b9..6e272f213526 100644
--- a/packages/SystemUI/res/values-zh-rTW/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"關閉"</item>
<item msgid="5908720590832378783">"開啟"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"無法使用"</item>
+ <item msgid="6641673879029894995">"已關閉"</item>
+ <item msgid="5806682401126108403">"已開啟"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 2aad788b3cf4..20be43b95c66 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -247,8 +247,12 @@
<string name="accessibility_bluetooth_connected" msgid="4745196874551115205">"Bluetooth ixhunyiwe"</string>
<string name="accessibility_bluetooth_device_icon" msgid="9163840051642587982">"Isithonjana sedivayisi ye-Bluetooth"</string>
<string name="accessibility_bluetooth_device_settings_gear" msgid="3314916468105272540">"Chofoza ukuze ulungiselele imininingwane yedivayisi"</string>
- <string name="accessibility_bluetooth_device_settings_see_all" msgid="9111952496905423543">"Chofoza ukuze ubone wonke amadivayisi"</string>
- <string name="accessibility_bluetooth_device_settings_pair_new_device" msgid="2435184865793496966">"Chofoza ukuze ubhangqe idivayisi entsha"</string>
+ <!-- no translation found for accessibility_bluetooth_device_settings_gear_with_name (114373701123165491) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_see_all (5260390270128256620) -->
+ <skip />
+ <!-- no translation found for accessibility_bluetooth_device_settings_pair_new_device (7988547106800504256) -->
+ <skip />
<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>
@@ -330,7 +334,7 @@
<string name="quick_settings_bluetooth_secondary_label_input" msgid="3887552721233148132">"Okokufaka"</string>
<string name="quick_settings_bluetooth_secondary_label_hearing_aids" msgid="5553051568867097111">"Imishini yendlebe"</string>
<string name="quick_settings_bluetooth_secondary_label_transient" msgid="3882884317600669650">"Iyavula..."</string>
- <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ayikwazi ukulungisa ukukhanya ngoba ilawulwa\n yi-app ephezulu"</string>
+ <string name="quick_settings_brightness_unable_adjust_msg" msgid="786478497970492300">"Ayikwazi ukulungisa ukukhanya ngoba ilawulwa yi-app ephezulu"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="2359922767950346112">"Ukuphenduka okuzenzakalelayo"</string>
<string name="accessibility_quick_settings_rotation" msgid="4800050198392260738">"Phendula iskrini ngokuzenzakalela"</string>
<string name="quick_settings_location_label" msgid="2621868789013389163">"Indawo"</string>
@@ -810,12 +814,9 @@
<string name="no_shortcut" msgid="8257177117568230126">"I-<xliff:g id="APP_NAME">%1$s</xliff:g> ayisekeli izici zengxoxo"</string>
<string name="notification_guts_bundle_feedback" msgid="7581587973879656500">"Impendulo"</string>
<string name="notification_inline_dismiss" msgid="88423586921134258">"Chitha"</string>
- <!-- no translation found for notification_inline_disable_promotion (3551682588314376921) -->
- <skip />
- <!-- no translation found for live_notifications_title (1586553354601345379) -->
- <skip />
- <!-- no translation found for live_notifications_desc (7470787001768372152) -->
- <skip />
+ <string name="notification_inline_disable_promotion" msgid="3551682588314376921">"Ungabonisi njengophiniwe"</string>
+ <string name="live_notifications_title" msgid="1586553354601345379">"Ibonisa Izibuyekezo Ezibukhoma"</string>
+ <string name="live_notifications_desc" msgid="7470787001768372152">"Izaziso eziphiniwe zibonisa ulwazi olubukhoma oluvela kuma-app, futhi oluhlala luvela kubha yesimo nasekukhiyeni isikrini"</string>
<string name="notification_unblockable_desc" msgid="2073030886006190804">"Lezi zaziso azikwazi ukushintshwa."</string>
<string name="notification_unblockable_call_desc" msgid="5907328164696532169">"Izaziso zekholi azikwazi ukushintshwa."</string>
<string name="notification_multichannel_desc" msgid="7414593090056236179">"Leli qembu lezaziso alikwazi ukulungiselelwa lapha"</string>
@@ -902,7 +903,10 @@
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Ukwenza imisebenzi eminingi"</string>
<string name="system_multitasking_rhs" msgid="8779289852395243004">"Sebenzisa ukuhlukanisa isikrini nge-app kwesokudla"</string>
<string name="system_multitasking_lhs" msgid="7348595296208696452">"Sebenzisa ukuhlukanisa isikrini nge-app kwesokunxele"</string>
- <string name="system_multitasking_full_screen" msgid="4940465971687159429">"Shintshela esikrinini esigcwele"</string>
+ <!-- no translation found for system_multitasking_full_screen (4221409316059910349) -->
+ <skip />
+ <!-- no translation found for system_multitasking_desktop_view (8829838918507805921) -->
+ <skip />
<string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Shintshela ku-app ngakwesokudla noma ngezansi ngenkathi usebenzisa uhlukanisa isikrini"</string>
<string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Shintshela ku-app ngakwesokunxele noma ngaphezulu ngenkathi usebenzisa ukuhlukanisa isikrini"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Ngesikhathi sokuhlukaniswa kwesikrini: shintsha i-app ngenye"</string>
@@ -989,6 +993,8 @@
</string-array>
<string name="tuner_low_priority" msgid="8412666814123009820">"Bonisa izithonjana zesaziso zokubaluleka okuncane"</string>
<string name="other" msgid="429768510980739978">"Okunye"</string>
+ <!-- no translation found for accessibility_qs_edit_toggle_tile_size_action (1485194410119733586) -->
+ <skip />
<string name="accessibility_qs_edit_remove_tile_action" msgid="775511891457193480">"susa ithayela"</string>
<string name="accessibility_qs_edit_tile_add_action" msgid="8311378984458545661">"faka ithayela endaweni yokugcina"</string>
<string name="accessibility_qs_edit_tile_start_move" msgid="2009373939914517817">"Hambisa ithayela"</string>
@@ -1503,6 +1509,8 @@
<string name="touchpad_tutorial_recent_apps_gesture_button" msgid="8919227647650347359">"Buka ama-app akamuva"</string>
<string name="touchpad_tutorial_switch_apps_gesture_button" msgid="7768255095423767779">"Shintsha ama-app"</string>
<string name="touchpad_tutorial_done_button" msgid="176168488821755503">"Kwenziwe"</string>
+ <!-- no translation found for touchpad_tutorial_next_button (9169718126626806688) -->
+ <skip />
<string name="gesture_error_title" msgid="469064941635578511">"Zama futhi!"</string>
<string name="touchpad_back_gesture_action_title" msgid="7199067250654332735">"Buyela emuva"</string>
<string name="touchpad_back_gesture_guidance" msgid="5352221087725906542">"Swayiphela kwesokunxele noma kwesokudla usebenzisa iminwe emithathu kuphedi yokuthinta"</string>
@@ -1540,7 +1548,10 @@
<string name="overview_edu_toast_content" msgid="5797030644017804518">"Ukuze ubuke ama-app akamuva, swayiphela phezulu bese ubambe ngeminwe emithathu ephedini yokuthinta"</string>
<string name="all_apps_edu_toast_content" msgid="8807496014667211562">"Ukuze ubuke wonke ama-app wakho, cindezela inkinobho yokufinyelela kukhibhodi yakho"</string>
<string name="redacted_notification_single_line_title" msgid="212019960919261670">"Kwenziwe iredact"</string>
- <string name="redacted_notification_single_line_text" msgid="8684166405005242945">"Vula ukuze ubuke"</string>
+ <!-- no translation found for public_notification_single_line_text (3576190291791654933) -->
+ <skip />
+ <!-- no translation found for redacted_otp_notification_single_line_text (5179964116354454118) -->
+ <skip />
<string name="contextual_education_dialog_title" msgid="4630392552837487324">"Imfundo yokuqukethwe"</string>
<string name="back_edu_notification_title" msgid="5624780717751357278">"Sebenzisa iphedi yokuthinta ukuze ubuyele emuva"</string>
<string name="back_edu_notification_content" msgid="2497557451540954068">"Swayiphela kwesokunxele noma kwesokudla usebenzisa iminwe emithathu. Thepha ukuze ufunde kabanzi ngokunyakazisa umzimba."</string>
diff --git a/packages/SystemUI/res/values-zu/tiles_states_strings.xml b/packages/SystemUI/res/values-zu/tiles_states_strings.xml
index f9f27bdbe251..13ffe042c07e 100644
--- a/packages/SystemUI/res/values-zu/tiles_states_strings.xml
+++ b/packages/SystemUI/res/values-zu/tiles_states_strings.xml
@@ -196,7 +196,9 @@
<item msgid="6419996398343291862">"Valiwe"</item>
<item msgid="5908720590832378783">"Vuliwe"</item>
</string-array>
- <!-- no translation found for tile_states_desktopeffects:0 (6253480000354287321) -->
- <!-- no translation found for tile_states_desktopeffects:1 (6641673879029894995) -->
- <!-- no translation found for tile_states_desktopeffects:2 (5806682401126108403) -->
+ <string-array name="tile_states_desktopeffects">
+ <item msgid="6253480000354287321">"Ayitholakali"</item>
+ <item msgid="6641673879029894995">"Ivaliwe"</item>
+ <item msgid="5806682401126108403">"Ivuliwe"</item>
+ </string-array>
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 17a89b3a0394..640e1fa79530 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -491,6 +491,9 @@
<!-- some constraints use a negative margin. must be aligned with overlay_border_width, above;
overlay_border_width_neg = overlay_border_width * -1 -->
<dimen name="overlay_border_width_neg">-4dp</dimen>
+ <dimen name="overlay_shade_panel_shape_radius">
+ @dimen/aux_spacing_overlay_panel_shape_radius
+ </dimen>
<dimen name="clipboard_preview_size">@dimen/overlay_x_scale</dimen>
<dimen name="clipboard_overlay_min_font">10sp</dimen>
@@ -2215,4 +2218,8 @@
<dimen name="rear_display_progress_width">231dp</dimen>
<!-- Rear display mode end -->
+ <!-- Spacing attributes to overwrite -->
+ <dimen name="aux_spacing_overlay_panel_shape_radius">46dp</dimen>
+ <!-- Spacing attributes to overwrite end -->
+
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 359bd2bcb37c..084495f4b196 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -592,6 +592,12 @@
<!-- Content description of the button to expand the group of devices. [CHAR LIMIT=NONE] -->
<string name="accessibility_expand_group">Expand group.</string>
+ <!-- Content description of the button to add a device to a group. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_add_device_to_group">Add device to group.</string>
+
+ <!-- Content description of the button to remove a device from a group. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_remove_device_from_group">Remove device from group.</string>
+
<!-- Content description of the button to open the application . [CHAR LIMIT=NONE] -->
<string name="accessibility_open_application">Open application.</string>
@@ -802,7 +808,7 @@
<!-- QuickSettings: Bluetooth secondary label shown when bluetooth is being enabled [CHAR LIMIT=NONE] -->
<string name="quick_settings_bluetooth_secondary_label_transient">Turning on&#8230;</string>
<!-- QuickSettings: Brightness [CHAR LIMIT=NONE] -->
- <string name="quick_settings_brightness_unable_adjust_msg">Can\'t adjust brightness because it\'s being\n controlled by the top app</string>
+ <string name="quick_settings_brightness_unable_adjust_msg">Can\'t adjust brightness because it\'s being controlled by the top app</string>
<!-- QuickSettings: Rotation Unlocked [CHAR LIMIT=NONE] -->
<string name="quick_settings_rotation_unlocked_label">Auto-rotate</string>
<!-- Accessibility label for Auto-ratate QuickSettings tile [CHAR LIMIT=NONE] -->
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java
index 9ebb15f43307..c82243934b8b 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/utilities/Utilities.java
@@ -19,6 +19,7 @@ package com.android.systemui.shared.recents.utilities;
import static android.app.StatusBarManager.NAVBAR_BACK_DISMISS_IME;
import static android.app.StatusBarManager.NAVBAR_IME_SWITCHER_BUTTON_VISIBLE;
import static android.app.StatusBarManager.NAVBAR_IME_VISIBLE;
+import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import android.annotation.TargetApi;
import android.app.StatusBarManager.NavbarFlags;
@@ -35,6 +36,8 @@ import android.util.DisplayMetrics;
import android.view.Surface;
import android.view.WindowManager;
+import com.android.systemui.shared.recents.model.Task;
+
/* Common code */
public class Utilities {
@@ -165,4 +168,10 @@ public class Utilities {
float densityRatio = (float) densityDpi / DisplayMetrics.DENSITY_DEFAULT;
return (size / densityRatio);
}
+
+ /** Whether a task is in freeform mode. */
+ public static boolean isFreeformTask(Task task) {
+ return task != null && task.getKey() != null
+ && task.getKey().windowingMode == WINDOWING_MODE_FREEFORM;
+ }
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index f6d0f4e26d26..63101d430c6c 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -156,7 +156,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.res.R;
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 com.android.systemui.scene.shared.model.Overlays;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.ShadeDisplayAware;
import com.android.systemui.shared.system.TaskStackChangeListener;
@@ -2925,12 +2925,12 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
) {
SceneContainerFlag.assertInNewMode();
return isPrimaryBouncerFullyShown(transitionState)
- || transitionState.isTransitioning(null, Scenes.Bouncer);
+ || transitionState.isTransitioning(null, Overlays.Bouncer);
}
private boolean isPrimaryBouncerFullyShown(ObservableTransitionState transitionState) {
SceneContainerFlag.assertInNewMode();
- return transitionState.isIdle(Scenes.Bouncer);
+ return transitionState.isIdle(Overlays.Bouncer);
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt
index 7039d5e7d9b0..75503e8575f0 100644
--- a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt
@@ -147,9 +147,7 @@ constructor(
/** The scene to show when bouncer is dismissed. */
val dismissDestination: Flow<SceneKey> =
- sceneBackInteractor.backScene
- .filter { it != Scenes.Bouncer }
- .map { it ?: Scenes.Lockscreen }
+ sceneBackInteractor.backScene.map { it ?: Scenes.Lockscreen }
/** Notifies that the user has places down a pointer, not necessarily dragging just yet. */
fun onDown() {
diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/BouncerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/BouncerViewBinder.kt
index 116c9415bd11..7f268315e566 100644
--- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/BouncerViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/BouncerViewBinder.kt
@@ -10,7 +10,7 @@ import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.bouncer.shared.flag.ComposeBouncerFlags
import com.android.systemui.bouncer.ui.BouncerDialogFactory
import com.android.systemui.bouncer.ui.viewmodel.BouncerContainerViewModel
-import com.android.systemui.bouncer.ui.viewmodel.BouncerSceneContentViewModel
+import com.android.systemui.bouncer.ui.viewmodel.BouncerOverlayContentViewModel
import com.android.systemui.bouncer.ui.viewmodel.KeyguardBouncerViewModel
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
@@ -46,7 +46,7 @@ constructor(
val keyguardInteractor: KeyguardInteractor,
val selectedUserInteractor: SelectedUserInteractor,
val legacyInteractor: PrimaryBouncerInteractor,
- val viewModelFactory: BouncerSceneContentViewModel.Factory,
+ val viewModelFactory: BouncerOverlayContentViewModel.Factory,
val dialogFactory: BouncerDialogFactory,
val bouncerContainerViewModelFactory: BouncerContainerViewModel.Factory,
)
diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/ComposeBouncerViewBinder.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/ComposeBouncerViewBinder.kt
index 2dce28409b57..33cebf70554f 100644
--- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/ComposeBouncerViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/binder/ComposeBouncerViewBinder.kt
@@ -6,11 +6,12 @@ import androidx.activity.OnBackPressedDispatcherOwner
import androidx.activity.setViewTreeOnBackPressedDispatcherOwner
import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.Lifecycle
+import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.bouncer.ui.BouncerDialogFactory
import com.android.systemui.bouncer.ui.composable.BouncerContainer
import com.android.systemui.bouncer.ui.viewmodel.BouncerContainerViewModel
-import com.android.systemui.bouncer.ui.viewmodel.BouncerSceneContentViewModel
+import com.android.systemui.bouncer.ui.viewmodel.BouncerOverlayContentViewModel
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.lifecycle.WindowLifecycleState
import com.android.systemui.lifecycle.repeatWhenAttached
@@ -20,7 +21,6 @@ import com.android.systemui.util.kotlin.sample
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.awaitCancellation
-import com.android.app.tracing.coroutines.launchTraced as launch
/** View binder responsible for binding the compose version of the bouncer. */
object ComposeBouncerViewBinder {
@@ -32,7 +32,7 @@ object ComposeBouncerViewBinder {
legacyInteractor: PrimaryBouncerInteractor,
keyguardInteractor: KeyguardInteractor,
selectedUserInteractor: SelectedUserInteractor,
- viewModelFactory: BouncerSceneContentViewModel.Factory,
+ viewModelFactory: BouncerOverlayContentViewModel.Factory,
dialogFactory: BouncerDialogFactory,
bouncerContainerViewModelFactory: BouncerContainerViewModel.Factory,
) {
diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/composable/BouncerContainer.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/composable/BouncerContainer.kt
index c59c6816a350..204eb3ec9753 100644
--- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/composable/BouncerContainer.kt
+++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/composable/BouncerContainer.kt
@@ -24,14 +24,14 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.android.compose.theme.PlatformTheme
import com.android.systemui.bouncer.ui.BouncerDialogFactory
-import com.android.systemui.bouncer.ui.viewmodel.BouncerSceneContentViewModel
+import com.android.systemui.bouncer.ui.viewmodel.BouncerOverlayContentViewModel
import com.android.systemui.compose.modifiers.sysuiResTag
import com.android.systemui.lifecycle.rememberViewModel
/** Container that includes the compose bouncer and is meant to be included in legacy keyguard. */
@Composable
fun BouncerContainer(
- viewModelFactory: BouncerSceneContentViewModel.Factory,
+ viewModelFactory: BouncerOverlayContentViewModel.Factory,
dialogFactory: BouncerDialogFactory,
) {
PlatformTheme {
diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModel.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerOverlayContentViewModel.kt
index 5deb751ced27..b944d1acac9d 100644
--- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerSceneContentViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerOverlayContentViewModel.kt
@@ -51,8 +51,8 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.map
-/** Models UI state for the content of the bouncer scene. */
-class BouncerSceneContentViewModel
+/** Models UI state for the content of the bouncer overlay. */
+class BouncerOverlayContentViewModel
@AssistedInject
constructor(
@Application private val applicationContext: Context,
@@ -445,6 +445,6 @@ constructor(
@AssistedFactory
interface Factory {
- fun create(): BouncerSceneContentViewModel
+ fun create(): BouncerOverlayContentViewModel
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerUserActionsViewModel.kt b/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerUserActionsViewModel.kt
index f50a2ab1d803..aafc0e1a9c67 100644
--- a/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerUserActionsViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/bouncer/ui/viewmodel/BouncerUserActionsViewModel.kt
@@ -20,29 +20,24 @@ import com.android.compose.animation.scene.Back
import com.android.compose.animation.scene.Swipe
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
-import com.android.systemui.bouncer.domain.interactor.BouncerInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.ui.viewmodel.UserActionsViewModel
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
-import kotlinx.coroutines.flow.map
/**
* Models UI state for user actions that can lead to navigation to other scenes when showing the
- * bouncer scene.
+ * bouncer overlay.
*/
-class BouncerUserActionsViewModel
-@AssistedInject
-constructor(private val bouncerInteractor: BouncerInteractor) : UserActionsViewModel() {
+class BouncerUserActionsViewModel @AssistedInject constructor() : UserActionsViewModel() {
override suspend fun hydrateActions(setActions: (Map<UserAction, UserActionResult>) -> Unit) {
- bouncerInteractor.dismissDestination
- .map { prevScene ->
- mapOf(
- Back to UserActionResult(prevScene),
- Swipe.Down to UserActionResult(prevScene),
- )
- }
- .collect { actions -> setActions(actions) }
+ setActions(
+ mapOf(
+ Back to UserActionResult.HideOverlay(Overlays.Bouncer),
+ Swipe.Down to UserActionResult.HideOverlay(Overlays.Bouncer),
+ )
+ )
}
@AssistedFactory
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 7c2fc7fe3aee..5e8c21f9abf5 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
@@ -20,12 +20,19 @@ import android.content.res.Resources
object SurfaceEffectColors {
@JvmStatic
- fun Resources.surfaceEffect0(): Int {
- return getColor(com.android.internal.R.color.surface_effect_0)
+ fun surfaceEffect0(r: Resources): Int {
+ return r.getColor(com.android.internal.R.color.surface_effect_0)
+ }
+ @JvmStatic
+ fun surfaceEffect1(r: Resources): Int {
+ return r.getColor(com.android.internal.R.color.surface_effect_1)
+ }
+ @JvmStatic
+ fun surfaceEffect2(r: Resources): Int {
+ return r.getColor(com.android.internal.R.color.surface_effect_2)
}
-
@JvmStatic
- fun Resources.surfaceEffect1(): Int {
- return getColor(com.android.internal.R.color.surface_effect_1)
+ fun surfaceEffect3(r: Resources): Int {
+ return r.getColor(com.android.internal.R.color.surface_effect_3)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalEditModeViewModel.kt b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalEditModeViewModel.kt
index 59beb1ed6c10..c8280d7fa152 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalEditModeViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalEditModeViewModel.kt
@@ -113,7 +113,7 @@ constructor(
val canShowEditMode =
allOf(
keyguardTransitionInteractor.isFinishedIn(
- scene = Scenes.Gone,
+ content = Scenes.Gone,
stateWithoutSceneContainer = KeyguardState.GONE,
),
communalInteractor.editModeOpen,
diff --git a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalUserActionsViewModel.kt b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalUserActionsViewModel.kt
index be1d005a0198..a1ff552827b2 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalUserActionsViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalUserActionsViewModel.kt
@@ -20,6 +20,7 @@ import com.android.compose.animation.scene.Swipe
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.systemui.deviceentry.domain.interactor.DeviceUnlockedInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.ui.viewmodel.UserActionsViewModel
import com.android.systemui.shade.domain.interactor.ShadeInteractor
@@ -55,9 +56,11 @@ constructor(
shadeModeInteractor.shadeMode,
) { isDeviceUnlocked, shadeMode ->
buildList {
- val bouncerOrGone =
- if (isDeviceUnlocked) Scenes.Gone else Scenes.Bouncer
- add(Swipe.Up to bouncerOrGone)
+ if (isDeviceUnlocked) {
+ add(Swipe.Up to Scenes.Gone)
+ } else {
+ add(Swipe.Up to Overlays.Bouncer)
+ }
add(Swipe.End to Scenes.Lockscreen)
diff --git a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalViewModel.kt b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalViewModel.kt
index 6473b1c30586..d7859c985c7b 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalViewModel.kt
@@ -168,7 +168,7 @@ constructor(
override val isCommunalContentFlowFrozen: Flow<Boolean> =
allOf(
keyguardTransitionInteractor.isFinishedIn(
- scene = Scenes.Communal,
+ content = Scenes.Communal,
stateWithoutSceneContainer = KeyguardState.GLANCEABLE_HUB,
),
keyguardInteractor.isKeyguardOccluded,
@@ -204,7 +204,7 @@ constructor(
override val isFocusable: Flow<Boolean> =
combine(
keyguardTransitionInteractor.isFinishedIn(
- scene = Scenes.Communal,
+ content = Scenes.Communal,
stateWithoutSceneContainer = KeyguardState.GLANCEABLE_HUB,
),
communalInteractor.isIdleOnCommunal,
diff --git a/packages/SystemUI/src/com/android/systemui/deviceentry/data/repository/DeviceEntryFaceAuthRepository.kt b/packages/SystemUI/src/com/android/systemui/deviceentry/data/repository/DeviceEntryFaceAuthRepository.kt
index 514242b41eb1..69378b475938 100644
--- a/packages/SystemUI/src/com/android/systemui/deviceentry/data/repository/DeviceEntryFaceAuthRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/deviceentry/data/repository/DeviceEntryFaceAuthRepository.kt
@@ -20,6 +20,7 @@ import android.app.StatusBarManager
import android.content.Context
import android.hardware.face.FaceManager
import android.os.CancellationSignal
+import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.internal.logging.InstanceId
import com.android.internal.logging.UiEventLogger
import com.android.systemui.Dumpable
@@ -59,8 +60,8 @@ import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
-import com.android.systemui.scene.shared.model.Scenes.Bouncer
import com.android.systemui.statusbar.phone.KeyguardBypassController
import com.android.systemui.user.data.model.SelectionStatus
import com.android.systemui.user.data.repository.UserRepository
@@ -87,7 +88,6 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn
-import com.android.app.tracing.coroutines.launchTraced as launch
import kotlinx.coroutines.withContext
/**
@@ -138,7 +138,7 @@ interface DeviceEntryFaceAuthRepository {
private data class AuthenticationRequest(
val uiEvent: FaceAuthUiEvent,
- val fallbackToDetection: Boolean
+ val fallbackToDetection: Boolean,
)
@SysUISingleton
@@ -248,11 +248,11 @@ constructor(
Pair(isLockedOut.isFalse(), "isNotInLockOutState"),
Pair(
keyguardRepository.isKeyguardDismissible.isFalse(),
- "keyguardIsNotDismissible"
+ "keyguardIsNotDismissible",
),
Pair(
biometricSettingsRepository.isFaceAuthCurrentlyAllowed,
- "isFaceAuthCurrentlyAllowed"
+ "isFaceAuthCurrentlyAllowed",
),
Pair(isAuthenticated.isFalse(), "faceNotAuthenticated"),
)
@@ -273,15 +273,15 @@ constructor(
biometricSettingsRepository.isFaceAuthCurrentlyAllowed
.isFalse()
.or(keyguardRepository.isKeyguardDismissible),
- "faceAuthIsNotCurrentlyAllowedOrCurrentUserIsTrusted"
+ "faceAuthIsNotCurrentlyAllowedOrCurrentUserIsTrusted",
),
// We don't want to run face detect if fingerprint can be used to unlock the
// device
// but it's not possible to authenticate with FP from the bouncer (UDFPS)
Pair(
and(isUdfps(), deviceEntryFingerprintAuthRepository.isRunning).isFalse(),
- "udfpsAuthIsNotPossibleAnymore"
- )
+ "udfpsAuthIsNotPossibleAnymore",
+ ),
)
.andAllFlows("canFaceDetectRun", faceDetectLog)
.flowOn(backgroundDispatcher)
@@ -318,7 +318,7 @@ constructor(
powerInteractor.isAsleep,
combine(
keyguardTransitionInteractor.isFinishedIn(
- scene = Scenes.Gone,
+ content = Scenes.Gone,
stateWithoutSceneContainer = KeyguardState.GONE,
),
keyguardInteractor.statusBarState,
@@ -350,7 +350,7 @@ constructor(
faceAuthLogger.clearingPendingAuthRequest(
loggingContext,
pendingAuthenticateRequest.value?.uiEvent,
- pendingAuthenticateRequest.value?.fallbackToDetection
+ pendingAuthenticateRequest.value?.fallbackToDetection,
)
pendingAuthenticateRequest.value = null
}
@@ -387,7 +387,7 @@ constructor(
),
Pair(
biometricSettingsRepository.isFaceAuthEnrolledAndEnabled,
- "isFaceAuthEnrolledAndEnabled"
+ "isFaceAuthEnrolledAndEnabled",
),
Pair(
if (SceneContainerFlag.isEnabled) {
@@ -399,13 +399,13 @@ constructor(
} else {
keyguardRepository.isKeyguardGoingAway.isFalse()
},
- "keyguardNotGoingAway"
+ "keyguardNotGoingAway",
),
Pair(
keyguardTransitionInteractor
.isInTransitionWhere(toStatePredicate = KeyguardState::deviceIsAsleepInState)
.isFalse(),
- "deviceNotTransitioningToAsleepState"
+ "deviceNotTransitioningToAsleepState",
),
Pair(
keyguardInteractor.isSecureCameraActive
@@ -413,29 +413,31 @@ constructor(
.or(
alternateBouncerInteractor.isVisible.or(
if (SceneContainerFlag.isEnabled) {
- sceneInteractor.get().transitionState.map { it.isIdle(Bouncer) }
+ sceneInteractor.get().transitionState.map {
+ it.isIdle(overlay = Overlays.Bouncer)
+ }
} else {
keyguardInteractor.primaryBouncerShowing
}
)
),
- "secureCameraNotActiveOrAnyBouncerIsShowing"
+ "secureCameraNotActiveOrAnyBouncerIsShowing",
),
Pair(
biometricSettingsRepository.isFaceAuthSupportedInCurrentPosture,
- "isFaceAuthSupportedInCurrentPosture"
+ "isFaceAuthSupportedInCurrentPosture",
),
Pair(
biometricSettingsRepository.isCurrentUserInLockdown.isFalse(),
- "userHasNotLockedDownDevice"
+ "userHasNotLockedDownDevice",
),
Pair(keyguardRepository.isKeyguardShowing, "isKeyguardShowing"),
Pair(
userRepository.selectedUser
.map { it.selectionStatus == SelectionStatus.SELECTION_IN_PROGRESS }
.isFalse(),
- "userSwitchingInProgress"
- )
+ "userSwitchingInProgress",
+ ),
)
}
@@ -486,7 +488,7 @@ constructor(
errorCode,
errString,
errorStatus.isLockoutError(),
- errorStatus.isCancellationError()
+ errorStatus.isCancellationError(),
)
onFaceAuthRequestCompleted()
}
@@ -524,7 +526,7 @@ constructor(
faceAuthLogger.attemptingRetryAfterHardwareError(retryCount)
requestAuthenticate(
FaceAuthUiEvent.FACE_AUTH_TRIGGERED_RETRY_AFTER_HW_UNAVAILABLE,
- fallbackToDetection = false
+ fallbackToDetection = false,
)
}
}
@@ -551,7 +553,7 @@ constructor(
if (pendingAuthenticateRequest.value != null) {
faceAuthLogger.ignoredFaceAuthTrigger(
pendingAuthenticateRequest.value?.uiEvent,
- "Previously queued trigger skipped due to new request"
+ "Previously queued trigger skipped due to new request",
)
}
faceAuthLogger.queueingRequest(uiEvent, fallbackToDetection)
@@ -574,7 +576,7 @@ constructor(
pending?.uiEvent,
canRunAuth,
canRunDetect,
- cancelInProgress
+ cancelInProgress,
)
return@combine null
} else {
@@ -613,7 +615,7 @@ constructor(
0,
null,
keyguardSessionId,
- uiEvent.extraInfo
+ uiEvent.extraInfo,
)
faceAuthLogger.authenticating(uiEvent)
faceManager?.authenticate(
@@ -624,28 +626,28 @@ constructor(
SysUiFaceAuthenticateOptions(
currentUserId,
uiEvent,
- wakeReason = uiEvent.extraInfo
+ wakeReason = uiEvent.extraInfo,
)
- .toFaceAuthenticateOptions()
+ .toFaceAuthenticateOptions(),
)
}
} else if (canRunDetection.value) {
if (fallbackToDetection) {
faceAuthLogger.ignoredFaceAuthTrigger(
uiEvent,
- "face auth gating check is false, falling back to detection."
+ "face auth gating check is false, falling back to detection.",
)
detect(uiEvent)
} else {
faceAuthLogger.ignoredFaceAuthTrigger(
uiEvent = uiEvent,
- "face auth gating check is false and fallback to detection is not requested"
+ "face auth gating check is false and fallback to detection is not requested",
)
}
} else {
faceAuthLogger.ignoredFaceAuthTrigger(
uiEvent,
- "face auth & detect gating check is false"
+ "face auth & detect gating check is false",
)
}
}
@@ -669,7 +671,7 @@ constructor(
it,
detectionCallback,
SysUiFaceAuthenticateOptions(currentUserId, uiEvent, uiEvent.extraInfo)
- .toFaceAuthenticateOptions()
+ .toFaceAuthenticateOptions(),
)
}
}
@@ -695,7 +697,7 @@ constructor(
_isAuthRunning.value,
_isLockedOut.value,
cancellationInProgress.value,
- pendingAuthenticateRequest.value?.uiEvent
+ pendingAuthenticateRequest.value?.uiEvent,
)
_authenticationStatus.value = ErrorFaceAuthenticationStatus.cancelNotReceivedError()
onFaceAuthRequestCompleted()
@@ -759,7 +761,7 @@ private fun Flow<Boolean>.isFalse(): Flow<Boolean> {
private fun List<Pair<Flow<Boolean>, String>>.andAllFlows(
combinedLoggingInfo: String,
- tableLogBuffer: TableLogBuffer
+ tableLogBuffer: TableLogBuffer,
): Flow<Boolean> {
return combine(this.map { it.first }) {
val combinedValue =
diff --git a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractor.kt b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractor.kt
index 5fc924b14814..58310e9c3e9a 100644
--- a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractor.kt
@@ -30,6 +30,7 @@ import com.android.systemui.scene.data.model.asIterable
import com.android.systemui.scene.domain.SceneFrameworkTableLog
import com.android.systemui.scene.domain.interactor.SceneBackInteractor
import com.android.systemui.scene.domain.interactor.SceneInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.util.kotlin.pairwise
import com.android.systemui.utils.coroutines.flow.mapLatestConflated
@@ -238,8 +239,8 @@ constructor(
if (alternateBouncerInteractor.canShowAlternateBouncer.value) {
alternateBouncerInteractor.forceShow()
} else {
- sceneInteractor.changeScene(
- toScene = Scenes.Bouncer,
+ sceneInteractor.showOverlay(
+ overlay = Overlays.Bouncer,
loggingReason = "request to unlock device while authentication required",
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntrySourceInteractor.kt b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntrySourceInteractor.kt
index eb82c7d4ce6a..5de2ed231275 100644
--- a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntrySourceInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntrySourceInteractor.kt
@@ -33,6 +33,7 @@ import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticati
import com.android.systemui.scene.domain.interactor.SceneContainerOcclusionInteractor
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_DISMISS_BOUNCER
import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_NONE
@@ -84,14 +85,14 @@ constructor(
sceneInteractor: SceneInteractor,
dumpManager: DumpManager,
) : FlowDumperImpl(dumpManager) {
- private val isShowingBouncerScene: Flow<Boolean> =
+ private val isShowingBouncerOverlay: Flow<Boolean> =
sceneInteractor.transitionState
.map { transitionState ->
- transitionState.isIdle(Scenes.Bouncer) ||
- transitionState.isTransitioning(null, Scenes.Bouncer)
+ transitionState.isIdle(overlay = Overlays.Bouncer) ||
+ transitionState.isTransitioning(null, Overlays.Bouncer)
}
.distinctUntilChanged()
- .dumpWhileCollecting("isShowingBouncerScene")
+ .dumpWhileCollecting("isShowingBouncerOverlay")
private val isUnlockedWithStrongFaceUnlock =
deviceEntryFaceAuthInteractor.authenticationStatus
@@ -115,14 +116,14 @@ constructor(
isUnlockedWithStrongFaceUnlock,
sceneContainerOcclusionInteractor.isOccludingActivityShown,
sceneInteractor.currentScene,
- isShowingBouncerScene,
+ isShowingBouncerOverlay,
) {
isAlternateBouncerVisible,
isBypassAvailable,
isFaceStrongBiometric,
isOccluded,
currentScene,
- isShowingBouncerScene ->
+ isShowingBouncerOverlay ->
val isUnlockingAllowed =
keyguardUpdateMonitor.isUnlockingWithBiometricAllowed(isFaceStrongBiometric)
val bypass = isBypassAvailable || authController.isUdfpsFingerDown()
@@ -140,7 +141,7 @@ constructor(
isUnlockingAllowed && isOccluded -> MODE_UNLOCK_COLLAPSING
- (isShowingBouncerScene || isAlternateBouncerVisible) && isUnlockingAllowed ->
+ (isShowingBouncerOverlay || isAlternateBouncerVisible) && isUnlockingAllowed ->
MODE_DISMISS_BOUNCER
isUnlockingAllowed && bypass -> MODE_UNLOCK_COLLAPSING
@@ -158,14 +159,16 @@ constructor(
alternateBouncerInteractor.isVisible,
authenticationInteractor.authenticationMethod,
sceneInteractor.currentScene,
+ sceneInteractor.currentOverlays,
isUnlockedWithStrongFingerprintUnlock,
- isShowingBouncerScene,
+ isShowingBouncerOverlay,
) {
alternateBouncerVisible,
authenticationMethod,
currentScene,
+ currentOverlays,
isFingerprintStrongBiometric,
- isShowingBouncerScene ->
+ isShowingBouncerOverlay ->
val unlockingAllowed =
keyguardUpdateMonitor.isUnlockingWithBiometricAllowed(
isFingerprintStrongBiometric
@@ -185,11 +188,12 @@ constructor(
unlockingAllowed && currentScene == Scenes.Dream ->
MODE_WAKE_AND_UNLOCK_FROM_DREAM
- isShowingBouncerScene && unlockingAllowed -> MODE_DISMISS_BOUNCER
+ isShowingBouncerOverlay && unlockingAllowed -> MODE_DISMISS_BOUNCER
unlockingAllowed -> MODE_UNLOCK_COLLAPSING
- currentScene != Scenes.Bouncer && !alternateBouncerVisible -> MODE_SHOW_BOUNCER
+ Overlays.Bouncer !in currentOverlays && !alternateBouncerVisible ->
+ MODE_SHOW_BOUNCER
else -> MODE_NONE
}
diff --git a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/SystemUIDeviceEntryFaceAuthInteractor.kt b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/SystemUIDeviceEntryFaceAuthInteractor.kt
index 4b90e1d52ea0..0d0105404726 100644
--- a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/SystemUIDeviceEntryFaceAuthInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/SystemUIDeviceEntryFaceAuthInteractor.kt
@@ -50,6 +50,7 @@ import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.user.data.model.SelectionStatus
import com.android.systemui.user.data.repository.UserRepository
@@ -237,7 +238,7 @@ constructor(
private val isBouncerVisible: Flow<Boolean> by lazy {
if (SceneContainerFlag.isEnabled) {
- sceneInteractor.get().transitionState.map { it.isIdle(Scenes.Bouncer) }
+ sceneInteractor.get().transitionState.map { it.isIdle(Overlays.Bouncer) }
} else {
primaryBouncerInteractor.get().isShowing
}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java
index 3dd2561614b7..599c945db064 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java
@@ -51,7 +51,7 @@ import com.android.systemui.dreams.dagger.DreamOverlayModule;
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
import com.android.systemui.keyguard.shared.model.KeyguardState;
import com.android.systemui.res.R;
-import com.android.systemui.scene.shared.model.Scenes;
+import com.android.systemui.scene.shared.model.Overlays;
import com.android.systemui.shade.ShadeExpansionChangeEvent;
import com.android.systemui.shade.domain.interactor.ShadeInteractor;
import com.android.systemui.statusbar.BlurUtils;
@@ -281,7 +281,7 @@ public class DreamOverlayContainerViewController extends
mView,
FlowKt.distinctUntilChanged(combineFlows(
mKeyguardTransitionInteractor.isFinishedIn(
- Scenes.Bouncer, KeyguardState.PRIMARY_BOUNCER),
+ Overlays.Bouncer, KeyguardState.PRIMARY_BOUNCER),
mKeyguardTransitionInteractor.isFinishedIn(
KeyguardState.ALTERNATE_BOUNCER),
mShadeInteractor.isAnyExpanded(),
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
index 3132ec2b98e3..a2bcb98e36fe 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
@@ -47,7 +47,7 @@ import androidx.lifecycle.ServiceLifecycleDispatcher;
import androidx.lifecycle.ViewModelStore;
import com.android.app.viewcapture.ViewCaptureAwareWindowManager;
-import com.android.compose.animation.scene.SceneKey;
+import com.android.compose.animation.scene.OverlayKey;
import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;
import com.android.internal.policy.PhoneWindow;
@@ -72,6 +72,7 @@ import com.android.systemui.navigationbar.gestural.domain.GestureInteractor;
import com.android.systemui.navigationbar.gestural.domain.TaskMatcher;
import com.android.systemui.scene.domain.interactor.SceneInteractor;
import com.android.systemui.scene.shared.flag.SceneContainerFlag;
+import com.android.systemui.scene.shared.model.Overlays;
import com.android.systemui.scene.shared.model.Scenes;
import com.android.systemui.shade.ShadeExpansionChangeEvent;
import com.android.systemui.touch.TouchInsetManager;
@@ -82,6 +83,7 @@ import kotlinx.coroutines.Job;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.CancellationException;
import java.util.function.Consumer;
@@ -221,10 +223,11 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
}
};
- private final Consumer<SceneKey> mCurrentSceneConsumer = new Consumer<>() {
+ private final Consumer<Set<OverlayKey>> mCurrentOverlaysConsumer = new Consumer<>() {
@Override
- public void accept(SceneKey currentScene) {
- mExecutor.execute(() -> updateBouncerShowingLocked(currentScene == Scenes.Bouncer));
+ public void accept(Set<OverlayKey> currentOverlays) {
+ mExecutor.execute(() ->
+ updateBouncerShowingLocked(currentOverlays.contains(Overlays.Bouncer)));
}
};
@@ -430,8 +433,8 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ
mFlows.add(collectFlow(getLifecycle(), communalInteractor.isCommunalVisible(),
mCommunalVisibleConsumer));
if (SceneContainerFlag.isEnabled()) {
- mFlows.add(collectFlow(getLifecycle(), sceneInteractor.getCurrentScene(),
- mCurrentSceneConsumer));
+ mFlows.add(collectFlow(getLifecycle(), sceneInteractor.getCurrentOverlays(),
+ mCurrentOverlaysConsumer));
} else {
mFlows.add(collectFlow(getLifecycle(), keyguardInteractor.primaryBouncerShowing,
mBouncerShowingConsumer));
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModel.kt b/packages/SystemUI/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModel.kt
index 7437d3e215d5..de869961fb9f 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/dreams/ui/viewmodel/DreamUserActionsViewModel.kt
@@ -20,6 +20,7 @@ import com.android.compose.animation.scene.Swipe
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.systemui.deviceentry.domain.interactor.DeviceUnlockedInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.ui.viewmodel.UserActionsViewModel
import com.android.systemui.shade.domain.interactor.ShadeInteractor
@@ -55,9 +56,11 @@ constructor(
shadeModeInteractor.shadeMode,
) { isDeviceUnlocked, shadeMode ->
buildList {
- val bouncerOrGone =
- if (isDeviceUnlocked) Scenes.Gone else Scenes.Bouncer
- add(Swipe.Up to bouncerOrGone)
+ if (isDeviceUnlocked) {
+ add(Swipe.Up to Scenes.Gone)
+ } else {
+ add(Swipe.Up to Overlays.Bouncer)
+ }
addAll(
when (shadeMode) {
diff --git a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/TouchpadTutorialScreensProvider.kt b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/TouchpadTutorialScreensProvider.kt
index 7d2492a41e82..bea79fdb6aee 100644
--- a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/TouchpadTutorialScreensProvider.kt
+++ b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/TouchpadTutorialScreensProvider.kt
@@ -21,8 +21,16 @@ import androidx.compose.runtime.Composable
interface TouchpadTutorialScreensProvider {
@Composable
- fun BackGesture(onDoneButtonClicked: () -> Unit, onBack: () -> Unit, isAutoProceed: Boolean)
+ fun BackGesture(
+ onDoneButtonClicked: () -> Unit,
+ onBack: () -> Unit,
+ onAutoProceed: (suspend () -> Unit)?,
+ )
@Composable
- fun HomeGesture(onDoneButtonClicked: () -> Unit, onBack: () -> Unit, isAutoProceed: Boolean)
+ fun HomeGesture(
+ onDoneButtonClicked: () -> Unit,
+ onBack: () -> Unit,
+ onAutoProceed: (suspend () -> Unit)?,
+ )
}
diff --git a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/ActionTutorialContent.kt b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/ActionTutorialContent.kt
index ee875c484ca6..8e4e4c09e9f2 100644
--- a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/ActionTutorialContent.kt
+++ b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/ActionTutorialContent.kt
@@ -108,6 +108,7 @@ fun ActionTutorialContent(
actionState: TutorialActionState,
onDoneButtonClicked: () -> Unit,
config: TutorialScreenConfig,
+ onAutoProceed: (suspend () -> Unit)? = null,
) {
Column(
verticalArrangement = Arrangement.Center,
@@ -137,9 +138,12 @@ fun ActionTutorialContent(
onDoneButtonClicked = onDoneButtonClicked,
modifier = Modifier.padding(horizontal = 60.dp).graphicsLayer { alpha = buttonAlpha },
enabled = actionState is Finished,
- isNext = config.hasNextButton,
+ isNext = onAutoProceed != null,
)
}
+ if (actionState is Finished) {
+ LaunchedEffect(Unit) { onAutoProceed?.invoke() }
+ }
}
@Composable
diff --git a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/TutorialScreenConfig.kt b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/TutorialScreenConfig.kt
index 65adc148b6ae..eda23a51a1ae 100644
--- a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/TutorialScreenConfig.kt
+++ b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/composable/TutorialScreenConfig.kt
@@ -28,7 +28,6 @@ data class TutorialScreenConfig(
val colors: Colors,
val strings: Strings,
val animations: Animations,
- val hasNextButton: Boolean = false,
) {
data class Colors(
diff --git a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/view/KeyboardTouchpadTutorialActivity.kt b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/view/KeyboardTouchpadTutorialActivity.kt
index 086705fbd7ba..8cc1865a6b7e 100644
--- a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/view/KeyboardTouchpadTutorialActivity.kt
+++ b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/view/KeyboardTouchpadTutorialActivity.kt
@@ -147,7 +147,7 @@ fun KeyboardTouchpadTutorialContainer(
.BackGesture(
onDoneButtonClicked = vm::onDoneButtonClicked,
onBack = vm::onBack,
- isAutoProceed = isAutoProceed,
+ onAutoProceed = if (isAutoProceed) vm::onAutoProceed else null,
)
HOME_GESTURE ->
touchpadScreens
@@ -155,7 +155,7 @@ fun KeyboardTouchpadTutorialContainer(
.HomeGesture(
onDoneButtonClicked = vm::onDoneButtonClicked,
onBack = vm::onBack,
- isAutoProceed = isScopeAll,
+ onAutoProceed = if (isScopeAll) vm::onAutoProceed else null,
)
ACTION_KEY ->
ActionKeyTutorialScreen(
diff --git a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/viewmodel/KeyboardTouchpadTutorialViewModel.kt b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/viewmodel/KeyboardTouchpadTutorialViewModel.kt
index eeb4b697a5fc..90e3af4db6fa 100644
--- a/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/viewmodel/KeyboardTouchpadTutorialViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/viewmodel/KeyboardTouchpadTutorialViewModel.kt
@@ -42,6 +42,8 @@ import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import java.util.Optional
+import kotlin.time.Duration.Companion.seconds
+import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@@ -49,6 +51,7 @@ import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filterNot
import kotlinx.coroutines.flow.runningFold
+@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
class KeyboardTouchpadTutorialViewModel(
private val gesturesInteractor: Optional<TouchpadGesturesInteractor>,
private val keyboardTouchpadConnectionInteractor: KeyboardTouchpadConnectionInteractor,
@@ -149,7 +152,16 @@ class KeyboardTouchpadTutorialViewModel(
clearDeviceStateForScreen(_screen.value)
}
+ suspend fun onAutoProceed() {
+ delay(AUTO_PROCEED_DELAY)
+ progressToNextScreen()
+ }
+
fun onDoneButtonClicked() {
+ progressToNextScreen()
+ }
+
+ private fun progressToNextScreen() {
var nextScreen = screenSequence.nextScreen(_screen.value)
while (nextScreen != null) {
if (requiredHardwarePresent(nextScreen)) {
@@ -250,6 +262,10 @@ class KeyboardTouchpadTutorialViewModel(
private object SingleScreenOnly : ScreenSequence {
override fun nextScreen(current: Screen): Screen? = null
}
+
+ companion object {
+ private val AUTO_PROCEED_DELAY = 3.seconds
+ }
}
enum class RequiredHardware {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ResourceTrimmer.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ResourceTrimmer.kt
index b3027edb5f0a..b8ee20bc973b 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ResourceTrimmer.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ResourceTrimmer.kt
@@ -19,6 +19,7 @@ package com.android.systemui.keyguard
import android.annotation.WorkerThread
import android.content.ComponentCallbacks2
import android.util.Log
+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
@@ -31,7 +32,6 @@ import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.filter
-import com.android.app.tracing.coroutines.launchTraced as launch
/**
* Releases cached resources on allocated by keyguard.
@@ -54,7 +54,7 @@ constructor(
Log.d(LOG_TAG, "Resource trimmer registered.")
applicationScope.launch(context = bgDispatcher) {
keyguardTransitionInteractor
- .isFinishedIn(scene = Scenes.Gone, stateWithoutSceneContainer = GONE)
+ .isFinishedIn(content = Scenes.Gone, stateWithoutSceneContainer = GONE)
.filter { isOnGone -> isOnGone }
.collect { onKeyguardGone() }
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
index 97ad2d7d36ff..6b1248b6983e 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/dagger/KeyguardModule.java
@@ -247,14 +247,13 @@ public interface KeyguardModule {
@Provides
@SysUISingleton
static BlurConfig provideBlurConfig(@Main Resources resources) {
- int minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius);
int maxBlurRadius =
Flags.notificationShadeBlur() || Flags.bouncerUiRevamp()
|| Flags.glanceableHubBlurredBackground()
? resources.getDimensionPixelSize(R.dimen.max_shade_window_blur_radius)
: resources.getDimensionPixelSize(R.dimen.max_window_blur_radius);
- return new BlurConfig(minBlurRadius, maxBlurRadius);
+ return new BlurConfig(0.0f, maxBlurRadius);
}
/** */
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractor.kt
index 6367b5c2df8e..65ea6735c64b 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DeviceEntrySideFpsOverlayInteractor.kt
@@ -22,12 +22,11 @@ import com.android.keyguard.KeyguardUpdateMonitor
import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.data.repository.DeviceEntryFingerprintAuthRepository
import com.android.systemui.res.R
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 com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.shade.ShadeDisplayAware
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
@@ -59,9 +58,9 @@ constructor(
private val isSideFpsIndicatorOnPrimaryBouncerEnabled: Boolean
get() = context.resources.getBoolean(R.bool.config_show_sidefps_hint_on_bouncer)
- private val isBouncerSceneActive: Flow<Boolean> =
+ private val isBouncerOverlayActive: Flow<Boolean> =
if (SceneContainerFlag.isEnabled) {
- sceneInteractor.currentScene.map { it == Scenes.Bouncer }.distinctUntilChanged()
+ sceneInteractor.currentOverlays.map { Overlays.Bouncer in it }.distinctUntilChanged()
} else {
flowOf(false)
}
@@ -73,7 +72,7 @@ constructor(
primaryBouncerInteractor.startingToHide,
primaryBouncerInteractor.startingDisappearAnimation.filterNotNull(),
// Bouncer scene visibility changes.
- isBouncerSceneActive,
+ isBouncerOverlayActive,
deviceEntryFingerprintAuthRepository.shouldUpdateIndicatorVisibility.filter { it },
)
.map {
@@ -105,7 +104,7 @@ constructor(
private fun isBouncerActive(): Boolean {
if (SceneContainerFlag.isEnabled) {
- return sceneInteractor.currentScene.value == Scenes.Bouncer
+ return Overlays.Bouncer in sceneInteractor.currentOverlays.value
}
return primaryBouncerInteractor.isBouncerShowing() &&
!primaryBouncerInteractor.isAnimatingAway()
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardBypassInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardBypassInteractor.kt
index d793064f918e..762403d8cf31 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardBypassInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardBypassInteractor.kt
@@ -21,6 +21,7 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dump.DumpManager
import com.android.systemui.keyguard.data.repository.KeyguardBypassRepository
import com.android.systemui.scene.domain.interactor.SceneInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.util.kotlin.FlowDumperImpl
@@ -61,7 +62,9 @@ constructor(
.flatMapLatest { isBypassAvailable ->
if (isBypassAvailable) {
combine(
- sceneInteractor.currentScene.map { scene -> scene == Scenes.Bouncer },
+ sceneInteractor.currentOverlays.map { overlays ->
+ Overlays.Bouncer in overlays
+ },
alternateBouncerInteractor.isVisible,
sceneInteractor.currentScene.map { scene -> scene == Scenes.Lockscreen },
keyguardQuickAffordanceInteractor.launchingAffordance,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt
index d8c707f9baeb..4c238f4e9f8a 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardDismissActionInteractor.kt
@@ -101,7 +101,7 @@ constructor(
.map {}
} else {
transitionInteractor
- .isFinishedIn(scene = Scenes.Gone, stateWithoutSceneContainer = GONE)
+ .isFinishedIn(content = Scenes.Gone, stateWithoutSceneContainer = GONE)
.filter { it }
.map {}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
index f84d29f57cc7..7977000ed5c8 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
@@ -248,7 +248,7 @@ constructor(
val topClippingBounds: Flow<Int?> by lazy {
combineTransform(
keyguardTransitionInteractor
- .transitionValue(scene = Scenes.Gone, stateWithoutSceneContainer = GONE)
+ .transitionValue(content = Scenes.Gone, stateWithoutSceneContainer = GONE)
.map { it == 1f }
.onStart { emit(false) }
.distinctUntilChanged(),
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardOcclusionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardOcclusionInteractor.kt
index 278a98f8b157..f2d7d914c817 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardOcclusionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardOcclusionInteractor.kt
@@ -97,7 +97,7 @@ constructor(
powerInteractor.detailedWakefulness
.sample(
transitionInteractor.isFinishedIn(
- scene = Scenes.Gone,
+ content = Scenes.Gone,
stateWithoutSceneContainer = KeyguardState.GONE,
),
::Pair,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractor.kt
index b9784f14fa1c..8e0cb84c1781 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSurfaceBehindInteractor.kt
@@ -63,7 +63,7 @@ constructor(
edgeWithoutSceneContainer = Edge.create(to = KeyguardState.GONE),
),
transitionInteractor.isFinishedIn(
- scene = Scenes.Gone,
+ content = Scenes.Gone,
stateWithoutSceneContainer = KeyguardState.GONE,
),
notificationLaunchInteractor.isLaunchAnimationRunning,
@@ -74,18 +74,14 @@ constructor(
// If the notification launch animation is running, leave the alpha at 0f.
// The ActivityLaunchAnimator will morph it from the notification at the
// appropriate time.
- return@combine KeyguardSurfaceBehindModel(
- alpha = 0f,
- )
+ return@combine KeyguardSurfaceBehindModel(alpha = 0f)
} else if (
inWindowLauncherUnlockAnimationInteractor.get().isLauncherUnderneath()
) {
// The Launcher icons have their own translation/alpha animations during the
// in-window animation. We'll just make the surface visible and let Launcher
// do its thing.
- return@combine KeyguardSurfaceBehindModel(
- alpha = 1f,
- )
+ return@combine KeyguardSurfaceBehindModel(alpha = 1f)
} else {
// Otherwise, animate a surface in via alpha/translation, and apply the
// swipe velocity (if available) to the translation spring.
@@ -113,10 +109,10 @@ constructor(
notificationLaunchInteractor.isLaunchAnimationRunning
.sample(
transitionInteractor.isFinishedIn(
- scene = Scenes.Gone,
+ content = Scenes.Gone,
stateWithoutSceneContainer = KeyguardState.GONE,
),
- ::Pair
+ ::Pair,
)
.map { (animationRunning, isOnGone) -> animationRunning && !isOnGone }
.onStart { emit(false) }
@@ -126,10 +122,9 @@ constructor(
* means we're going to animate the surface, even if animators aren't yet running).
*/
val isAnimatingSurface =
- combine(
- repository.isAnimatingSurface,
- isNotificationLaunchAnimationRunningOnKeyguard,
- ) { animatingSurface, animatingLaunch ->
+ combine(repository.isAnimatingSurface, isNotificationLaunchAnimationRunningOnKeyguard) {
+ animatingSurface,
+ animatingLaunch ->
animatingSurface || animatingLaunch
}
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 3b4a1488095a..af58d10f3066 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
@@ -23,6 +23,7 @@ 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.ContentKey
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.SceneKey
import com.android.systemui.Flags.keyguardTransitionForceFinishOnScreenOff
@@ -236,28 +237,28 @@ constructor(
if (!SceneContainerFlag.isEnabled) {
return flow
}
- if (edge.isSceneWildcardEdge()) {
+ if (edge.isContentWildcardEdge()) {
return simulateTransitionStepsForSceneTransitions(edge)
}
return flow.filterTraced("stl-filter") { step ->
- val fromScene =
+ val fromContent =
when (edge) {
- is Edge.StateToState -> edge.from?.mapToSceneContainerScene()
- is Edge.StateToScene -> edge.from?.mapToSceneContainerScene()
- is Edge.SceneToState -> edge.from
+ is Edge.StateToState -> edge.from?.mapToSceneContainerContent()
+ is Edge.StateToContent -> edge.from?.mapToSceneContainerContent()
+ is Edge.ContentToState -> edge.from
}
- val toScene =
+ val toContent =
when (edge) {
- is Edge.StateToState -> edge.to?.mapToSceneContainerScene()
- is Edge.StateToScene -> edge.to
- is Edge.SceneToState -> edge.to?.mapToSceneContainerScene()
+ is Edge.StateToState -> edge.to?.mapToSceneContainerContent()
+ is Edge.StateToContent -> edge.to
+ is Edge.ContentToState -> edge.to?.mapToSceneContainerContent()
}
val isTransitioningBetweenLockscreenStates =
- fromScene.isLockscreenOrNull() && toScene.isLockscreenOrNull()
+ fromContent.isLockscreenOrNull() && toContent.isLockscreenOrNull()
val isTransitioningBetweenDesiredScenes =
- sceneInteractor.transitionState.value.isTransitioning(fromScene, toScene)
+ sceneInteractor.transitionState.value.isTransitioning(fromContent, toContent)
// When in STL A -> B settles in A we can't do the same in KTF as KTF requires us to
// start B -> A to get back to A. [LockscreenSceneTransitionInteractor] will emit these
@@ -266,8 +267,8 @@ constructor(
// this condition to not filter out the STARTED and FINISHED step of the "artificially"
// reversed B -> A transition.
val belongsToInstantReversedTransition =
- sceneInteractor.transitionState.value.isIdle(toScene) &&
- sceneTransitionPair.value.previousValue.isTransitioning(toScene, fromScene)
+ sceneInteractor.topmostContent.value == toContent &&
+ sceneTransitionPair.value.previousValue.isTransitioning(toContent, fromContent)
// We can't compare the terminal step with the current sceneTransition because
// a) STL has no guarantee that it will settle in Idle() when finished/canceled
@@ -276,7 +277,7 @@ constructor(
val terminalStepBelongsToPreviousTransition =
(step.transitionState == TransitionState.FINISHED ||
step.transitionState == TransitionState.CANCELED) &&
- sceneTransitionPair.value.previousValue.isTransitioning(fromScene, toScene)
+ sceneTransitionPair.value.previousValue.isTransitioning(fromContent, toContent)
return@filterTraced isTransitioningBetweenLockscreenStates ||
isTransitioningBetweenDesiredScenes ||
@@ -285,7 +286,7 @@ constructor(
}
}
- private fun SceneKey?.isLockscreenOrNull() = this == Scenes.Lockscreen || this == null
+ private fun ContentKey?.isLockscreenOrNull() = this == Scenes.Lockscreen || this == null
/**
* This function will return a flow that simulates TransitionSteps based on STL movements
@@ -317,8 +318,8 @@ constructor(
when (edge) {
is Edge.StateToState ->
throw IllegalStateException("Should not be reachable.")
- is Edge.SceneToState -> it.isTransitioning(from = edge.from)
- is Edge.StateToScene -> it.isTransitioning(to = edge.to)
+ is Edge.ContentToState -> it.isTransitioning(from = edge.from)
+ is Edge.StateToContent -> it.isTransitioning(to = edge.to)
}
if (!isMatchingTransition) {
return@flatMapLatestWithFinished flowOf()
@@ -361,41 +362,43 @@ constructor(
*/
private fun <T> Flow<T>.flatMapLatestWithFinished(
transform: suspend (T) -> Flow<TransitionStep>
- ): Flow<TransitionStep> = channelFlow {
- var job: Job? = null
- var startedEmitted = false
-
- coroutineScope {
- collect { value ->
- traceCoroutine("cancelAndJoin") { job?.cancelAndJoin() }
-
- job = launch("inner") {
- val innerFlow = transform(value)
- try {
- innerFlow.collect { step ->
- if (step.transitionState == TransitionState.STARTED) {
- startedEmitted = true
+ ): Flow<TransitionStep> =
+ channelFlow {
+ var job: Job? = null
+ var startedEmitted = false
+
+ coroutineScope {
+ collect { value ->
+ traceCoroutine("cancelAndJoin") { job?.cancelAndJoin() }
+
+ job =
+ launch("inner") {
+ val innerFlow = transform(value)
+ try {
+ innerFlow.collect { step ->
+ if (step.transitionState == TransitionState.STARTED) {
+ startedEmitted = true
+ }
+ traceCoroutine("send($step)") { send(step) }
+ }
+ } finally {
+ if (startedEmitted) {
+ val step =
+ TransitionStep(
+ from = UNDEFINED,
+ to = UNDEFINED,
+ value = 1f,
+ transitionState = TransitionState.FINISHED,
+ )
+ traceCoroutine("send($step)") { send(step) }
+ startedEmitted = false
+ }
+ }
}
- traceCoroutine("send($step)") { send(step) }
- }
- } finally {
- if (startedEmitted) {
- val step =
- TransitionStep(
- from = UNDEFINED,
- to = UNDEFINED,
- value = 1f,
- transitionState = TransitionState.FINISHED,
- )
- traceCoroutine("send($step)") { send(step) }
- startedEmitted = false
- }
}
}
}
- }
- }
- .traceAs("flatMapLatestWithFinished")
+ .traceAs("flatMapLatestWithFinished")
/**
* Converts old KTF states to UNDEFINED when [SceneContainerFlag] is enabled.
@@ -414,17 +417,17 @@ constructor(
from = edge.from?.mapToSceneContainerState(),
to = edge.to?.mapToSceneContainerState(),
)
- is Edge.SceneToState -> Edge.create(UNDEFINED, edge.to)
- is Edge.StateToScene -> Edge.create(edge.from, UNDEFINED)
+ is Edge.ContentToState -> Edge.create(UNDEFINED, edge.to)
+ is Edge.StateToContent -> Edge.create(edge.from, UNDEFINED)
}
}
fun transitionValue(
- scene: SceneKey? = null,
+ content: ContentKey? = null,
stateWithoutSceneContainer: KeyguardState,
): Flow<Float> {
- return if (SceneContainerFlag.isEnabled && scene != null) {
- sceneInteractor.transitionProgress(scene)
+ return if (SceneContainerFlag.isEnabled && content != null) {
+ sceneInteractor.transitionProgress(content)
} else {
transitionValue(stateWithoutSceneContainer)
}
@@ -439,7 +442,7 @@ constructor(
fun transitionValue(state: KeyguardState): Flow<Float> {
if (SceneContainerFlag.isEnabled && state != state.mapToSceneContainerState()) {
Log.e(TAG, "SceneContainer is enabled but a deprecated state $state is used.")
- return transitionValue(state.mapToSceneContainerScene()!!, state)
+ return transitionValue(state.mapToSceneContainerContent()!!, state)
}
return getTransitionValueFlow(state)
}
@@ -533,13 +536,13 @@ constructor(
*/
fun isInTransition(edge: Edge, edgeWithoutSceneContainer: Edge? = null): Flow<Boolean> {
return if (SceneContainerFlag.isEnabled) {
- if (edge.isSceneWildcardEdge()) {
+ if (edge.isContentWildcardEdge()) {
sceneInteractor.transitionState.map {
when (edge) {
is Edge.StateToState ->
throw IllegalStateException("Should not be reachable.")
- is Edge.SceneToState -> it.isTransitioning(from = edge.from)
- is Edge.StateToScene -> it.isTransitioning(to = edge.to)
+ is Edge.ContentToState -> it.isTransitioning(from = edge.from)
+ is Edge.StateToContent -> it.isTransitioning(to = edge.to)
}
}
} else {
@@ -581,10 +584,15 @@ constructor(
return finishedKeyguardState.map { stateMatcher(it) }.distinctUntilChanged()
}
- fun isFinishedIn(scene: SceneKey, stateWithoutSceneContainer: KeyguardState): Flow<Boolean> {
+ fun isFinishedIn(
+ content: ContentKey,
+ stateWithoutSceneContainer: KeyguardState,
+ ): Flow<Boolean> {
return if (SceneContainerFlag.isEnabled) {
- sceneInteractor.transitionState.map {
- it.isIdle(scene) || it.isTransitioning(from = scene)
+ combine(sceneInteractor.topmostContent, sceneInteractor.transitionState) {
+ topmostContent,
+ state ->
+ topmostContent == content || state.isTransitioning(from = content)
}
} else {
isFinishedIn(stateWithoutSceneContainer)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt
index 61cf2cdab92d..68d595ebf0b6 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/WindowManagerLockscreenVisibilityInteractor.kt
@@ -61,7 +61,7 @@ constructor(
private val defaultSurfaceBehindVisibility =
combine(
transitionInteractor.isFinishedIn(
- scene = Scenes.Gone,
+ content = Scenes.Gone,
stateWithoutSceneContainer = KeyguardState.GONE,
),
wakeToGoneInteractor.canWakeDirectlyToGone,
@@ -121,7 +121,7 @@ constructor(
when {
state.isTransitioning(from = Scenes.Lockscreen, to = Scenes.Gone) ->
isDeviceEnteredDirectly
- state.isTransitioning(from = Scenes.Bouncer, to = Scenes.Gone) ->
+ state.isTransitioning(from = Overlays.Bouncer, to = Scenes.Gone) ->
(state as Transition).progress.map { progress ->
progress >
FromPrimaryBouncerTransitionInteractor
@@ -179,7 +179,7 @@ constructor(
edgeWithoutSceneContainer = Edge.create(to = KeyguardState.GONE),
),
transitionInteractor.isFinishedIn(
- scene = Scenes.Gone,
+ content = Scenes.Gone,
stateWithoutSceneContainer = KeyguardState.GONE,
),
surfaceBehindInteractor.isAnimatingSurface,
@@ -202,21 +202,23 @@ constructor(
when (it) {
is Idle -> {
when (it.currentScene) {
- in keyguardScenes -> flowOf(true)
- in nonKeyguardScenes -> flowOf(false)
- in keyguardAgnosticScenes -> isDeviceNotEnteredDirectly
+ in keyguardContent -> flowOf(true)
+ in nonKeyguardContent -> flowOf(false)
+ in keyguardAgnosticContent -> isDeviceNotEnteredDirectly
else ->
throw IllegalStateException("Unknown scene: ${it.currentScene}")
}
}
is Transition -> {
when {
- it.isTransitioningSets(from = keyguardScenes) -> flowOf(true)
- it.isTransitioningSets(from = nonKeyguardScenes) -> flowOf(false)
- it.isTransitioningSets(from = keyguardAgnosticScenes) ->
+ it.isTransitioningSets(from = keyguardContent) -> flowOf(true)
+ it.isTransitioningSets(from = nonKeyguardContent) -> flowOf(false)
+ it.isTransitioningSets(from = keyguardAgnosticContent) ->
isDeviceNotEnteredDirectly
else ->
- throw IllegalStateException("Unknown scene: ${it.fromContent}")
+ throw IllegalStateException(
+ "Unknown content: ${it.fromContent}"
+ )
}
}
}
@@ -330,22 +332,23 @@ constructor(
companion object {
/**
- * Scenes that are part of the keyguard and are shown when the device is locked or when the
+ * Content that is part of the keyguard and are shown when the device is locked or when the
* keyguard still needs to be dismissed.
*/
- val keyguardScenes = setOf(Scenes.Lockscreen, Scenes.Bouncer, Scenes.Communal, Scenes.Dream)
+ val keyguardContent =
+ setOf(Scenes.Lockscreen, Overlays.Bouncer, Scenes.Communal, Scenes.Dream)
/**
- * Scenes that don't belong in the keyguard family and cannot show when the device is locked
- * or when the keyguard still needs to be dismissed.
+ * Content that doesn't belong in the keyguard family and cannot show when the device is
+ * locked or when the keyguard still needs to be dismissed.
*/
- private val nonKeyguardScenes = setOf(Scenes.Gone)
+ private val nonKeyguardContent = setOf(Scenes.Gone)
/**
- * Scenes that can show regardless of device lock or keyguard dismissal states. Other
+ * Content that can show regardless of device lock or keyguard dismissal states. Other
* sources of state need to be consulted to know whether the device has been entered or not.
*/
- private val keyguardAgnosticScenes =
+ private val keyguardAgnosticContent =
setOf(
Scenes.Shade,
Scenes.QuickSettings,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/Edge.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/Edge.kt
index 1306b2690c05..4cc4d271357c 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/Edge.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/Edge.kt
@@ -16,7 +16,7 @@
package com.android.systemui.keyguard.shared.model
import android.util.Log
-import com.android.compose.animation.scene.SceneKey
+import com.android.compose.animation.scene.ContentKey
import com.android.systemui.keyguard.shared.model.KeyguardState.UNDEFINED
import com.android.systemui.scene.shared.flag.SceneContainerFlag
@@ -29,8 +29,8 @@ sealed class Edge {
fun verifyValidKeyguardStates() {
when (this) {
is StateToState -> verifyValidKeyguardStates(from, to)
- is SceneToState -> verifyValidKeyguardStates(null, to)
- is StateToScene -> verifyValidKeyguardStates(from, null)
+ is ContentToState -> verifyValidKeyguardStates(null, to)
+ is StateToContent -> verifyValidKeyguardStates(from, null)
}
}
@@ -66,19 +66,16 @@ sealed class Edge {
}
} else {
if (from == UNDEFINED || to == UNDEFINED) {
- Log.e(
- TAG,
- "UNDEFINED should not be used when scene container is disabled",
- )
+ Log.e(TAG, "UNDEFINED should not be used when scene container is disabled")
}
}
}
- fun isSceneWildcardEdge(): Boolean {
+ fun isContentWildcardEdge(): Boolean {
return when (this) {
is StateToState -> false
- is SceneToState -> to == null
- is StateToScene -> from == null
+ is ContentToState -> to == null
+ is StateToContent -> from == null
}
}
@@ -89,9 +86,9 @@ sealed class Edge {
}
}
- data class StateToScene(val from: KeyguardState? = null, val to: SceneKey) : Edge()
+ data class StateToContent(val from: KeyguardState? = null, val to: ContentKey) : Edge()
- data class SceneToState(val from: SceneKey, val to: KeyguardState? = null) : Edge()
+ data class ContentToState(val from: ContentKey, val to: KeyguardState? = null) : Edge()
companion object {
private const val TAG = "Edge"
@@ -102,11 +99,11 @@ sealed class Edge {
@JvmStatic
@JvmOverloads
- fun create(from: KeyguardState? = null, to: SceneKey) = StateToScene(from, to)
+ fun create(from: KeyguardState? = null, to: ContentKey) = StateToContent(from, to)
@JvmStatic
@JvmOverloads
- fun create(from: SceneKey, to: KeyguardState? = null) = SceneToState(from, to)
+ fun create(from: ContentKey, to: KeyguardState? = null) = ContentToState(from, to)
/**
* This edge is a placeholder for when an edge needs to be passed but there is no edge for
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardState.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardState.kt
index f0e79b8590a0..21bfb5f79abb 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardState.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardState.kt
@@ -16,8 +16,9 @@
package com.android.systemui.keyguard.shared.model
import android.util.Log
-import com.android.compose.animation.scene.SceneKey
+import com.android.compose.animation.scene.ContentKey
import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
/** List of all possible states to transition to/from */
@@ -130,7 +131,7 @@ enum class KeyguardState {
}
}
- fun mapToSceneContainerScene(): SceneKey? {
+ fun mapToSceneContainerContent(): ContentKey? {
return when (this) {
OFF,
DOZING,
@@ -140,7 +141,7 @@ enum class KeyguardState {
OCCLUDED,
LOCKSCREEN -> Scenes.Lockscreen
GLANCEABLE_HUB -> Scenes.Communal
- PRIMARY_BOUNCER -> Scenes.Bouncer
+ PRIMARY_BOUNCER -> Overlays.Bouncer
GONE -> Scenes.Gone
UNDEFINED -> null
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerToPrimaryBouncerTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerToPrimaryBouncerTransitionViewModel.kt
index 43cce4b1c40c..74d471c7c1d6 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerToPrimaryBouncerTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AlternateBouncerToPrimaryBouncerTransitionViewModel.kt
@@ -27,7 +27,7 @@ import com.android.systemui.keyguard.ui.transitions.BlurConfig
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
import com.android.systemui.keyguard.ui.transitions.PrimaryBouncerTransition
import com.android.systemui.scene.shared.flag.SceneContainerFlag
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.ui.composable.transitions.TO_BOUNCER_FADE_FRACTION
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
@@ -49,7 +49,7 @@ constructor(
animationFlow
.setup(
duration = FromAlternateBouncerTransitionInteractor.TO_PRIMARY_BOUNCER_DURATION,
- edge = Edge.create(from = ALTERNATE_BOUNCER, to = Scenes.Bouncer),
+ edge = Edge.create(from = ALTERNATE_BOUNCER, to = Overlays.Bouncer),
)
.setupWithoutSceneContainer(
edge = Edge.create(from = ALTERNATE_BOUNCER, to = PRIMARY_BOUNCER)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodToPrimaryBouncerTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodToPrimaryBouncerTransitionViewModel.kt
index 8b5e3b9756e3..a22d21ae1371 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodToPrimaryBouncerTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodToPrimaryBouncerTransitionViewModel.kt
@@ -26,7 +26,7 @@ import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow
import com.android.systemui.keyguard.ui.transitions.BlurConfig
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
import com.android.systemui.keyguard.ui.transitions.PrimaryBouncerTransition
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.shared.model.Overlays
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.emptyFlow
@@ -44,7 +44,7 @@ constructor(blurConfig: BlurConfig, animationFlow: KeyguardTransitionAnimationFl
animationFlow
.setup(
duration = FromAodTransitionInteractor.TO_PRIMARY_BOUNCER_DURATION,
- edge = Edge.create(from = AOD, to = Scenes.Bouncer),
+ edge = Edge.create(from = AOD, to = Overlays.Bouncer),
)
.setupWithoutSceneContainer(edge = Edge.create(from = AOD, to = PRIMARY_BOUNCER))
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DozingToPrimaryBouncerTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DozingToPrimaryBouncerTransitionViewModel.kt
index ff96e035bc81..2c712d106a6e 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DozingToPrimaryBouncerTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DozingToPrimaryBouncerTransitionViewModel.kt
@@ -26,7 +26,7 @@ import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow
import com.android.systemui.keyguard.ui.transitions.BlurConfig
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
import com.android.systemui.keyguard.ui.transitions.PrimaryBouncerTransition
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.shared.model.Overlays
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.emptyFlow
@@ -45,7 +45,7 @@ constructor(private val blurConfig: BlurConfig, animationFlow: KeyguardTransitio
animationFlow
.setup(
duration = TO_PRIMARY_BOUNCER_DURATION,
- edge = Edge.create(from = DOZING, to = Scenes.Bouncer),
+ edge = Edge.create(from = DOZING, to = Overlays.Bouncer),
)
.setupWithoutSceneContainer(edge = Edge.create(from = DOZING, to = PRIMARY_BOUNCER))
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 def87a8e2717..d4676bc9c146 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
@@ -40,6 +40,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.PRIMARY_BOUNCER
import com.android.systemui.keyguard.shared.model.TransitionState.RUNNING
import com.android.systemui.keyguard.shared.model.TransitionState.STARTED
import com.android.systemui.keyguard.ui.StateToValue
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shade.ui.viewmodel.NotificationShadeWindowModel
@@ -182,7 +183,7 @@ constructor(
edgeWithoutSceneContainer = Edge.create(from = LOCKSCREEN, to = GONE),
),
keyguardTransitionInteractor.isInTransition(
- edge = Edge.create(from = Scenes.Bouncer, to = LOCKSCREEN),
+ edge = Edge.create(from = Overlays.Bouncer, to = LOCKSCREEN),
edgeWithoutSceneContainer =
Edge.create(from = PRIMARY_BOUNCER, to = LOCKSCREEN),
),
@@ -226,7 +227,7 @@ constructor(
.map { it > 1f - offToLockscreenTransitionViewModel.alphaStartAt }
.onStart { emit(false) },
keyguardTransitionInteractor
- .transitionValue(scene = Scenes.Gone, stateWithoutSceneContainer = GONE)
+ .transitionValue(content = Scenes.Gone, stateWithoutSceneContainer = GONE)
.map { it == 1f }
.onStart { emit(false) },
)
@@ -361,7 +362,7 @@ constructor(
.map { it > 0f }
.onStart { emit(false) },
keyguardTransitionInteractor.isFinishedIn(
- scene = Scenes.Gone,
+ content = Scenes.Gone,
stateWithoutSceneContainer = GONE,
),
deviceEntryInteractor.isBypassEnabled,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModel.kt
index b96c879157dc..3758afa61ed4 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenToPrimaryBouncerTransitionViewModel.kt
@@ -27,7 +27,7 @@ import com.android.systemui.keyguard.ui.transitions.BlurConfig
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
import com.android.systemui.keyguard.ui.transitions.PrimaryBouncerTransition
import com.android.systemui.scene.shared.flag.SceneContainerFlag
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.ui.composable.transitions.TO_BOUNCER_FADE_FRACTION
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
@@ -50,7 +50,7 @@ constructor(
animationFlow
.setup(
duration = FromLockscreenTransitionInteractor.TO_PRIMARY_BOUNCER_DURATION,
- edge = Edge.create(from = LOCKSCREEN, to = Scenes.Bouncer),
+ edge = Edge.create(from = LOCKSCREEN, to = Overlays.Bouncer),
)
.setupWithoutSceneContainer(edge = Edge.create(from = LOCKSCREEN, to = PRIMARY_BOUNCER))
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenUserActionsViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenUserActionsViewModel.kt
index 06c27d31cc3b..0eeb6c66c3bc 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenUserActionsViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenUserActionsViewModel.kt
@@ -21,6 +21,7 @@ import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
import com.android.systemui.scene.domain.interactor.SceneContainerOcclusionInteractor
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.ui.viewmodel.UserActionsViewModel
import com.android.systemui.shade.domain.interactor.ShadeInteractor
@@ -60,7 +61,11 @@ constructor(
occlusionInteractor.isOccludingActivityShown,
) { isDeviceUnlocked, shadeMode, isOccluded ->
buildList {
- add(Swipe.Up to if (isDeviceUnlocked) Scenes.Gone else Scenes.Bouncer)
+ if (isDeviceUnlocked) {
+ add(Swipe.Up to Scenes.Gone)
+ } else {
+ add(Swipe.Up to Overlays.Bouncer)
+ }
addAll(
when (shadeMode) {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToAodTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToAodTransitionViewModel.kt
index dc75829f95ee..32bad8ed0146 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToAodTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToAodTransitionViewModel.kt
@@ -26,7 +26,7 @@ import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow
import com.android.systemui.keyguard.ui.transitions.BlurConfig
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
import com.android.systemui.keyguard.ui.transitions.PrimaryBouncerTransition
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.shared.model.Overlays
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.flow.Flow
@@ -49,7 +49,7 @@ constructor(
animationFlow
.setup(
duration = FromPrimaryBouncerTransitionInteractor.TO_AOD_DURATION,
- edge = Edge.create(from = Scenes.Bouncer, to = AOD),
+ edge = Edge.create(from = Overlays.Bouncer, to = AOD),
)
.setupWithoutSceneContainer(edge = Edge.create(from = PRIMARY_BOUNCER, to = AOD))
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToDozingTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToDozingTransitionViewModel.kt
index 7f431bc3e0f9..1b533440454c 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToDozingTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToDozingTransitionViewModel.kt
@@ -26,7 +26,7 @@ import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow
import com.android.systemui.keyguard.ui.transitions.BlurConfig
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
import com.android.systemui.keyguard.ui.transitions.PrimaryBouncerTransition
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.shared.model.Overlays
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.emptyFlow
@@ -49,7 +49,7 @@ constructor(
animationFlow
.setup(
duration = TO_DOZING_DURATION,
- edge = Edge.create(from = Scenes.Bouncer, to = DOZING),
+ edge = Edge.create(from = Overlays.Bouncer, to = DOZING),
)
.setupWithoutSceneContainer(edge = Edge.create(from = PRIMARY_BOUNCER, to = DOZING))
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToLockscreenTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToLockscreenTransitionViewModel.kt
index 9cb03874e412..5a111aa519fc 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToLockscreenTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/PrimaryBouncerToLockscreenTransitionViewModel.kt
@@ -28,7 +28,7 @@ import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow
import com.android.systemui.keyguard.ui.transitions.BlurConfig
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
import com.android.systemui.keyguard.ui.transitions.PrimaryBouncerTransition
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.shared.model.Overlays
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.flow.Flow
@@ -50,7 +50,7 @@ constructor(
animationFlow
.setup(
duration = FromPrimaryBouncerTransitionInteractor.TO_LOCKSCREEN_DURATION,
- edge = Edge.create(from = Scenes.Bouncer, to = LOCKSCREEN),
+ edge = Edge.create(from = Overlays.Bouncer, to = LOCKSCREEN),
)
.setupWithoutSceneContainer(edge = Edge.create(from = PRIMARY_BOUNCER, to = LOCKSCREEN))
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt
index 55d8b8c4def0..bfd48c825424 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt
@@ -683,7 +683,7 @@ constructor(
internal fun listenForAnyStateToGoneKeyguardTransition(scope: CoroutineScope): Job {
return scope.launch {
keyguardTransitionInteractor
- .isFinishedIn(scene = Scenes.Gone, stateWithoutSceneContainer = GONE)
+ .isFinishedIn(content = Scenes.Gone, stateWithoutSceneContainer = GONE)
.filter { it }
.collect {
showMediaCarousel()
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt
index b64cb3dd456a..f06c4cce0daa 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManager.kt
@@ -58,6 +58,7 @@ import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.statusbar.CrossFadeHelper
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController
+import com.android.systemui.statusbar.featurepods.popups.StatusBarPopupChips
import com.android.systemui.statusbar.notification.stack.StackStateAnimator
import com.android.systemui.statusbar.phone.KeyguardBypassController
import com.android.systemui.statusbar.policy.ConfigurationController
@@ -229,7 +230,7 @@ constructor(
else result.setIntersect(animationStartClipping, targetClipping)
}
- private val mediaHosts = arrayOfNulls<MediaHost>(LOCATION_COMMUNAL_HUB + 1)
+ private val mediaHosts = arrayOfNulls<MediaHost>(LOCATION_STATUS_BAR_POPUP + 1)
/**
* The last location where this view was at before going to the desired location. This is useful
@@ -374,6 +375,15 @@ constructor(
}
}
+ /** Is the Media Control StatusBarPopup showing */
+ var isMediaControlPopupShowing: Boolean = false
+ set(value) {
+ if (field != value && StatusBarPopupChips.isEnabled) {
+ field = value
+ updateDesiredLocation(forceNoAnimation = true)
+ }
+ }
+
/** Are location changes currently blocked? */
private val blockLocationChanges: Boolean
get() {
@@ -1225,6 +1235,7 @@ constructor(
// Keep the current location until we're allowed to again
return desiredLocation
}
+
val onLockscreen =
(!bypassController.bypassEnabled && (statusbarState == StatusBarState.KEYGUARD))
@@ -1234,6 +1245,8 @@ constructor(
(onCommunalNotDreaming && qsExpansion == 0.0f) || onCommunalDreamingAndShadeExpanding
val location =
when {
+ isMediaControlPopupShowing && StatusBarPopupChips.isEnabled ->
+ LOCATION_STATUS_BAR_POPUP
dreamOverlayActive && dreamMediaComplicationActive -> LOCATION_DREAM_OVERLAY
onCommunal -> LOCATION_COMMUNAL_HUB
(qsExpansion > 0.0f || inSplitShade) && !onLockscreen -> LOCATION_QS
@@ -1377,6 +1390,9 @@ constructor(
/** Attached to a view in the communal UI grid */
const val LOCATION_COMMUNAL_HUB = 4
+ /** Attached to a popup that is shown with a media control chip in the status bar */
+ const val LOCATION_STATUS_BAR_POPUP = 5
+
/** Attached at the root of the hierarchy in an overlay */
const val IN_OVERLAY = -1000
@@ -1422,6 +1438,7 @@ private annotation class TransformationType
MediaHierarchyManager.LOCATION_LOCKSCREEN,
MediaHierarchyManager.LOCATION_DREAM_OVERLAY,
MediaHierarchyManager.LOCATION_COMMUNAL_HUB,
+ MediaHierarchyManager.LOCATION_STATUS_BAR_POPUP,
MediaHierarchyManager.LOCATION_UNKNOWN,
],
)
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaUiEventLogger.kt b/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaUiEventLogger.kt
index 09f973cca343..f0da226129bf 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaUiEventLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/util/MediaUiEventLogger.kt
@@ -45,7 +45,7 @@ class MediaUiEventLogger @Inject constructor(private val logger: UiEventLogger)
uid: Int,
packageName: String,
instanceId: InstanceId,
- playbackLocation: Int
+ playbackLocation: Int,
) {
val event =
when (playbackLocation) {
@@ -61,7 +61,7 @@ class MediaUiEventLogger @Inject constructor(private val logger: UiEventLogger)
uid: Int,
packageName: String,
instanceId: InstanceId,
- playbackLocation: Int
+ playbackLocation: Int,
) {
val event =
when (playbackLocation) {
@@ -112,7 +112,7 @@ class MediaUiEventLogger @Inject constructor(private val logger: UiEventLogger)
MediaUiEvent.OPEN_SETTINGS_LONG_PRESS,
uid,
packageName,
- instanceId
+ instanceId,
)
}
@@ -156,6 +156,8 @@ class MediaUiEventLogger @Inject constructor(private val logger: UiEventLogger)
MediaUiEvent.MEDIA_CAROUSEL_LOCATION_DREAM
MediaHierarchyManager.LOCATION_COMMUNAL_HUB ->
MediaUiEvent.MEDIA_CAROUSEL_LOCATION_COMMUNAL
+ MediaHierarchyManager.LOCATION_STATUS_BAR_POPUP ->
+ MediaUiEvent.MEDIA_CAROUSEL_LOCATION_STATUS_BAR_POPUP
else -> throw IllegalArgumentException("Unknown media carousel location $location")
}
logger.log(event)
@@ -166,7 +168,7 @@ class MediaUiEventLogger @Inject constructor(private val logger: UiEventLogger)
MediaUiEvent.MEDIA_RECOMMENDATION_ADDED,
0,
packageName,
- instanceId
+ instanceId,
)
}
@@ -175,7 +177,7 @@ class MediaUiEventLogger @Inject constructor(private val logger: UiEventLogger)
MediaUiEvent.MEDIA_RECOMMENDATION_REMOVED,
0,
packageName,
- instanceId
+ instanceId,
)
}
@@ -184,7 +186,7 @@ class MediaUiEventLogger @Inject constructor(private val logger: UiEventLogger)
MediaUiEvent.MEDIA_RECOMMENDATION_ACTIVATED,
uid,
packageName,
- instanceId
+ instanceId,
)
}
@@ -194,7 +196,7 @@ class MediaUiEventLogger @Inject constructor(private val logger: UiEventLogger)
0,
packageName,
instanceId,
- position
+ position,
)
}
@@ -203,7 +205,7 @@ class MediaUiEventLogger @Inject constructor(private val logger: UiEventLogger)
MediaUiEvent.MEDIA_RECOMMENDATION_CARD_TAP,
0,
packageName,
- instanceId
+ instanceId,
)
}
@@ -212,7 +214,7 @@ class MediaUiEventLogger @Inject constructor(private val logger: UiEventLogger)
MediaUiEvent.MEDIA_OPEN_BROADCAST_DIALOG,
uid,
packageName,
- instanceId
+ instanceId,
)
}
@@ -221,7 +223,7 @@ class MediaUiEventLogger @Inject constructor(private val logger: UiEventLogger)
MediaUiEvent.MEDIA_CAROUSEL_SINGLE_PLAYER,
uid,
packageName,
- instanceId
+ instanceId,
)
}
@@ -230,7 +232,7 @@ class MediaUiEventLogger @Inject constructor(private val logger: UiEventLogger)
MediaUiEvent.MEDIA_CAROUSEL_MULTIPLE_PLAYERS,
uid,
packageName,
- instanceId
+ instanceId,
)
}
}
@@ -280,6 +282,8 @@ enum class MediaUiEvent(val metricId: Int) : UiEventLogger.UiEventEnum {
MEDIA_CAROUSEL_LOCATION_DREAM(1040),
@UiEvent(doc = "The media carousel moved to the communal hub UI")
MEDIA_CAROUSEL_LOCATION_COMMUNAL(1520),
+ @UiEvent(doc = "The media carousel moved to the status bar popup")
+ MEDIA_CAROUSEL_LOCATION_STATUS_BAR_POPUP(2170),
@UiEvent(doc = "A media recommendation card was added to the media carousel")
MEDIA_RECOMMENDATION_ADDED(1041),
@UiEvent(doc = "A media recommendation card was removed from the media carousel")
diff --git a/packages/SystemUI/src/com/android/systemui/media/dagger/MediaModule.java b/packages/SystemUI/src/com/android/systemui/media/dagger/MediaModule.java
index 45a3a8ce60c4..662a9c739ff6 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dagger/MediaModule.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dagger/MediaModule.java
@@ -49,6 +49,7 @@ public interface MediaModule {
String KEYGUARD = "media_keyguard";
String DREAM = "dream";
String COMMUNAL_HUB = "communal_Hub";
+ String POPUP = "popup";
/** */
@Provides
@@ -102,7 +103,26 @@ public interface MediaModule {
@Provides
@SysUISingleton
@Named(COMMUNAL_HUB)
- static MediaHost providesCommunalMediaHost(MediaHost.MediaHostStateHolder stateHolder,
+ static MediaHost providesCommunalMediaHost(
+ MediaHost.MediaHostStateHolder stateHolder,
+ MediaHierarchyManager hierarchyManager,
+ MediaDataManager dataManager,
+ MediaHostStatesManager statesManager,
+ MediaCarouselController carouselController,
+ MediaCarouselControllerLogger logger) {
+ return new MediaHost(
+ stateHolder,
+ hierarchyManager,
+ dataManager,
+ statesManager,
+ carouselController,
+ logger);
+ }
+
+ @Provides
+ @SysUISingleton
+ @Named(POPUP)
+ static MediaHost providesPopupMediaHost(MediaHost.MediaHostStateHolder stateHolder,
MediaHierarchyManager hierarchyManager, MediaDataManager dataManager,
MediaHostStatesManager statesManager, MediaCarouselController carouselController,
MediaCarouselControllerLogger logger) {
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapterLegacy.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapterLegacy.java
index ea4418427698..f8e57ef489aa 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapterLegacy.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapterLegacy.java
@@ -36,6 +36,7 @@ import android.view.ViewGroup;
import android.view.animation.LinearInterpolator;
import android.widget.CheckBox;
import android.widget.FrameLayout;
+import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.SeekBar;
@@ -44,7 +45,6 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
-import androidx.core.widget.CompoundButtonCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.android.media.flags.Flags;
@@ -130,6 +130,7 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {
final ViewGroup mContainerLayout;
final FrameLayout mItemLayout;
final FrameLayout mIconAreaLayout;
+ final ViewGroup mTextContent;
final TextView mTitleText;
final TextView mSubTitleText;
final TextView mVolumeValueText;
@@ -138,7 +139,7 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {
final ImageView mStatusIcon;
final CheckBox mCheckBox;
final ViewGroup mEndTouchArea;
- final ImageView mEndClickIcon;
+ final ImageButton mEndClickIcon;
@VisibleForTesting
MediaOutputSeekbar mSeekBar;
private final float mInactiveRadius;
@@ -152,6 +153,7 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {
super(view, context);
mContainerLayout = view.requireViewById(R.id.device_container);
mItemLayout = view.requireViewById(R.id.item_layout);
+ mTextContent = view.requireViewById(R.id.text_content);
mTitleText = view.requireViewById(R.id.title);
mSubTitleText = view.requireViewById(R.id.subtitle);
mTitleIcon = view.requireViewById(R.id.title_icon);
@@ -160,7 +162,7 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {
mStatusIcon = view.requireViewById(R.id.media_output_item_status);
mCheckBox = view.requireViewById(R.id.check_box);
mEndTouchArea = view.requireViewById(R.id.end_action_area);
- mEndClickIcon = view.requireViewById(R.id.media_output_item_end_click_icon);
+ mEndClickIcon = view.requireViewById(R.id.end_area_image_button);
mVolumeValueText = view.requireViewById(R.id.volume_value);
mIconAreaLayout = view.requireViewById(R.id.icon_area);
mInactiveRadius = mContext.getResources().getDimension(
@@ -178,9 +180,7 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {
mStatusIcon.setVisibility(View.GONE);
mEndTouchArea.setVisibility(View.GONE);
mEndClickIcon.setVisibility(View.GONE);
- mEndTouchArea.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
mContainerLayout.setOnClickListener(null);
- mContainerLayout.setContentDescription(null);
mTitleText.setTextColor(mController.getColorItemContent());
mSubTitleText.setTextColor(mController.getColorItemContent());
mVolumeValueText.setTextColor(mController.getColorItemContent());
@@ -188,7 +188,7 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {
updateIconAreaClickListener(null);
mSeekBar.setProgressTintList(
ColorStateList.valueOf(mController.getColorSeekbarProgress()));
- enableFocusPropertyForView(mContainerLayout);
+ updateContainerContentA11yImportance(true /* isImportant */);
renderItem(mediaItem, position);
}
@@ -256,10 +256,10 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {
mSeekBar.setVisibility(showSeekBar ? View.VISIBLE : View.GONE);
if (showSeekBar) {
initSeekbar(device, isCurrentSeekbarInvisible);
- disableFocusPropertyForView(mContainerLayout);
+ updateContainerContentA11yImportance(false /* isImportant */);
mSeekBar.setContentDescription(contentDescription);
} else {
- enableFocusPropertyForView(mContainerLayout);
+ updateContainerContentA11yImportance(true /* isImportant */);
}
}
@@ -268,18 +268,22 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {
boolean isCurrentSeekbarInvisible = mSeekBar.getVisibility() == View.GONE;
mSeekBar.setVisibility(View.VISIBLE);
initGroupSeekbar(isCurrentSeekbarInvisible);
- disableFocusPropertyForView(mContainerLayout);
+ updateContainerContentA11yImportance(false /* isImportant */);
mSeekBar.setContentDescription(contentDescription);
}
- private void disableFocusPropertyForView(View view) {
- view.setFocusable(false);
- view.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
- }
-
- private void enableFocusPropertyForView(View view) {
- view.setFocusable(true);
- view.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
+ /**
+ * Sets the a11y importance for the device container and it's text content. Making the
+ * container not important for a11y is required when the seekbar is visible.
+ */
+ private void updateContainerContentA11yImportance(boolean isImportant) {
+ mContainerLayout.setFocusable(isImportant);
+ mContainerLayout.setImportantForAccessibility(
+ isImportant ? View.IMPORTANT_FOR_ACCESSIBILITY_YES
+ : View.IMPORTANT_FOR_ACCESSIBILITY_NO);
+ mTextContent.setImportantForAccessibility(
+ isImportant ? View.IMPORTANT_FOR_ACCESSIBILITY_YES
+ : View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
}
void updateSubtitle(@Nullable String subtitle) {
@@ -576,26 +580,22 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {
mEndClickIcon.setImageTintList(
ColorStateList.valueOf(mController.getColorItemContent()));
mEndClickIcon.setOnClickListener(clickListener);
- mEndTouchArea.setOnClickListener(v -> mEndClickIcon.performClick());
Drawable drawable = mContext.getDrawable(iconDrawableId);
mEndClickIcon.setImageDrawable(drawable);
if (drawable instanceof AnimatedVectorDrawable) {
((AnimatedVectorDrawable) drawable).start();
}
- if (Flags.enableOutputSwitcherDeviceGrouping()) {
- mEndClickIcon.setContentDescription(mContext.getString(accessibilityStringId));
- }
+ mEndClickIcon.setContentDescription(mContext.getString(accessibilityStringId));
}
private void updateEndAreaForGroupCheckBox(@NonNull MediaDevice device,
@NonNull GroupStatus groupStatus) {
boolean isEnabled = isGroupCheckboxEnabled(groupStatus);
- mEndTouchArea.setOnClickListener(
- isEnabled ? (v) -> mCheckBox.performClick() : null);
- mEndTouchArea.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
updateEndAreaColor(groupStatus.selected() ? mController.getColorSeekbarProgress()
: mController.getColorItemBackground());
- mEndTouchArea.setContentDescription(getDeviceItemContentDescription(device));
+ mCheckBox.setContentDescription(mContext.getString(
+ groupStatus.selected() ? R.string.accessibility_remove_device_from_group
+ : R.string.accessibility_add_device_to_group));
mCheckBox.setOnCheckedChangeListener(null);
mCheckBox.setChecked(groupStatus.selected());
mCheckBox.setOnCheckedChangeListener(
@@ -606,10 +606,7 @@ public class MediaOutputAdapterLegacy extends MediaOutputAdapterBase {
}
private void setCheckBoxColor(CheckBox checkBox, int color) {
- int[][] states = {{android.R.attr.state_checked}, {}};
- int[] colors = {color, color};
- CompoundButtonCompat.setButtonTintList(checkBox, new
- ColorStateList(states, colors));
+ checkBox.setForegroundTintList(ColorStateList.valueOf(color));
}
private boolean shouldShowGroupCheckbox(@NonNull GroupStatus groupStatus) {
diff --git a/packages/SystemUI/src/com/android/systemui/model/SceneContainerPlugin.kt b/packages/SystemUI/src/com/android/systemui/model/SceneContainerPlugin.kt
index 0bf4c7e8d9f9..ea515c96d3f0 100644
--- a/packages/SystemUI/src/com/android/systemui/model/SceneContainerPlugin.kt
+++ b/packages/SystemUI/src/com/android/systemui/model/SceneContainerPlugin.kt
@@ -103,7 +103,7 @@ constructor(
it.scene == Scenes.QuickSettings ||
Overlays.QuickSettingsShade in it.overlays
},
- SYSUI_STATE_BOUNCER_SHOWING to { it.scene == Scenes.Bouncer },
+ SYSUI_STATE_BOUNCER_SHOWING to { Overlays.Bouncer in it.overlays },
SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING to
{
it.scene == Scenes.Lockscreen && !it.invisibleDueToOcclusion
diff --git a/packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModel.kt b/packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModel.kt
index c43c1a999fcb..18b4b7d2b5cf 100644
--- a/packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/notifications/ui/viewmodel/NotificationsShadeOverlayContentViewModel.kt
@@ -22,7 +22,6 @@ import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.lifecycle.Hydrator
import com.android.systemui.media.controls.domain.pipeline.interactor.MediaCarouselInteractor
import com.android.systemui.scene.domain.interactor.SceneInteractor
-import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel
import com.android.systemui.statusbar.disableflags.domain.interactor.DisableFlagsInteractor
@@ -96,18 +95,6 @@ constructor(
launch { hydrator.activate() }
launch {
- sceneInteractor.currentScene.collect { currentScene ->
- when (currentScene) {
- // TODO(b/369513770): The ShadeSession should be preserved in this scenario.
- Scenes.Bouncer ->
- shadeInteractor.collapseNotificationsShade(
- loggingReason = "bouncer shown while shade is open"
- )
- }
- }
- }
-
- launch {
shadeInteractor.isShadeTouchable
.distinctUntilChanged()
.filter { !it }
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 5930a24e01a0..6ad8bae05d7a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/composefragment/QSFragmentCompose.kt
@@ -306,7 +306,6 @@ constructor(
sceneState,
viewModel.containerViewModel.editModeViewModel.isEditing,
snapshotFlow { viewModel.expansionState }.map { it.progress },
- snapshotFlow { viewModel.isQSExpandingOrCollapsing },
)
}
@@ -538,10 +537,6 @@ constructor(
return qqsVisible.value
}
- override fun setQSExpandingOrCollapsing(isQSExpandingOrCollapsing: Boolean) {
- viewModel.isQSExpandingOrCollapsing = isQSExpandingOrCollapsing
- }
-
private fun setListenerCollections() {
lifecycleScope.launch {
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
@@ -882,7 +877,6 @@ private suspend fun synchronizeQsState(
state: MutableSceneTransitionLayoutState,
editMode: Flow<Boolean>,
expansion: Flow<Float>,
- isQSExpandingOrCollapsing: Flow<Boolean>,
) {
coroutineScope {
val animationScope = this
@@ -894,46 +888,31 @@ private suspend fun synchronizeQsState(
currentTransition = null
}
- var lastValidProgress = 0f
- combine(editMode, expansion, isQSExpandingOrCollapsing, ::Triple).collectLatest {
- (editMode, progress, isQSExpandingOrCollapsing) ->
+ editMode.combine(expansion, ::Pair).collectLatest { (editMode, progress) ->
if (editMode && state.currentScene != SceneKeys.EditMode) {
state.setTargetScene(SceneKeys.EditMode, animationScope)?.second?.join()
} else if (!editMode && state.currentScene == SceneKeys.EditMode) {
state.setTargetScene(SceneKeys.QuickSettings, animationScope)?.second?.join()
}
-
if (!editMode) {
- if (!isQSExpandingOrCollapsing) {
- if (progress == 0f) {
- snapTo(QuickQuickSettings)
- return@collectLatest
- }
+ when (progress) {
+ 0f -> snapTo(QuickQuickSettings)
+ 1f -> snapTo(QuickSettings)
+ else -> {
+ val transition = currentTransition
+ if (transition != null) {
+ transition.progress = progress
+ return@collectLatest
+ }
- if (progress == 1f) {
- snapTo(QuickSettings)
- return@collectLatest
+ val newTransition =
+ ExpansionTransition(progress).also { currentTransition = it }
+ state.startTransitionImmediately(
+ animationScope = animationScope,
+ transition = newTransition,
+ )
}
}
-
- var progress = progress
- if (progress >= 0f || progress <= 1f) {
- lastValidProgress = progress
- } else {
- progress = lastValidProgress
- }
-
- val transition = currentTransition
- if (transition != null) {
- transition.progress = progress
- return@collectLatest
- }
-
- val newTransition = ExpansionTransition(progress).also { currentTransition = it }
- state.startTransitionImmediately(
- animationScope = animationScope,
- transition = newTransition,
- )
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModel.kt
index b829bbce2f18..767acc5fa76a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/composefragment/viewmodel/QSFragmentComposeViewModel.kt
@@ -35,6 +35,7 @@ import com.android.systemui.animation.ShadeInterpolation
import com.android.systemui.classifier.Classifier
import com.android.systemui.classifier.domain.interactor.FalsingInteractor
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
+import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.Edge
@@ -60,7 +61,7 @@ import com.android.systemui.qs.panels.ui.viewmodel.MediaInRowInLandscapeViewMode
import com.android.systemui.qs.panels.ui.viewmodel.QuickQuickSettingsViewModel
import com.android.systemui.qs.ui.viewmodel.QuickSettingsContainerViewModel
import com.android.systemui.res.R
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.shade.LargeScreenHeaderHelper
import com.android.systemui.shade.ShadeDisplayAware
import com.android.systemui.shade.domain.interactor.ShadeInteractor
@@ -306,8 +307,6 @@ constructor(
val animateTilesExpansion: Boolean
get() = inFirstPage && !mediaSuddenlyAppearingInLandscape
- var isQSExpandingOrCollapsing by mutableStateOf(false)
-
private val inFirstPage: Boolean
get() = inFirstPageViewModel.inFirstPage
@@ -434,7 +433,7 @@ constructor(
initialValue = false,
source =
keyguardTransitionInteractor.isInTransition(
- Edge.create(to = Scenes.Bouncer),
+ Edge.create(to = Overlays.Bouncer),
Edge.create(to = KeyguardState.PRIMARY_BOUNCER),
),
)
@@ -541,7 +540,6 @@ constructor(
println("proposedTranslation", proposedTranslation)
println("expansionState", expansionState)
println("forceQS", forceQs)
- println("isShadeExpandingOrCollapsing", isQSExpandingOrCollapsing)
printSection("Derived values") {
println("headerTranslation", headerTranslation)
println("translationScaleY", translationScaleY)
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 fd5861fed20c..7daac45ddb15 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
@@ -61,6 +61,8 @@ import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.policy.BluetoothController;
+import dagger.Lazy;
+
import kotlinx.coroutines.Job;
import java.util.List;
@@ -84,7 +86,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
private final Executor mExecutor;
- private final BluetoothDetailsContentViewModel mDetailsContentViewModel;
+ private final Lazy<BluetoothDetailsContentViewModel> mDetailsContentViewModel;
private final FeatureFlags mFeatureFlags;
@Nullable
@@ -104,7 +106,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
QSLogger qsLogger,
BluetoothController bluetoothController,
FeatureFlags featureFlags,
- BluetoothDetailsContentViewModel detailsContentViewModel
+ Lazy<BluetoothDetailsContentViewModel> detailsContentViewModel
) {
super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
statusBarStateController, activityStarter, qsLogger);
@@ -133,7 +135,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
callback.accept(new BluetoothDetailsViewModel(() -> {
longClick(null);
return null;
- }, mDetailsContentViewModel))
+ }, mDetailsContentViewModel.get()))
);
return true;
}
@@ -158,7 +160,7 @@ public class BluetoothTile extends QSTileImpl<BooleanState> {
private void handleClickEvent(@Nullable Expandable expandable) {
if (mFeatureFlags.isEnabled(Flags.BLUETOOTH_QS_TILE_DIALOG)) {
- mDetailsContentViewModel.showDetailsContent(expandable, /* view= */ null);
+ mDetailsContentViewModel.get().showDetailsContent(expandable, /* view= */ null);
} else {
// Secondary clicks are header clicks, just toggle.
toggleBluetooth();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
index 30c2adf89e9b..c60e3da9d833 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
@@ -54,6 +54,7 @@ import com.android.systemui.qs.QsEventLogger;
import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.res.R;
+import com.android.systemui.shade.domain.interactor.ShadeDialogContextInteractor;
import com.android.systemui.statusbar.connectivity.NetworkController;
import com.android.systemui.statusbar.connectivity.SignalCallback;
import com.android.systemui.statusbar.connectivity.WifiIndicators;
@@ -89,6 +90,7 @@ public class CastTile extends QSTileImpl<BooleanState> {
private final Callback mCallback = new Callback();
private final TileJavaAdapter mJavaAdapter;
private final FeatureFlags mFeatureFlags;
+ private final ShadeDialogContextInteractor mShadeDialogContextInteractor;
private boolean mCastTransportAllowed;
private boolean mHotspotConnected;
@@ -110,7 +112,8 @@ public class CastTile extends QSTileImpl<BooleanState> {
DialogTransitionAnimator dialogTransitionAnimator,
ConnectivityRepository connectivityRepository,
TileJavaAdapter javaAdapter,
- FeatureFlags featureFlags
+ FeatureFlags featureFlags,
+ ShadeDialogContextInteractor shadeDialogContextInteractor
) {
super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
statusBarStateController, activityStarter, qsLogger);
@@ -120,6 +123,7 @@ public class CastTile extends QSTileImpl<BooleanState> {
mDialogTransitionAnimator = dialogTransitionAnimator;
mJavaAdapter = javaAdapter;
mFeatureFlags = featureFlags;
+ mShadeDialogContextInteractor = shadeDialogContextInteractor;
mController.observe(this, mCallback);
mKeyguard.observe(this, mCallback);
if (!mFeatureFlags.isEnabled(SIGNAL_CALLBACK_DEPRECATION)) {
@@ -220,7 +224,7 @@ public class CastTile extends QSTileImpl<BooleanState> {
mUiHandler.post(() -> {
final DialogHolder holder = new DialogHolder();
final Dialog dialog = MediaRouteDialogPresenter.createDialog(
- mContext,
+ mShadeDialogContextInteractor.getContext(),
ROUTE_TYPE_REMOTE_DISPLAY,
v -> {
ActivityTransitionAnimator.Controller controller =
diff --git a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModel.kt
index 0add3f515ebf..f75dadd5ef0f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsShadeOverlayContentViewModel.kt
@@ -18,7 +18,6 @@ package com.android.systemui.qs.ui.viewmodel
import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.scene.domain.interactor.SceneInteractor
-import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.statusbar.notification.stack.domain.interactor.NotificationStackAppearanceInteractor
import com.android.systemui.statusbar.notification.stack.shared.model.ShadeScrimShape
@@ -47,18 +46,6 @@ constructor(
override suspend fun onActivated(): Nothing {
coroutineScope {
launch {
- sceneInteractor.currentScene.collect { currentScene ->
- when (currentScene) {
- // TODO(b/369513770): The ShadeSession should be preserved in this scenario.
- Scenes.Bouncer ->
- shadeInteractor.collapseQuickSettingsShade(
- loggingReason = "bouncer shown while shade is open"
- )
- }
- }
- }
-
- launch {
shadeInteractor.isShadeTouchable
.distinctUntilChanged()
.filter { !it }
diff --git a/packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt b/packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt
index ea11d202b119..2dc4a8d53920 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/SceneContainerFrameworkModule.kt
@@ -39,7 +39,7 @@ import dagger.multibindings.IntoMap
@Module(
includes =
[
- BouncerSceneModule::class,
+ BouncerOverlayModule::class,
CommunalSceneModule::class,
DreamSceneModule::class,
EmptySceneModule::class,
@@ -98,13 +98,16 @@ interface SceneContainerFrameworkModule {
Scenes.Communal,
Scenes.Dream,
Scenes.Lockscreen,
- Scenes.Bouncer,
Scenes.QuickSettings,
Scenes.Shade,
),
initialSceneKey = Scenes.Lockscreen,
overlayKeys =
- listOfNotNull(Overlays.NotificationsShade, Overlays.QuickSettingsShade),
+ listOfNotNull(
+ Overlays.NotificationsShade,
+ Overlays.QuickSettingsShade,
+ Overlays.Bouncer,
+ ),
navigationDistances =
mapOf(
Scenes.Gone to 0,
@@ -113,7 +116,6 @@ interface SceneContainerFrameworkModule {
Scenes.Dream to 2,
Scenes.Shade to 3,
Scenes.QuickSettings to 4,
- Scenes.Bouncer to 5,
),
transitionsBuilder = SceneContainerTransitions(),
)
diff --git a/packages/SystemUI/src/com/android/systemui/scene/ShadelessSceneContainerFrameworkModule.kt b/packages/SystemUI/src/com/android/systemui/scene/ShadelessSceneContainerFrameworkModule.kt
index 8845bb7ceeb9..a982f70d80e2 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/ShadelessSceneContainerFrameworkModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/ShadelessSceneContainerFrameworkModule.kt
@@ -18,6 +18,7 @@ package com.android.systemui.scene
import com.android.systemui.scene.domain.SceneDomainModule
import com.android.systemui.scene.domain.resolver.HomeSceneFamilyResolverModule
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.SceneContainerConfig
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.ui.composable.SceneContainerTransitions
@@ -28,7 +29,7 @@ import dagger.Provides
@Module(
includes =
[
- BouncerSceneModule::class,
+ BouncerOverlayModule::class,
EmptySceneModule::class,
GoneSceneModule::class,
LockscreenSceneModule::class,
@@ -47,11 +48,10 @@ object ShadelessSceneContainerFrameworkModule {
return SceneContainerConfig(
// Note that this list is in z-order. The first one is the bottom-most and the last one
// is top-most.
- sceneKeys = listOf(Scenes.Gone, Scenes.Lockscreen, Scenes.Bouncer),
+ sceneKeys = listOf(Scenes.Gone, Scenes.Lockscreen),
initialSceneKey = Scenes.Lockscreen,
- overlayKeys = emptyList(),
- navigationDistances =
- mapOf(Scenes.Gone to 0, Scenes.Lockscreen to 0, Scenes.Bouncer to 1),
+ overlayKeys = listOf(Overlays.Bouncer),
+ navigationDistances = mapOf(Scenes.Gone to 0, Scenes.Lockscreen to 0),
transitionsBuilder = SceneContainerTransitions(),
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneContainerOcclusionInteractor.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneContainerOcclusionInteractor.kt
index c96ea03f057a..64abb843fad8 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneContainerOcclusionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneContainerOcclusionInteractor.kt
@@ -136,7 +136,7 @@ constructor(
when (this) {
Overlays.NotificationsShade -> false
Overlays.QuickSettingsShade -> false
- Scenes.Bouncer -> false
+ Overlays.Bouncer -> false
Scenes.Communal -> true
Scenes.Dream -> false
Scenes.Gone -> true
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 01180859b1d2..07f13cbdd0e7 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
@@ -42,6 +42,7 @@ import com.android.systemui.util.kotlin.pairwise
import dagger.Lazy
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
@@ -203,20 +204,30 @@ constructor(
repository.isSceneContainerUserInputOngoing
/**
- * The amount of transition into or out of the given [scene].
+ * The amount of transition into or out of the given [content].
*
* The value will be `0` if not in this scene or `1` when fully in the given scene.
*/
- fun transitionProgress(scene: SceneKey): Flow<Float> {
+ @OptIn(ExperimentalCoroutinesApi::class)
+ fun transitionProgress(content: ContentKey): Flow<Float> {
return transitionState.flatMapLatest { transition ->
when (transition) {
is ObservableTransitionState.Idle -> {
- flowOf(if (transition.currentScene == scene) 1f else 0f)
+ flowOf(
+ if (
+ transition.currentScene == content ||
+ content in transition.currentOverlays
+ ) {
+ 1f
+ } else {
+ 0f
+ }
+ )
}
is ObservableTransitionState.Transition -> {
when {
- transition.toContent == scene -> transition.progress
- transition.fromContent == scene -> transition.progress.map { 1f - it }
+ transition.toContent == content -> transition.progress
+ transition.fromContent == content -> transition.progress.map { 1f - it }
else -> flowOf(0f)
}
}
@@ -238,6 +249,9 @@ constructor(
* If [forceSettleToTargetScene] is `true` and the target scene is the same as the current
* scene, any current transition will be canceled and an animation to the target scene will be
* started.
+ *
+ * If [Overlays.Bouncer] is showing, we trigger an instant scene change as it will not be user-
+ * visible, and trigger a transition to hide the bouncer.
*/
@JvmOverloads
fun changeScene(
@@ -249,6 +263,7 @@ constructor(
) {
val currentSceneKey = currentScene.value
val resolvedScene = sceneFamilyResolvers.get()[toScene]?.resolvedScene?.value ?: toScene
+ val bouncerShowing = Overlays.Bouncer in currentOverlays.value
if (resolvedScene == currentSceneKey && forceSettleToTargetScene) {
logger.logSceneChangeCancellation(scene = resolvedScene, sceneState = sceneState)
@@ -265,6 +280,12 @@ constructor(
loggingReason = loggingReason,
)
) {
+ if (bouncerShowing) {
+ hideOverlay(
+ Overlays.Bouncer,
+ "Scene change cancelled but hiding bouncer for: ($loggingReason)",
+ )
+ }
return
}
@@ -278,14 +299,20 @@ constructor(
isInstant = false,
)
- repository.changeScene(resolvedScene, transitionKey)
+ if (bouncerShowing) {
+ repository.snapToScene(resolvedScene)
+ hideOverlay(Overlays.Bouncer, "Hiding on changeScene for: ($loggingReason)")
+ } else {
+ repository.changeScene(resolvedScene, transitionKey)
+ }
}
/**
* Requests a scene change to the given scene.
*
* The change is instantaneous and not animated; it will be observable in the next frame and
- * there will be no transition animation.
+ * there will be no transition animation. If [Overlays.Bouncer] is showing, it will instantly be
+ * hidden.
*/
fun snapToScene(toScene: SceneKey, loggingReason: String) {
val currentSceneKey = currentScene.value
@@ -316,6 +343,7 @@ constructor(
)
repository.snapToScene(resolvedScene)
+ instantlyHideOverlay(Overlays.Bouncer, "Hiding on snapToScene for: ($loggingReason)")
}
/**
@@ -662,6 +690,16 @@ constructor(
false
}
+ to == Overlays.Bouncer && currentScene.value == Scenes.Gone -> {
+ logger.logSceneChangeRejection(
+ from = from,
+ to = to,
+ originalChangeReason = loggingReason,
+ rejectionReason = "Cannot show Bouncer over Gone scene",
+ )
+ false
+ }
+
else -> true
}
}
@@ -767,4 +805,41 @@ constructor(
)
}
}
+
+ /**
+ * Based off of the ordering of [allContentKeys], returns the key of the highest z-order content
+ * out of [content].
+ */
+ private fun determineTopmostContent(content: Set<ContentKey>): ContentKey {
+ // Assuming allContentKeys is sorted by ascending z-order.
+ return checkNotNull(allContentKeys.findLast { it in content }) {
+ "Could not find unknown content $content in allContentKeys $allContentKeys"
+ }
+ }
+
+ /** Optimization for common case where overlays is empty. */
+ private fun determineTopmostContent(scene: SceneKey, overlays: Set<OverlayKey>): ContentKey {
+ return if (overlays.isEmpty()) {
+ scene
+ } else {
+ determineTopmostContent(overlays)
+ }
+ }
+
+ /**
+ * The current content that has the highest z-order out of all currently shown scenes and
+ * overlays.
+ *
+ * Note that during a transition between content, a different content may have the highest z-
+ * order. Only the one provided by this flow is considered the current logical topmost content.
+ */
+ @Deprecated("Only to be used for compatibility with KeyguardTransitionFramework")
+ val topmostContent: StateFlow<ContentKey> =
+ combine(currentScene, currentOverlays, ::determineTopmostContent)
+ .stateInTraced(
+ name = "topmostContent",
+ scope = applicationScope,
+ started = SharingStarted.Eagerly,
+ initialValue = determineTopmostContent(currentScene.value, currentOverlays.value),
+ )
}
diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/WindowRootViewVisibilityInteractor.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/WindowRootViewVisibilityInteractor.kt
index 79226138d07a..68ce26954aa3 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/WindowRootViewVisibilityInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/WindowRootViewVisibilityInteractor.kt
@@ -87,7 +87,7 @@ constructor(
)
is ObservableTransitionState.Transition ->
if (
- state.fromContent == Scenes.Bouncer &&
+ state.fromContent == Overlays.Bouncer &&
state.toContent == Scenes.Lockscreen
) {
// Lockscreen is not visible during preview stage of predictive back
diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/startable/SceneContainerStartable.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/startable/SceneContainerStartable.kt
index 218ad477c45e..4753b9ac0457 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/domain/startable/SceneContainerStartable.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/domain/startable/SceneContainerStartable.kt
@@ -18,6 +18,7 @@ package com.android.systemui.scene.domain.startable
import android.app.StatusBarManager
import com.android.compose.animation.scene.ObservableTransitionState
+import com.android.compose.animation.scene.OverlayKey
import com.android.compose.animation.scene.SceneKey
import com.android.internal.logging.UiEventLogger
import com.android.keyguard.AuthInteractionProperties
@@ -45,7 +46,7 @@ import com.android.systemui.keyguard.DismissCallbackRegistry
import com.android.systemui.keyguard.domain.interactor.KeyguardEnabledInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.TrustInteractor
-import com.android.systemui.keyguard.domain.interactor.WindowManagerLockscreenVisibilityInteractor.Companion.keyguardScenes
+import com.android.systemui.keyguard.domain.interactor.WindowManagerLockscreenVisibilityInteractor.Companion.keyguardContent
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.model.SceneContainerPlugin
import com.android.systemui.model.SysUiState
@@ -98,7 +99,6 @@ import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.distinctUntilChangedBy
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filterIsInstance
-import kotlinx.coroutines.flow.filterNot
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
@@ -345,12 +345,10 @@ constructor(
applicationScope.launch {
// TODO (b/308001302): Move this to a bouncer specific interactor.
bouncerInteractor.onImeHiddenByUser.collectLatest {
- if (sceneInteractor.currentScene.value == Scenes.Bouncer) {
- sceneInteractor.changeScene(
- toScene = Scenes.Lockscreen,
- loggingReason = "IME hidden",
- )
- }
+ sceneInteractor.hideOverlay(
+ overlay = Overlays.Bouncer,
+ loggingReason = "IME hidden.",
+ )
}
}
}
@@ -364,26 +362,28 @@ constructor(
.collect { (isAnySimLocked, unlockStatus) ->
when {
isAnySimLocked -> {
- switchToScene(
- targetSceneKey = Scenes.Bouncer,
+ sceneInteractor.showOverlay(
+ overlay = Overlays.Bouncer,
loggingReason = "Need to authenticate locked SIM card.",
)
}
unlockStatus.isUnlocked &&
deviceEntryInteractor.canSwipeToEnter.value == false -> {
+ val loggingReason =
+ "All SIM cards unlocked and device already unlocked and " +
+ "lockscreen doesn't require a swipe to dismiss."
switchToScene(
targetSceneKey = Scenes.Gone,
- loggingReason =
- "All SIM cards unlocked and device already unlocked and " +
- "lockscreen doesn't require a swipe to dismiss.",
+ loggingReason = loggingReason,
)
}
else -> {
+ val loggingReason =
+ "All SIM cards unlocked and device still locked" +
+ " or lockscreen still requires a swipe to dismiss."
switchToScene(
targetSceneKey = Scenes.Lockscreen,
- loggingReason =
- "All SIM cards unlocked and device still locked" +
- " or lockscreen still requires a swipe to dismiss.",
+ loggingReason = loggingReason,
)
}
}
@@ -393,26 +393,40 @@ constructor(
private fun handleDeviceUnlockStatus() {
applicationScope.launch {
- // Track the previous scene (sans Bouncer), so that we know where to go when the device
- // is unlocked whilst on the bouncer.
+ // Track the previous scene, so that we know where to go when the device is unlocked
+ // whilst on the bouncer.
val previousScene =
- sceneBackInteractor.backScene
- .filterNot { it == Scenes.Bouncer }
- .stateIn(this, SharingStarted.Eagerly, initialValue = null)
+ sceneBackInteractor.backScene.stateIn(
+ this,
+ SharingStarted.Eagerly,
+ initialValue = null,
+ )
deviceUnlockedInteractor.deviceUnlockStatus
.mapNotNull { deviceUnlockStatus ->
- val renderedScenes =
+ val (renderedScenes: List<SceneKey>, renderedOverlays) =
when (val transitionState = sceneInteractor.transitionState.value) {
- is ObservableTransitionState.Idle -> setOf(transitionState.currentScene)
- is ObservableTransitionState.Transition ->
- setOf(transitionState.fromContent, transitionState.toContent)
+ is ObservableTransitionState.Idle ->
+ listOf(transitionState.currentScene) to
+ transitionState.currentOverlays
+ is ObservableTransitionState.Transition.ChangeScene ->
+ listOf(transitionState.fromScene, transitionState.toScene) to
+ transitionState.currentOverlays
+ is ObservableTransitionState.Transition.OverlayTransition ->
+ listOf(transitionState.currentScene) to
+ setOfNotNull(
+ transitionState.toContent.takeIf { it is OverlayKey },
+ transitionState.fromContent.takeIf { it is OverlayKey },
+ )
}
val isOnLockscreen = renderedScenes.contains(Scenes.Lockscreen)
val isAlternateBouncerVisible = alternateBouncerInteractor.isVisibleState()
- val isOnPrimaryBouncer = renderedScenes.contains(Scenes.Bouncer)
+ val isOnPrimaryBouncer = Overlays.Bouncer in renderedOverlays
if (!deviceUnlockStatus.isUnlocked) {
- return@mapNotNull if (renderedScenes.any { it in keyguardScenes }) {
- // Already on a keyguard scene, no need to change scenes.
+ return@mapNotNull if (
+ renderedScenes.any { it in keyguardContent } ||
+ Overlays.Bouncer in renderedOverlays
+ ) {
+ // Already on a keyguard scene or bouncer, no need to change scenes.
null
} else {
// The device locked while on a scene that's not a keyguard scene, go
@@ -450,24 +464,25 @@ constructor(
}
isOnPrimaryBouncer -> {
// When the device becomes unlocked in primary Bouncer,
- // notify dismiss succeeded and go to previous scene or Gone.
+ // notify dismiss succeeded and remain in current scene or switch to
+ // Gone.
dismissCallbackRegistry.notifyDismissSucceeded()
+ // if transition is a scene change, take the destination scene
+ val targetScene = renderedScenes.last()
if (
- previousScene.value == Scenes.Lockscreen ||
+ targetScene == Scenes.Lockscreen ||
!statusBarStateController.leaveOpenOnKeyguardHide()
) {
Scenes.Gone to
"device was unlocked with bouncer showing and shade" +
" didn't need to be left open"
} else {
- val prevScene = previousScene.value
- val targetScene = prevScene ?: Scenes.Gone
- if (targetScene != Scenes.Gone) {
+ if (previousScene.value != Scenes.Gone) {
replaceLockscreenSceneOnBackStack()
}
targetScene to
"device was unlocked with primary bouncer showing," +
- " from sceneKey=$prevScene"
+ " from sceneKey=$targetScene"
}
}
isOnLockscreen ->
@@ -575,8 +590,8 @@ constructor(
authenticationInteractor.get().getAuthenticationMethod() ==
AuthenticationMethodModel.Sim
) {
- switchToScene(
- targetSceneKey = Scenes.Bouncer,
+ sceneInteractor.showOverlay(
+ overlay = Overlays.Bouncer,
loggingReason = "device is starting to wake up with a locked sim",
)
}
@@ -791,11 +806,11 @@ constructor(
}
applicationScope.launch {
- sceneInteractor.currentScene
- .map { it == Scenes.Bouncer }
+ sceneInteractor.currentOverlays
+ .map { Overlays.Bouncer in it }
.distinctUntilChanged()
- .collect { switchedToBouncerScene ->
- if (switchedToBouncerScene) {
+ .collect { switchedToBouncerOverlay ->
+ if (switchedToBouncerOverlay) {
falsingCollector.onBouncerShown()
} else {
falsingCollector.onBouncerHidden()
@@ -812,7 +827,10 @@ constructor(
falsingManager.addFalsingBeliefListener(listener)
awaitClose { falsingManager.removeFalsingBeliefListener(listener) }
}
- .collect { switchToScene(Scenes.Lockscreen, "Falsing detected.") }
+ .collect {
+ val loggingReason = "Falsing detected."
+ switchToScene(Scenes.Lockscreen, loggingReason)
+ }
}
}
@@ -827,7 +845,7 @@ constructor(
.mapNotNull { it as? ObservableTransitionState.Idle }
.map { it.currentScene to it.currentOverlays }
.distinctUntilChanged()
- .map { (sceneKey, currentOverlays) ->
+ .map { (currentScene, currentOverlays) ->
when {
// When locked, showing the lockscreen scene should be reported
// as "interacting" while showing other scenes should report as
@@ -837,9 +855,9 @@ constructor(
// implementation. The real reason why is lost to lore and myth.
Overlays.NotificationsShade in currentOverlays -> false
Overlays.QuickSettingsShade in currentOverlays -> null
- sceneKey == Scenes.Lockscreen -> true
- sceneKey == Scenes.Bouncer -> false
- sceneKey == Scenes.Shade -> false
+ Overlays.Bouncer in currentOverlays -> false
+ currentScene == Scenes.Lockscreen -> true
+ currentScene == Scenes.Shade -> false
else -> null
}
}
@@ -865,7 +883,7 @@ constructor(
.filterIsInstance<ObservableTransitionState.Transition>()
// Only consider user-initiated (e.g. drags) that go from bouncer to lockscreen.
.filter { transition ->
- transition.fromContent == Scenes.Bouncer &&
+ transition.fromContent == Overlays.Bouncer &&
transition.toContent == Scenes.Lockscreen &&
transition.isInitiatedByUserInput
}
@@ -954,14 +972,13 @@ constructor(
private fun notifyKeyguardDismissCancelledCallbacks() {
applicationScope.launch {
- combine(deviceEntryInteractor.isUnlocked, sceneInteractor.currentScene.pairwise()) {
+ combine(deviceEntryInteractor.isUnlocked, sceneInteractor.currentOverlays.pairwise()) {
isUnlocked,
- (from, to) ->
- when {
- from != Scenes.Bouncer -> false
- to != Scenes.Gone && !isUnlocked -> true
- else -> false
- }
+ overlayChange ->
+ val difference = overlayChange.previousValue - overlayChange.newValue
+ !isUnlocked &&
+ sceneInteractor.currentScene.value != Scenes.Gone &&
+ Overlays.Bouncer in difference
}
.collect { notifyKeyguardDismissCancelled ->
if (notifyKeyguardDismissCancelled) {
diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/startable/ScrimStartable.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/startable/ScrimStartable.kt
index 522dfabb8b61..305dcfb6a528 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/domain/startable/ScrimStartable.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/domain/startable/ScrimStartable.kt
@@ -17,6 +17,7 @@
package com.android.systemui.scene.domain.startable
import androidx.annotation.VisibleForTesting
+import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.compose.animation.scene.ContentKey
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.OverlayKey
@@ -49,7 +50,6 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
-import com.android.app.tracing.coroutines.launchTraced as launch
@SysUISingleton
class ScrimStartable
@@ -108,12 +108,12 @@ constructor(
// This is true when the lockscreen scene is either the current scene or somewhere
// in the navigation back stack of scenes.
val isOnKeyguard = !isDeviceEntered
- val isCurrentSceneBouncer = currentScene == Scenes.Bouncer
- // This is true when moving away from one of the keyguard scenes to the gone scene.
+ val isOnBouncer = Overlays.Bouncer in currentOverlays
+ // This is true when moving away from the lockscreen scene to the gone scene.
// It happens only when unlocking or when dismissing a dismissible lockscreen.
val isTransitioningAwayFromKeyguard =
transitionState is ObservableTransitionState.Transition.ChangeScene &&
- transitionState.fromScene.isKeyguard() &&
+ transitionState.fromScene == Scenes.Lockscreen &&
transitionState.toScene == Scenes.Gone
// This is true when any of the shade scenes or overlays is the current content.
@@ -144,7 +144,7 @@ constructor(
// Assume scrim state for shade is already correct and do nothing
null
}
- } else if (isCurrentSceneBouncer && !unlocking) {
+ } else if (isOnBouncer && !unlocking) {
// Bouncer needs the front scrim when it's on top of an activity, tapping on a
// notification, editing QS or being dismissed by
// FLAG_DISMISS_KEYGUARD_ACTIVITY.
@@ -215,10 +215,6 @@ constructor(
}
}
- private fun SceneKey.isKeyguard(): Boolean {
- return this == Scenes.Lockscreen || this == Scenes.Bouncer
- }
-
private fun ContentKey.isShade(): Boolean {
return this == Scenes.Shade ||
this == Scenes.QuickSettings ||
diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/startable/StatusBarStartable.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/startable/StatusBarStartable.kt
index 7d09c457e8c1..4c8926a7bad0 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/domain/startable/StatusBarStartable.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/domain/startable/StatusBarStartable.kt
@@ -24,6 +24,8 @@ import android.os.IBinder
import android.os.RemoteException
import android.provider.DeviceConfig
import android.util.Log
+import com.android.app.tracing.coroutines.launchTraced as launch
+import com.android.compose.animation.scene.OverlayKey
import com.android.compose.animation.scene.SceneKey
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags
import com.android.internal.statusbar.IStatusBarService
@@ -43,14 +45,13 @@ import com.android.systemui.power.shared.model.WakefulnessModel
import com.android.systemui.scene.domain.interactor.SceneContainerOcclusionInteractor
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 com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.user.domain.interactor.SelectedUserInteractor
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
-import com.android.app.tracing.coroutines.launchTraced as launch
import kotlinx.coroutines.withContext
@SysUISingleton
@@ -93,6 +94,7 @@ constructor(
navigationInteractor.isGesturalMode,
authenticationInteractor.authenticationMethod,
powerInteractor.detailedWakefulness,
+ sceneInteractor.currentOverlays,
) { values ->
val selectedUserId = values[0] as Int
val currentScene = values[1] as SceneKey
@@ -102,8 +104,9 @@ constructor(
val isGesturalMode = values[5] as Boolean
val authenticationMethod = values[6] as AuthenticationMethodModel
val wakefulnessModel = values[7] as WakefulnessModel
+ val overlays = values[8] as Set<OverlayKey>
- val isForceHideHomeAndRecents = currentScene == Scenes.Bouncer
+ val isForceHideHomeAndRecents = Overlays.Bouncer in overlays
val isKeyguardShowing = !isDeviceEntered
val isPowerGestureIntercepted =
with(wakefulnessModel) {
diff --git a/packages/SystemUI/src/com/android/systemui/scene/shared/model/Overlays.kt b/packages/SystemUI/src/com/android/systemui/scene/shared/model/Overlays.kt
index c47a85082032..238de4af0d1e 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/shared/model/Overlays.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/shared/model/Overlays.kt
@@ -25,6 +25,12 @@ import com.android.compose.animation.scene.OverlayKey
*/
object Overlays {
/**
+ * The bouncer is the overlay that displays authentication challenges like PIN, password, or
+ * pattern.
+ */
+ @JvmField val Bouncer = OverlayKey("bouncer")
+
+ /**
* The notifications shade overlay primarily shows a scrollable list of notifications.
*
* It's used only in the dual shade configuration, where there are two separate shades: one for
diff --git a/packages/SystemUI/src/com/android/systemui/scene/shared/model/Scenes.kt b/packages/SystemUI/src/com/android/systemui/scene/shared/model/Scenes.kt
index 16492efa658a..8332522dd129 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/shared/model/Scenes.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/shared/model/Scenes.kt
@@ -24,12 +24,6 @@ import com.android.compose.animation.scene.SceneKey
* PLEASE KEEP THE KEYS SORTED ALPHABETICALLY.
*/
object Scenes {
- /**
- * The bouncer is the scene that displays authentication challenges like PIN, password, or
- * pattern.
- */
- @JvmField val Bouncer = SceneKey("bouncer")
-
/** The communal scene shows the glanceable hub when device is locked and docked. */
@JvmField val Communal = SceneKey("communal")
diff --git a/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneJankMonitor.kt b/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneJankMonitor.kt
index 48a49c60d8a2..48a3dede5def 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneJankMonitor.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/ui/view/SceneJankMonitor.kt
@@ -27,7 +27,7 @@ import com.android.systemui.authentication.shared.model.AuthenticationMethodMode
import com.android.systemui.deviceentry.domain.interactor.DeviceUnlockedInteractor
import com.android.systemui.lifecycle.ExclusiveActivatable
import com.android.systemui.lifecycle.Hydrator
-import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.scene.shared.model.Overlays
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
@@ -95,7 +95,7 @@ constructor(
private fun calculatedCuj(from: ContentKey, to: ContentKey): Int? {
val isDeviceUnlocked = deviceUnlockedInteractor.deviceUnlockStatus.value.isUnlocked
return when {
- to == Scenes.Bouncer ->
+ to == Overlays.Bouncer ->
when (authMethod) {
is AuthenticationMethodModel.Pin,
is AuthenticationMethodModel.Sim -> Cuj.CUJ_LOCKSCREEN_PIN_APPEAR
@@ -104,7 +104,7 @@ constructor(
is AuthenticationMethodModel.None -> null
null -> null
}
- from == Scenes.Bouncer && isDeviceUnlocked ->
+ from == Overlays.Bouncer && isDeviceUnlocked ->
when (authMethod) {
is AuthenticationMethodModel.Pin,
is AuthenticationMethodModel.Sim -> Cuj.CUJ_LOCKSCREEN_PIN_DISAPPEAR
diff --git a/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt b/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt
index efdf5bee2c7b..a81fcec94989 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt
@@ -318,7 +318,7 @@ constructor(
private fun isInteractionAllowedByFalsing(content: ContentKey): Boolean {
val interactionTypeOrNull =
when (content) {
- Scenes.Bouncer -> Classifier.BOUNCER_UNLOCK
+ Overlays.Bouncer -> Classifier.BOUNCER_UNLOCK
Scenes.Gone -> Classifier.UNLOCK
Scenes.Shade,
Overlays.NotificationsShade -> Classifier.NOTIFICATION_DRAG_DOWN
diff --git a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java
index 34b3324f81da..d05837261b89 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java
@@ -105,14 +105,15 @@ import com.android.systemui.util.kotlin.JavaAdapter;
import dalvik.annotation.optimization.NeverCompile;
+import dagger.Lazy;
+
+import kotlin.Unit;
+
import java.io.PrintWriter;
import javax.inject.Inject;
import javax.inject.Provider;
-import dagger.Lazy;
-import kotlin.Unit;
-
/** Handles QuickSettings touch handling, expansion and animation state. */
@SysUISingleton
public class QuickSettingsControllerImpl implements QuickSettingsController, Dumpable {
@@ -2365,16 +2366,8 @@ public class QuickSettingsControllerImpl implements QuickSettingsController, Dum
return;
}
if (startTracing) {
- if (mQs != null) {
- mQs.setQSExpandingOrCollapsing(true);
- }
-
monitor.begin(mPanelView, Cuj.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE);
} else {
- if (mQs != null) {
- mQs.setQSExpandingOrCollapsing(false);
- }
-
if (wasCancelled) {
monitor.cancel(Cuj.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE);
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/NotificationShadeWindowModel.kt b/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/NotificationShadeWindowModel.kt
index 9655d928a9b9..a3bfbbc8eb1a 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/NotificationShadeWindowModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ui/viewmodel/NotificationShadeWindowModel.kt
@@ -28,6 +28,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.GLANCEABLE_HUB
import com.android.systemui.keyguard.shared.model.KeyguardState.OCCLUDED
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.util.kotlin.BooleanFlowOperators.any
import com.android.systemui.util.kotlin.sample
@@ -92,7 +93,7 @@ constructor(
val isBouncerShowing: Flow<Boolean> =
when {
SceneContainerFlag.isEnabled -> {
- sceneInteractor.get().transitionState.map { it.isIdle(Scenes.Bouncer) }
+ sceneInteractor.get().transitionState.map { it.isIdle(Overlays.Bouncer) }
}
ComposeBouncerFlags.isOnlyComposeBouncerEnabled() -> primaryBouncerInteractor.isShowing
else ->
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt
index f30043eece62..f45971b57b65 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BlurUtils.kt
@@ -45,7 +45,7 @@ open class BlurUtils @Inject constructor(
private val crossWindowBlurListeners: CrossWindowBlurListeners,
dumpManager: DumpManager
) : Dumpable {
- val minBlurRadius = blurConfig.minBlurRadiusPx
+ val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius).toFloat();
val maxBlurRadius = if (Flags.notificationShadeBlur()) {
blurConfig.maxBlurRadiusPx
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
index 6aa2fe29e768..84266e805773 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
@@ -38,13 +38,13 @@ 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
import com.android.systemui.shade.ShadeDisplayAware
import com.android.systemui.shade.ShadeExpansionChangeEvent
import com.android.systemui.shade.ShadeExpansionListener
-import com.android.systemui.shared.Flags.ambientAod
import com.android.systemui.statusbar.phone.BiometricUnlockController
import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK
import com.android.systemui.statusbar.phone.DozeParameters
@@ -53,8 +53,11 @@ import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.statusbar.policy.SplitShadeStateController
import com.android.systemui.util.WallpaperController
+import com.android.systemui.wallpapers.domain.interactor.WallpaperInteractor
import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor
import com.android.wm.shell.appzoomout.AppZoomOut
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
import java.io.PrintWriter
import java.util.Optional
import javax.inject.Inject
@@ -76,12 +79,14 @@ constructor(
private val keyguardInteractor: KeyguardInteractor,
private val choreographer: Choreographer,
private val wallpaperController: WallpaperController,
+ private val wallpaperInteractor: WallpaperInteractor,
private val notificationShadeWindowController: NotificationShadeWindowController,
private val dozeParameters: DozeParameters,
@ShadeDisplayAware private val context: Context,
private val splitShadeStateController: SplitShadeStateController,
private val windowRootViewBlurInteractor: WindowRootViewBlurInteractor,
private val appZoomOutOptional: Optional<AppZoomOut>,
+ @Application private val applicationScope: CoroutineScope,
dumpManager: DumpManager,
configurationController: ConfigurationController,
) : ShadeExpansionListener, Dumpable {
@@ -110,6 +115,12 @@ constructor(
private var prevTimestamp: Long = -1
private var prevShadeDirection = 0
private var prevShadeVelocity = 0f
+ private var prevDozeAmount: Float = 0f
+ @VisibleForTesting var wallpaperSupportsAmbientMode: Boolean = false
+ // tracks whether app launch transition is in progress. This involves two independent factors
+ // that control blur, shade expansion and app launch animation from outside sysui.
+ // They can complete out of order, this flag will be reset by the animation that finishes later.
+ private var appLaunchTransitionIsInProgress = false
// Only for dumpsys
private var lastAppliedBlur = 0
@@ -158,6 +169,18 @@ constructor(
if (field == value) {
return
}
+ // Set this to true now, this will be reset when the next shade expansion finishes or
+ // when the app launch finishes, whichever happens later.
+ if (value) {
+ appLaunchTransitionIsInProgress = true
+ } else {
+ // App was launching and now it has finished launching
+ if (shadeExpansion == 0.0f) {
+ // this means shade expansion finished before app launch was done.
+ // reset the flag here
+ appLaunchTransitionIsInProgress = false
+ }
+ }
field = value
scheduleUpdate()
@@ -172,6 +195,12 @@ constructor(
shadeAnimation.animateTo(0)
shadeAnimation.finishIfRunning()
}
+ @Deprecated(
+ message =
+ "This might get reset to false before shade expansion is fully done, " +
+ "consider using areBlursDisabledForAppLaunch"
+ )
+ get() = field
private var zoomOutCalculatedFromShadeRadius: Float = 0.0f
@@ -183,6 +212,11 @@ constructor(
scheduleUpdate()
}
+ private val areBlursDisabledForAppLaunch: Boolean
+ get() =
+ blursDisabledForAppLaunch ||
+ (Flags.bouncerUiRevamp() && appLaunchTransitionIsInProgress)
+
/** Force stop blur effect when necessary. */
private var scrimsVisible: Boolean = false
set(value) {
@@ -192,7 +226,15 @@ constructor(
}
/** Blur radius of the wake-up animation on this frame. */
- private var wakeAndUnlockBlurRadius = 0f
+ private var wakeBlurRadius = 0f
+ set(value) {
+ if (field == value) return
+ field = value
+ scheduleUpdate()
+ }
+
+ /** Blur radius of the unlock animation on this frame. */
+ private var unlockBlurRadius = 0f
set(value) {
if (field == value) return
field = value
@@ -219,14 +261,16 @@ constructor(
ShadeInterpolation.getNotificationScrimAlpha(qsPanelExpansion) * shadeExpansion
combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(qsExpandedRatio))
combinedBlur = max(combinedBlur, blurUtils.blurRadiusOfRatio(transitionToFullShadeProgress))
- var shadeRadius = max(combinedBlur, wakeAndUnlockBlurRadius)
+ var shadeRadius = max(combinedBlur, max(wakeBlurRadius, unlockBlurRadius))
- if (blursDisabledForAppLaunch || blursDisabledForUnlock) {
+ if (areBlursDisabledForAppLaunch || blursDisabledForUnlock) {
shadeRadius = 0f
}
var blur = shadeRadius.toInt()
- val zoomOut = blurRadiusToZoomOut(blurRadius = shadeRadius)
+ // If the blur comes from waking up, we don't want to zoom out the background
+ val zoomOut =
+ if (shadeRadius != wakeBlurRadius) blurRadiusToZoomOut(blurRadius = shadeRadius) else 0f
// Make blur be 0 if it is necessary to stop blur effect.
if (scrimsVisible) {
if (!Flags.notificationShadeBlur()) {
@@ -259,7 +303,7 @@ constructor(
private val shouldBlurBeOpaque: Boolean
get() =
if (Flags.notificationShadeBlur()) false
- else scrimsVisible && !blursDisabledForAppLaunch
+ else scrimsVisible && !areBlursDisabledForAppLaunch
/** Callback that updates the window blur value and is called only once per frame. */
@VisibleForTesting
@@ -311,14 +355,14 @@ constructor(
startDelay = keyguardStateController.keyguardFadingAwayDelay
interpolator = Interpolators.FAST_OUT_SLOW_IN
addUpdateListener { animation: ValueAnimator ->
- wakeAndUnlockBlurRadius =
+ unlockBlurRadius =
blurUtils.blurRadiusOfRatio(animation.animatedValue as Float)
}
addListener(
object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator) {
keyguardAnimator = null
- wakeAndUnlockBlurRadius = 0f
+ unlockBlurRadius = 0f
}
}
)
@@ -354,15 +398,20 @@ constructor(
}
override fun onDozeAmountChanged(linear: Float, eased: Float) {
- wakeAndUnlockBlurRadius =
- if (ambientAod()) {
- 0f
- } else {
- blurUtils.blurRadiusOfRatio(eased)
- }
+ prevDozeAmount = eased
+ updateWakeBlurRadius(prevDozeAmount)
}
}
+ private fun updateWakeBlurRadius(ratio: Float) {
+ wakeBlurRadius =
+ if (!wallpaperSupportsAmbientMode) {
+ 0f
+ } else {
+ blurUtils.blurRadiusOfRatio(ratio)
+ }
+ }
+
init {
dumpManager.registerCriticalDumpable(javaClass.name, this)
if (WAKE_UP_ANIMATION_ENABLED) {
@@ -384,6 +433,12 @@ constructor(
}
}
)
+ applicationScope.launch {
+ wallpaperInteractor.wallpaperSupportsAmbientMode.collect { supported ->
+ wallpaperSupportsAmbientMode = supported
+ updateWakeBlurRadius(prevDozeAmount)
+ }
+ }
initBlurListeners()
}
@@ -442,6 +497,13 @@ constructor(
val shadeDirection = sign(diff).toInt()
val shadeVelocity =
MathUtils.constrain(VELOCITY_SCALE * diff / deltaTime, MIN_VELOCITY, MAX_VELOCITY)
+ if (expansion == 0.0f && appLaunchTransitionIsInProgress && !blursDisabledForAppLaunch) {
+ // Shade expansion finished but the app launch is already done, then this should mark
+ // the transition as done.
+ Log.d(TAG, "appLaunchTransitionIsInProgress is now false from shade expansion event")
+ appLaunchTransitionIsInProgress = false
+ }
+
updateShadeAnimationBlur(expansion, tracking, shadeVelocity, shadeDirection)
prevShadeDirection = shadeDirection
@@ -551,8 +613,10 @@ constructor(
it.println("shouldApplyShadeBlur: ${shouldApplyShadeBlur()}")
it.println("shadeAnimation: ${shadeAnimation.radius}")
it.println("brightnessMirrorRadius: ${brightnessMirrorSpring.radius}")
- it.println("wakeAndUnlockBlur: $wakeAndUnlockBlurRadius")
+ it.println("wakeBlur: $wakeBlurRadius")
+ it.println("unlockBlur: $wakeBlurRadius")
it.println("blursDisabledForAppLaunch: $blursDisabledForAppLaunch")
+ it.println("appLaunchTransitionIsInProgress: $appLaunchTransitionIsInProgress")
it.println("qsPanelExpansion: $qsPanelExpansion")
it.println("transitionToFullShadeProgress: $transitionToFullShadeProgress")
it.println("lastAppliedBlur: $lastAppliedBlur")
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java
index 0dfc63ea8619..08ecc64bda02 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java
@@ -627,7 +627,6 @@ public class StatusBarStateControllerImpl implements
boolean alternateBouncerIsVisible) {
SceneContainerFlag.isUnexpectedlyInLegacyMode();
- final boolean onBouncer = currentScene.equals(Scenes.Bouncer);
final boolean onCommunal = currentScene.equals(Scenes.Communal);
final boolean onGone = currentScene.equals(Scenes.Gone);
final boolean onDream = currentScene.equals(Scenes.Dream);
@@ -635,8 +634,8 @@ public class StatusBarStateControllerImpl implements
final boolean onQuickSettings = currentScene.equals(Scenes.QuickSettings);
final boolean onShade = currentScene.equals(Scenes.Shade);
+ final boolean overlaidBouncer = currentOverlays.contains(Overlays.Bouncer);
final boolean overCommunal = SceneStackKt.contains(backStack, Scenes.Communal);
- final boolean overLockscreen = SceneStackKt.contains(backStack, Scenes.Lockscreen);
final boolean overShade = SceneStackKt.contains(backStack, Scenes.Shade);
final boolean overlaidShade = currentOverlays.contains(Overlays.NotificationsShade);
@@ -669,14 +668,13 @@ public class StatusBarStateControllerImpl implements
// 3. backStack contains a keyguardish scene (Lockscreen or Communal).
// 4. the alternate bouncer is visible.
- final boolean onKeyguardish = onLockscreen || onBouncer || onCommunal;
- final boolean overKeyguardish = overLockscreen || overCommunal;
+ final boolean onKeyguardish = onLockscreen || overlaidBouncer || onCommunal;
if (isOccluded) {
// Occlusion is special; even though the device is still technically on the lockscreen,
// the UI behaves as if it is unlocked.
newState = StatusBarState.SHADE;
- } else if (onKeyguardish || overKeyguardish || alternateBouncerIsVisible) {
+ } else if (onKeyguardish || overCommunal || alternateBouncerIsVisible) {
// We get here if we are on or over a keyguardish scene, even if isUnlocked is true; we
// want to return SHADE_LOCKED or KEYGUARD until we are also neither on nor over a
// keyguardish scene.
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 efd402ead979..95e454ac7bda 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
@@ -211,10 +211,6 @@ private fun ChipIcon(
modifier.size(dimensionResource(id = R.dimen.ongoing_activity_chip_icon_size)),
)
}
-
- // TODO(b/372657935): Add recommended architecture implementation for
- // StatusBarNotificationIcons
- is OngoingActivityChipModel.ChipIcon.StatusBarNotificationIcon -> {}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/domain/interactor/StatusBarKeyguardViewManagerInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/domain/interactor/StatusBarKeyguardViewManagerInteractor.kt
index 9ca110e8c561..352d660eb29a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/domain/interactor/StatusBarKeyguardViewManagerInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/domain/interactor/StatusBarKeyguardViewManagerInteractor.kt
@@ -37,10 +37,7 @@ import kotlinx.coroutines.flow.merge
/**
* Whether to set the status bar keyguard view occluded or not, and whether to animate that change.
*/
-data class OccludedState(
- val occluded: Boolean,
- val animate: Boolean = false,
-)
+data class OccludedState(val occluded: Boolean, val animate: Boolean = false)
/** Handles logic around calls to [StatusBarKeyguardViewManager] in legacy code. */
@Deprecated("Will be removed once all of SBKVM's responsibilies are refactored.")
@@ -93,12 +90,12 @@ constructor(
private val occlusionStateFromFinishedStep =
combine(
keyguardTransitionInteractor.isFinishedIn(
- scene = Scenes.Gone,
+ content = Scenes.Gone,
stateWithoutSceneContainer = KeyguardState.GONE,
),
keyguardTransitionInteractor.isFinishedIn(KeyguardState.OCCLUDED),
keyguardOcclusionInteractor.isShowWhenLockedActivityOnTop,
- ::Triple
+ ::Triple,
)
.map { (isOnGone, isOnOccluded, showWhenLockedOnTop) ->
// If we're FINISHED in OCCLUDED, we want to render as occluded. We also need to
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/media/ui/compose/MediaControlPopup.kt b/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/media/ui/compose/MediaControlPopup.kt
new file mode 100644
index 000000000000..80bdb7f8a05f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/media/ui/compose/MediaControlPopup.kt
@@ -0,0 +1,56 @@
+/*
+ * 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.featurepods.media.ui.compose
+
+import android.widget.FrameLayout
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.res.dimensionResource
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.viewinterop.AndroidView
+import com.android.systemui.media.controls.ui.view.MediaHost
+import com.android.systemui.res.R
+
+/** Displays a popup containing media controls. Embeds the MediaCarousel within a Compose popup. */
+@Composable
+fun MediaControlPopup(mediaHost: MediaHost, modifier: Modifier = Modifier) {
+ AndroidView(
+ modifier =
+ modifier
+ .width(400.dp)
+ .height(200.dp)
+ .clip(
+ shape =
+ RoundedCornerShape(dimensionResource(R.dimen.notification_corner_radius))
+ ),
+ factory = { _ ->
+ mediaHost.hostView.apply {
+ layoutParams =
+ FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.MATCH_PARENT,
+ FrameLayout.LayoutParams.MATCH_PARENT,
+ )
+ }
+ mediaHost.hostView
+ },
+ onReset = {},
+ )
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopup.kt b/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopup.kt
index 8a66904ea59b..ead51482b561 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopup.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopup.kt
@@ -28,7 +28,9 @@ import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Popup
import androidx.compose.ui.window.PopupProperties
+import com.android.systemui.media.controls.ui.view.MediaHost
import com.android.systemui.res.R
+import com.android.systemui.statusbar.featurepods.media.ui.compose.MediaControlPopup
import com.android.systemui.statusbar.featurepods.popups.shared.model.PopupChipId
import com.android.systemui.statusbar.featurepods.popups.shared.model.PopupChipModel
@@ -37,7 +39,7 @@ import com.android.systemui.statusbar.featurepods.popups.shared.model.PopupChipM
* status bar.
*/
@Composable
-fun StatusBarPopup(viewModel: PopupChipModel.Shown) {
+fun StatusBarPopup(viewModel: PopupChipModel.Shown, mediaHost: MediaHost) {
val density = Density(LocalContext.current)
Popup(
properties =
@@ -56,7 +58,7 @@ fun StatusBarPopup(viewModel: PopupChipModel.Shown) {
Box(modifier = Modifier.padding(8.dp).wrapContentSize()) {
when (viewModel.chipId) {
is PopupChipId.MediaControl -> {
- // TODO(b/385202114): Populate MediaControlPopup contents.
+ MediaControlPopup(mediaHost = mediaHost)
}
}
// Future popup types will be handled here.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopupChip.kt b/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopupChip.kt
index eb85d2f32f29..c77decda3622 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopupChip.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopupChip.kt
@@ -16,33 +16,49 @@
package com.android.systemui.statusbar.featurepods.popups.ui.compose
-import androidx.compose.animation.animateContentSize
+import androidx.compose.foundation.LocalIndication
import androidx.compose.foundation.background
+import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
-import androidx.compose.foundation.hoverable
+import androidx.compose.foundation.indication
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsHoveredAsState
import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.contentColorFor
+import androidx.compose.material3.minimumInteractiveComponentSize
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.draw.drawWithCache
+import androidx.compose.ui.graphics.BlendMode
+import androidx.compose.ui.graphics.Brush
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.CompositingStrategy
+import androidx.compose.ui.layout.layout
+import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.semantics.Role
-import androidx.compose.ui.text.style.TextOverflow
+import androidx.compose.ui.text.rememberTextMeasurer
+import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.android.compose.modifiers.thenIf
import com.android.systemui.common.ui.compose.Icon
+import com.android.systemui.res.R
import com.android.systemui.statusbar.featurepods.popups.shared.model.HoverBehavior
import com.android.systemui.statusbar.featurepods.popups.shared.model.PopupChipModel
@@ -54,31 +70,48 @@ import com.android.systemui.statusbar.featurepods.popups.shared.model.PopupChipM
@Composable
fun StatusBarPopupChip(viewModel: PopupChipModel.Shown, modifier: Modifier = Modifier) {
val hasHoverBehavior = viewModel.hoverBehavior !is HoverBehavior.None
- val hoverInteractionSource = remember { MutableInteractionSource() }
- val isHovered by hoverInteractionSource.collectIsHoveredAsState()
+ val interactionSource = remember { MutableInteractionSource() }
+ val hoveredState by interactionSource.collectIsHoveredAsState()
+ val isHovered = hasHoverBehavior && hoveredState
val isPopupShown = viewModel.isPopupShown
-
+ val indication = if (hoveredState) null else LocalIndication.current
+ val chipShape =
+ RoundedCornerShape(dimensionResource(id = R.dimen.ongoing_activity_chip_corner_radius))
val chipBackgroundColor =
if (isPopupShown) {
- MaterialTheme.colorScheme.primaryContainer
+ MaterialTheme.colorScheme.primary
} else {
- MaterialTheme.colorScheme.surfaceContainerHighest
+ MaterialTheme.colorScheme.surfaceDim
}
- Surface(
- shape = RoundedCornerShape(16.dp),
+
+ // Use a Box with `fillMaxHeight` to create a larger click surface for the chip. The visible
+ // height of the chip is determined by the height of the background of the Row below. The
+ // `indication` for Clicks is applied in the Row below as well.
+ Box(
+ contentAlignment = Alignment.Center,
modifier =
- modifier
- .widthIn(max = 120.dp)
- .padding(vertical = 4.dp)
- .animateContentSize()
- .thenIf(hasHoverBehavior) { Modifier.hoverable(hoverInteractionSource) }
- .thenIf(!isPopupShown) { Modifier.clickable { viewModel.showPopup() } },
- color = chipBackgroundColor,
+ modifier.minimumInteractiveComponentSize().thenIf(!isPopupShown) {
+ Modifier.clickable(
+ onClick = { viewModel.showPopup() },
+ indication = null,
+ interactionSource = interactionSource,
+ )
+ },
) {
Row(
- modifier = Modifier.padding(start = 4.dp, end = 8.dp),
- verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(4.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ modifier =
+ Modifier.height(dimensionResource(R.dimen.ongoing_appops_chip_height))
+ .clip(chipShape)
+ .background(chipBackgroundColor)
+ .border(
+ width = dimensionResource(id = R.dimen.ongoing_activity_chip_outline_width),
+ color = MaterialTheme.colorScheme.outlineVariant,
+ shape = chipShape,
+ )
+ .indication(interactionSource, indication)
+ .padding(start = 4.dp, end = 8.dp),
) {
val iconColor =
if (isHovered) chipBackgroundColor else contentColorFor(chipBackgroundColor)
@@ -92,9 +125,11 @@ fun StatusBarPopupChip(viewModel: PopupChipModel.Shown, modifier: Modifier = Mod
else -> viewModel.icon
},
modifier =
- Modifier.thenIf(isHovered) {
- Modifier.padding(3.dp)
- .background(color = iconBackgroundColor, shape = CircleShape)
+ Modifier.height(20.dp)
+ .width(20.dp)
+ .thenIf(isHovered) {
+ Modifier.background(color = iconBackgroundColor, shape = CircleShape)
+ .padding(2.dp)
}
.thenIf(hoverBehavior is HoverBehavior.Button) {
Modifier.clickable(
@@ -102,18 +137,67 @@ fun StatusBarPopupChip(viewModel: PopupChipModel.Shown, modifier: Modifier = Mod
onClick = (hoverBehavior as HoverBehavior.Button).onIconPressed,
indication = ripple(),
interactionSource = iconInteractionSource,
+ enabled = isHovered,
)
- }
- .padding(3.dp),
+ },
tint = iconColor,
)
+ val text = viewModel.chipText
+ val textStyle = MaterialTheme.typography.labelLarge
+ val textMeasurer = rememberTextMeasurer()
+ var textOverflow by remember { mutableStateOf(false) }
+
Text(
- text = viewModel.chipText,
- style = MaterialTheme.typography.labelLarge,
+ text = text,
+ style = textStyle,
softWrap = false,
- overflow = TextOverflow.Ellipsis,
+ modifier =
+ Modifier.widthIn(
+ max =
+ dimensionResource(id = R.dimen.ongoing_activity_chip_max_text_width)
+ )
+ .layout { measurables, constraints ->
+ val placeable = measurables.measure(constraints)
+ val intrinsicWidth =
+ textMeasurer.measure(text, textStyle, softWrap = false).size.width
+ textOverflow = intrinsicWidth > constraints.maxWidth
+
+ layout(placeable.width, placeable.height) {
+ if (textOverflow) {
+ placeable.placeWithLayer(0, 0) {
+ compositingStrategy = CompositingStrategy.Offscreen
+ }
+ } else {
+ placeable.place(0, 0)
+ }
+ }
+ }
+ .overflowFadeOut(
+ hasOverflow = { textOverflow },
+ fadeLength =
+ dimensionResource(
+ id = R.dimen.ongoing_activity_chip_text_fading_edge_length
+ ),
+ ),
+ )
+ }
+ }
+}
+
+private fun Modifier.overflowFadeOut(hasOverflow: () -> Boolean, fadeLength: Dp): Modifier {
+ return drawWithCache {
+ val width = size.width
+ val start = (width - fadeLength.toPx()).coerceAtLeast(0f)
+ val gradient =
+ Brush.horizontalGradient(
+ colors = listOf(Color.Black, Color.Transparent),
+ startX = start,
+ endX = width,
)
+ onDrawWithContent {
+ drawContent()
+ if (hasOverflow()) drawRect(brush = gradient, blendMode = BlendMode.DstIn)
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopupChipsContainer.kt b/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopupChipsContainer.kt
index 16538c93cf35..f5f1f2028aa2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopupChipsContainer.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/featurepods/popups/ui/compose/StatusBarPopupChipsContainer.kt
@@ -20,14 +20,37 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
+import com.android.systemui.media.controls.ui.view.MediaHost
+import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.statusbar.featurepods.popups.shared.model.PopupChipId
import com.android.systemui.statusbar.featurepods.popups.shared.model.PopupChipModel
/** Container view that holds all right hand side chips in the status bar. */
@Composable
-fun StatusBarPopupChipsContainer(chips: List<PopupChipModel.Shown>, modifier: Modifier = Modifier) {
+fun StatusBarPopupChipsContainer(
+ chips: List<PopupChipModel.Shown>,
+ mediaHost: MediaHost,
+ onMediaControlPopupVisibilityChanged: (Boolean) -> Unit,
+ modifier: Modifier = Modifier,
+) {
+ if (!SceneContainerFlag.isEnabled) {
+ val isMediaControlPopupShown =
+ remember(chips) {
+ chips.any { it.chipId == PopupChipId.MediaControl && it.isPopupShown }
+ }
+
+ LaunchedEffect(isMediaControlPopupShown) {
+ onMediaControlPopupVisibilityChanged(isMediaControlPopupShown)
+ }
+ }
+
// TODO(b/385353140): Add padding and spacing for this container according to UX specs.
Box {
Row(
@@ -37,7 +60,7 @@ fun StatusBarPopupChipsContainer(chips: List<PopupChipModel.Shown>, modifier: Mo
chips.forEach { chip ->
StatusBarPopupChip(chip)
if (chip.isPopupShown) {
- StatusBarPopup(chip)
+ StatusBarPopup(viewModel = chip, mediaHost = mediaHost)
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorController.kt
index 383227d2b3aa..ab40582afc10 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTransitionAnimatorController.kt
@@ -21,6 +21,7 @@ import android.view.ViewGroup
import com.android.internal.jank.InteractionJankMonitor
import com.android.systemui.animation.ActivityTransitionAnimator
import com.android.systemui.animation.TransitionAnimator
+import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.domain.interactor.NotificationLaunchAnimationInteractor
import com.android.systemui.statusbar.notification.headsup.HeadsUpManager
import com.android.systemui.statusbar.notification.headsup.HeadsUpUtil
@@ -157,8 +158,8 @@ class NotificationTransitionAnimatorController(
private val headsUpNotificationRow: ExpandableNotificationRow?
get() {
- val summaryEntry = notificationEntry.parent?.summary
-
+ val pipelineParent = notificationEntry.parent
+ val summaryEntry = (pipelineParent as? GroupEntry)?.summary
return when {
headsUpManager.isHeadsUpEntry(notificationKey) -> notification
summaryEntry == null -> null
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.java
index c6775d6dc051..31bcf2bc819b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.java
@@ -26,6 +26,7 @@ import com.android.internal.util.ContrastColorUtil;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.notification.collection.EntryAdapter;
import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.util.Compile;
@@ -80,7 +81,7 @@ public class NotificationUtils {
private static final boolean INCLUDE_HASH_CODE_IN_LIST_ENTRY_LOG_KEY = false;
/** Get the notification key, reformatted for logging, for the (optional) entry */
- public static String logKey(ListEntry entry) {
+ public static String logKey(PipelineEntry entry) {
if (entry == null) {
return "null";
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.kt
index 432bac49fa9b..2c29e30f9660 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationUtils.kt
@@ -17,10 +17,10 @@
package com.android.systemui.statusbar.notification
import android.service.notification.StatusBarNotification
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
/** Get the notification key, reformatted for logging, for the (optional) entry */
-val ListEntry?.logKey: String?
+val PipelineEntry?.logKey: String?
get() = this?.let { NotificationUtils.logKey(it) }
/** Get the notification key, reformatted for logging, for the (optional) sbn */
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/BundleEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/BundleEntry.java
index 24ab6959b9e1..35a28288c631 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/BundleEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/BundleEntry.java
@@ -29,26 +29,54 @@ import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import com.android.systemui.statusbar.notification.icon.IconPack;
+import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import java.util.List;
/**
- * Abstract class to represent notification section bundled by AI.
+ * Class to represent notifications bundled by classification.
*/
public class BundleEntry extends PipelineEntry {
- private final String mKey;
private final BundleEntryAdapter mEntryAdapter;
// TODO (b/389839319): implement the row
private ExpandableNotificationRow mRow;
public BundleEntry(String key) {
- mKey = key;
+ super(key);
mEntryAdapter = new BundleEntryAdapter();
}
+ @Nullable
+ @Override
+ public NotificationEntry getRepresentativeEntry() {
+ return null;
+ }
+
+ @Nullable
+ @Override
+ public NotifSection getSection() {
+ return null;
+ }
+
+ @Override
+ public int getSectionIndex() {
+ return 0;
+ }
+
+ @Nullable
+ @Override
+ public PipelineEntry getParent() {
+ return null;
+ }
+
+ @Override
+ public boolean wasAttachedInPreviousPass() {
+ return false;
+ }
+
@VisibleForTesting
public BundleEntryAdapter getEntryAdapter() {
return mEntryAdapter;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/GroupEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/GroupEntry.java
index 918843cedd2e..8726e83d7ddf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/GroupEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/GroupEntry.java
@@ -75,6 +75,7 @@ public class GroupEntry extends ListEntry {
return mChildren;
}
+ // TODO(b/394483200) Change ROOT_ENTRY to PipelineEntry
public static final GroupEntry ROOT_ENTRY = new GroupEntry("<root>", 0);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListAttachState.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListAttachState.kt
index b5fce4163bb0..4a1b9568c714 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListAttachState.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListAttachState.kt
@@ -21,14 +21,14 @@ import com.android.systemui.statusbar.notification.collection.listbuilder.plugga
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter
/**
- * Stores the state that [ShadeListBuilder] assigns to this [ListEntry]
+ * Stores the state that [ShadeListBuilder] assigns to this [PipelineEntry]
*/
data class ListAttachState private constructor(
/**
* Null if not attached to the current shade list. If top-level, then the shade list root. If
* part of a group, then that group's GroupEntry.
*/
- var parent: GroupEntry?,
+ var parent: PipelineEntry?,
/**
* The section that this ListEntry was sorted into. If the child of the group, this will be the
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java
index f6a572ec6ce6..60b75b1fd8c8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java
@@ -39,14 +39,14 @@ public class ListDumper {
* entry to be in its current state (ie: filter, lifeExtender)
*/
public static String dumpTree(
- List<ListEntry> entries,
+ List<PipelineEntry> entries,
NotificationInteractionTracker interactionTracker,
boolean includeRecordKeeping,
String indent) {
StringBuilder sb = new StringBuilder();
final String childEntryIndent = indent + INDENT;
for (int topEntryIndex = 0; topEntryIndex < entries.size(); topEntryIndex++) {
- ListEntry entry = entries.get(topEntryIndex);
+ PipelineEntry entry = entries.get(topEntryIndex);
dumpEntry(entry,
Integer.toString(topEntryIndex),
indent,
@@ -106,7 +106,7 @@ public class ListDumper {
}
private static void dumpEntry(
- ListEntry entry,
+ PipelineEntry entry,
String index,
String indent,
StringBuilder sb,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListEntry.java
index c8e3be4e57b4..697d0a06cf9d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListEntry.java
@@ -21,28 +21,18 @@ import android.annotation.UptimeMillisLong;
import androidx.annotation.Nullable;
-import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection;
-
/**
* Abstract superclass for top-level entries, i.e. things that can appear in the final notification
* list shown to users. In practice, this means either GroupEntries or NotificationEntries.
*/
public abstract class ListEntry extends PipelineEntry {
- private final String mKey;
private final long mCreationTime;
- private final ListAttachState mPreviousAttachState = ListAttachState.create();
- private final ListAttachState mAttachState = ListAttachState.create();
-
protected ListEntry(String key, long creationTime) {
- mKey = key;
+ super(key);
mCreationTime = creationTime;
}
- public String getKey() {
- return mKey;
- }
-
/**
* The SystemClock.uptimeMillis() when this object was created. In general, this means the
* moment when NotificationManager notifies our listener about the existence of this entry.
@@ -64,34 +54,22 @@ public abstract class ListEntry extends PipelineEntry {
*/
public abstract @Nullable NotificationEntry getRepresentativeEntry();
- @Nullable public GroupEntry getParent() {
+ @Nullable public PipelineEntry getParent() {
return mAttachState.getParent();
}
- void setParent(@Nullable GroupEntry parent) {
+ void setParent(@Nullable PipelineEntry parent) {
mAttachState.setParent(parent);
}
- @Nullable public GroupEntry getPreviousParent() {
+ @Nullable public PipelineEntry getPreviousParent() {
return mPreviousAttachState.getParent();
}
- @Nullable public NotifSection getSection() {
- return mAttachState.getSection();
- }
-
public int getSectionIndex() {
return mAttachState.getSection() != null ? mAttachState.getSection().getIndex() : -1;
}
- ListAttachState getAttachState() {
- return mAttachState;
- }
-
- ListAttachState getPreviousAttachState() {
- return mPreviousAttachState;
- }
-
/**
* Stores the current attach state into {@link #getPreviousAttachState()}} and then starts a
* fresh attach state (all entries will be null/default-initialized).
@@ -100,11 +78,4 @@ public abstract class ListEntry extends PipelineEntry {
mPreviousAttachState.clone(mAttachState);
mAttachState.reset();
}
-
- /**
- * True if this entry was attached in the last pass, else false.
- */
- public boolean wasAttachedInPreviousPass() {
- return getPreviousAttachState().getParent() != null;
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
index 698a56363465..e5b72d459069 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
@@ -305,8 +305,10 @@ public final class NotificationEntry extends ListEntry {
if (isTopLevelEntry() || getParent() == null) {
return null;
}
- if (NotificationEntry.this.getParent().getSummary() != null) {
- return NotificationEntry.this.getParent().getSummary().mEntryAdapter;
+ if (NotificationEntry.this.getParent() instanceof GroupEntry parentGroupEntry) {
+ if (parentGroupEntry.getSummary() != null) {
+ return parentGroupEntry.getSummary().mEntryAdapter;
+ }
}
return null;
}
@@ -588,7 +590,7 @@ public final class NotificationEntry extends ListEntry {
* Get the children that are actually attached to this notification's row.
*
* TODO: Seems like most callers here should probably be using
- * {@link GroupMembershipManager#getChildren(ListEntry)}
+ * {@link GroupMembershipManager#getChildren(PipelineEntry)}
*/
public @Nullable List<NotificationEntry> getAttachedNotifChildren() {
if (row == null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineEntry.java
index c5a479180329..78652ccda1d1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/PipelineEntry.java
@@ -16,8 +16,74 @@
package com.android.systemui.statusbar.notification.collection;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection;
+
/**
* Class to represent a notification, group, or bundle in the pipeline.
*/
public abstract class PipelineEntry {
+
+ final String mKey;
+ final ListAttachState mAttachState = ListAttachState.create();
+ final ListAttachState mPreviousAttachState = ListAttachState.create();
+
+ public PipelineEntry(String key) {
+ this.mKey = key;
+ }
+
+ /**
+ * Key of the representative entry.
+ */
+ public @NonNull String getKey() {
+ return mKey;
+ }
+
+ /**
+ * @return The representative NotificationEntry:
+ * for NotificationEntry, return itself
+ * for GroupEntry, return the summary NotificationEntry, or null if it does not exist
+ * for BundleEntry, return null
+ */
+ public abstract @Nullable NotificationEntry getRepresentativeEntry();
+
+ /**
+ * @return NotifSection that ShadeListBuilder assigned to this PipelineEntry.
+ */
+ @Nullable public NotifSection getSection() {
+ return mAttachState.getSection();
+ }
+
+ /**
+ * @return True if this entry was attached in the last pass, else false.
+ */
+ public boolean wasAttachedInPreviousPass() {
+ return getPreviousAttachState().getParent() != null;
+ }
+
+ /**
+ * @return Index of section assigned to this entry.
+ */
+ public abstract int getSectionIndex();
+
+ /**
+ * @return Parent PipelineEntry
+ */
+ public abstract @Nullable PipelineEntry getParent();
+
+ /**
+ * @return Current state that ShadeListBuilder assigned to this PipelineEntry.
+ */
+ final ListAttachState getAttachState() {
+ return mAttachState;
+ }
+
+ /**
+ * @return Previous state that ShadeListBuilder assigned to this PipelineEntry.
+ */
+ final ListAttachState getPreviousAttachState() {
+ return mPreviousAttachState;
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
index ac11c15e8bf8..bb84ab8f421a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
@@ -100,15 +100,15 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
private final DumpManager mDumpManager;
// used exclusivly by ShadeListBuilder#notifySectionEntriesUpdated
// TODO replace temp with collection pool for readability
- private final ArrayList<ListEntry> mTempSectionMembers = new ArrayList<>();
+ private final ArrayList<PipelineEntry> mTempSectionMembers = new ArrayList<>();
private NotifPipelineFlags mFlags;
private final boolean mAlwaysLogList;
- private List<ListEntry> mNotifList = new ArrayList<>();
- private List<ListEntry> mNewNotifList = new ArrayList<>();
+ private List<PipelineEntry> mNotifList = new ArrayList<>();
+ private List<PipelineEntry> mNewNotifList = new ArrayList<>();
private final SemiStableSort mSemiStableSort = new SemiStableSort();
- private final StableOrder<ListEntry> mStableOrder = this::getStableOrderRank;
+ private final StableOrder<PipelineEntry> mStableOrder = this::getStableOrderRank;
private final PipelineState mPipelineState = new PipelineState();
private final Map<String, GroupEntry> mGroups = new ArrayMap<>();
private Collection<NotificationEntry> mAllEntries = Collections.emptyList();
@@ -133,8 +133,8 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
mOnBeforeRenderListListeners = new NamedListenerSet<>();
@Nullable private OnRenderListListener mOnRenderListListener;
- private List<ListEntry> mReadOnlyNotifList = Collections.unmodifiableList(mNotifList);
- private List<ListEntry> mReadOnlyNewNotifList = Collections.unmodifiableList(mNewNotifList);
+ private List<PipelineEntry> mReadOnlyNotifList = Collections.unmodifiableList(mNotifList);
+ private List<PipelineEntry> mReadOnlyNewNotifList = Collections.unmodifiableList(mNewNotifList);
private final NotifPipelineChoreographer mChoreographer;
private int mConsecutiveReentrantRebuilds = 0;
@@ -308,7 +308,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
}
}
- List<ListEntry> getShadeList() {
+ List<PipelineEntry> getShadeList() {
Assert.isMainThread();
// NOTE: Accessing this method when the pipeline is running is generally going to provide
// incorrect results, and indicates a poorly behaved component of the pipeline.
@@ -493,7 +493,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
Trace.beginSection("ShadeListBuilder.notifySectionEntriesUpdated");
mTempSectionMembers.clear();
for (NotifSection section : mNotifSections) {
- for (ListEntry entry : mNotifList) {
+ for (PipelineEntry entry : mNotifList) {
if (section == entry.getSection()) {
mTempSectionMembers.add(entry);
}
@@ -514,11 +514,11 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
*/
private void applyNewNotifList() {
mNotifList.clear();
- List<ListEntry> emptyList = mNotifList;
+ List<PipelineEntry> emptyList = mNotifList;
mNotifList = mNewNotifList;
mNewNotifList = emptyList;
- List<ListEntry> readOnlyNotifList = mReadOnlyNotifList;
+ List<PipelineEntry> readOnlyNotifList = mReadOnlyNotifList;
mReadOnlyNotifList = mReadOnlyNewNotifList;
mReadOnlyNewNotifList = readOnlyNotifList;
}
@@ -538,12 +538,12 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
}
private void filterNotifs(
- Collection<? extends ListEntry> entries,
- List<ListEntry> out,
+ Collection<? extends PipelineEntry> entries,
+ List<PipelineEntry> out,
List<NotifFilter> filters) {
Trace.beginSection("ShadeListBuilder.filterNotifs");
final long now = mSystemClock.uptimeMillis();
- for (ListEntry entry : entries) {
+ for (PipelineEntry entry : entries) {
if (entry instanceof GroupEntry) {
final GroupEntry groupEntry = (GroupEntry) entry;
@@ -576,11 +576,11 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
Trace.endSection();
}
- private void groupNotifs(List<ListEntry> entries, List<ListEntry> out) {
+ private void groupNotifs(List<PipelineEntry> entries, List<PipelineEntry> out) {
Trace.beginSection("ShadeListBuilder.groupNotifs");
- for (ListEntry listEntry : entries) {
+ for (PipelineEntry PipelineEntry : entries) {
// since grouping hasn't happened yet, all notifs are NotificationEntries
- NotificationEntry entry = (NotificationEntry) listEntry;
+ NotificationEntry entry = (NotificationEntry) PipelineEntry;
if (entry.getSbn().isGroup()) {
final String topLevelKey = entry.getSbn().getGroupKey();
@@ -631,14 +631,14 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
Trace.endSection();
}
- private void stabilizeGroupingNotifs(List<ListEntry> topLevelList) {
+ private void stabilizeGroupingNotifs(List<PipelineEntry> topLevelList) {
if (getStabilityManager().isEveryChangeAllowed()) {
return;
}
Trace.beginSection("ShadeListBuilder.stabilizeGroupingNotifs");
for (int i = 0; i < topLevelList.size(); i++) {
- final ListEntry tle = topLevelList.get(i);
+ final PipelineEntry tle = topLevelList.get(i);
if (tle instanceof GroupEntry) {
// maybe put children back into their old group (including moving back to top-level)
GroupEntry groupEntry = (GroupEntry) tle;
@@ -667,13 +667,13 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
/**
* Returns true if the group change was suppressed, else false
*/
- private boolean maybeSuppressGroupChange(NotificationEntry entry, List<ListEntry> out) {
- final GroupEntry prevParent = entry.getPreviousAttachState().getParent();
+ private boolean maybeSuppressGroupChange(NotificationEntry entry, List<PipelineEntry> out) {
+ final PipelineEntry prevParent = entry.getPreviousAttachState().getParent();
if (prevParent == null) {
// New entries are always allowed.
return false;
}
- final GroupEntry assignedParent = entry.getParent();
+ final PipelineEntry assignedParent = entry.getParent();
if (prevParent == assignedParent) {
// Nothing to change.
return false;
@@ -691,21 +691,22 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
entry.setParent(prevParent);
if (prevParent == ROOT_ENTRY) {
out.add(entry);
- } else {
- prevParent.addChild(entry);
+ } else if (prevParent instanceof GroupEntry) {
+ ((GroupEntry) prevParent).addChild(entry);
if (!mGroups.containsKey(prevParent.getKey())) {
- mGroups.put(prevParent.getKey(), prevParent);
+ mGroups.put(prevParent.getKey(), (GroupEntry) prevParent);
}
}
+ // TODO(b/394483200): Revisit group stability for BundleEntry
return true;
}
return false;
}
- private void promoteNotifs(List<ListEntry> list) {
+ private void promoteNotifs(List<PipelineEntry> list) {
Trace.beginSection("ShadeListBuilder.promoteNotifs");
for (int i = 0; i < list.size(); i++) {
- final ListEntry tle = list.get(i);
+ final PipelineEntry tle = list.get(i);
if (tle instanceof GroupEntry) {
final GroupEntry group = (GroupEntry) tle;
@@ -725,7 +726,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
Trace.endSection();
}
- private void pruneIncompleteGroups(List<ListEntry> shadeList) {
+ private void pruneIncompleteGroups(List<PipelineEntry> shadeList) {
Trace.beginSection("ShadeListBuilder.pruneIncompleteGroups");
// Any group which lost a child on this run to stability is exempt from being pruned or
// having its summary promoted, regardless of how many children it has
@@ -742,7 +743,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
// Iterate backwards, so that we can remove elements without affecting indices of
// yet-to-be-accessed entries.
for (int i = shadeList.size() - 1; i >= 0; i--) {
- final ListEntry tle = shadeList.get(i);
+ final PipelineEntry tle = shadeList.get(i);
if (tle instanceof GroupEntry) {
final GroupEntry group = (GroupEntry) tle;
@@ -793,7 +794,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
Trace.endSection();
}
- private void pruneGroupAtIndexAndPromoteSummary(List<ListEntry> shadeList,
+ private void pruneGroupAtIndexAndPromoteSummary(List<PipelineEntry> shadeList,
GroupEntry group, int index) {
// Validate that the group has no children
checkArgument(group.getChildren().isEmpty(), "group should have no children");
@@ -801,7 +802,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
NotificationEntry summary = group.getSummary();
summary.setParent(ROOT_ENTRY);
// The list may be sorted; replace the group with the summary, in its place
- ListEntry oldEntry = shadeList.set(index, summary);
+ PipelineEntry oldEntry = shadeList.set(index, summary);
// Validate that the replaced entry was the group entry
checkState(oldEntry == group);
@@ -812,10 +813,10 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
"SUMMARY with no children @ " + mPipelineState.getStateName());
}
- private void pruneGroupAtIndexAndPromoteAnyChildren(List<ListEntry> shadeList,
+ private void pruneGroupAtIndexAndPromoteAnyChildren(List<PipelineEntry> shadeList,
GroupEntry group, int index) {
// REMOVE the GroupEntry at this index
- ListEntry oldEntry = shadeList.remove(index);
+ PipelineEntry oldEntry = shadeList.remove(index);
// Validate that the replaced entry was the group entry
checkState(oldEntry == group);
@@ -868,14 +869,14 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
* top level (ungrouped) notifications.
*/
@NonNull
- private Set<String> getGroupsWithChildrenLostToStability(List<ListEntry> shadeList) {
+ private Set<String> getGroupsWithChildrenLostToStability(List<PipelineEntry> shadeList) {
if (getStabilityManager().isEveryChangeAllowed()) {
return Collections.emptySet();
}
ArraySet<String> groupsWithChildrenLostToStability = new ArraySet<>();
for (int i = 0; i < shadeList.size(); i++) {
- final ListEntry tle = shadeList.get(i);
- final GroupEntry suppressedParent =
+ final PipelineEntry tle = shadeList.get(i);
+ final PipelineEntry suppressedParent =
tle.getAttachState().getSuppressedChanges().getParent();
if (suppressedParent != null) {
// This top-level-entry was supposed to be attached to this group,
@@ -892,9 +893,10 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
*
* These groups will be exempt from appearing without any children.
*/
- private void addGroupsWithChildrenLostToPromotion(List<ListEntry> shadeList, Set<String> out) {
+ private void addGroupsWithChildrenLostToPromotion(List<PipelineEntry> shadeList,
+ Set<String> out) {
for (int i = 0; i < shadeList.size(); i++) {
- final ListEntry tle = shadeList.get(i);
+ final PipelineEntry tle = shadeList.get(i);
if (tle.getAttachState().getPromoter() != null) {
// This top-level-entry was part of a group, but was promoted out of it.
final String groupKey = tle.getRepresentativeEntry().getSbn().getGroupKey();
@@ -910,7 +912,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
* These groups will be exempt from appearing without any children.
*/
private void addGroupsWithChildrenLostToFiltering(Set<String> out) {
- for (ListEntry tle : mAllEntries) {
+ for (PipelineEntry tle : mAllEntries) {
StatusBarNotification sbn = tle.getRepresentativeEntry().getSbn();
if (sbn.isGroup()
&& !sbn.getNotification().isGroupSummary()
@@ -921,14 +923,14 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
}
/**
- * If a ListEntry was added to the shade list and then later removed (e.g. because it was a
+ * If a PipelineEntry was added to the shade list and then later removed (e.g. because it was a
* group that was broken up), this method will erase any bookkeeping traces of that addition
* and/or check that they were already erased.
*
* Before calling this method, the entry must already have been removed from its parent. If
* it's a group, its summary must be null and its children must be empty.
*/
- private void annulAddition(ListEntry entry, List<ListEntry> shadeList) {
+ private void annulAddition(PipelineEntry entry, List<PipelineEntry> shadeList) {
// This function does very little, but if any of its assumptions are violated (and it has a
// lot of them), it will put the system into an inconsistent state. So we check all of them
@@ -956,9 +958,11 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
throw new IllegalStateException(
"Cannot nullify group " + ge.getKey() + ": still has children");
}
- } else if (entry instanceof NotificationEntry) {
- if (entry == entry.getParent().getSummary()
- || entry.getParent().getChildren().contains(entry)) {
+ } else if (entry instanceof NotificationEntry
+ && entry.getParent() instanceof GroupEntry) {
+ GroupEntry parentGroupEntry = (GroupEntry) entry.getParent();
+ if (entry == parentGroupEntry.getSummary()
+ || parentGroupEntry.getChildren().contains(entry)) {
throw new IllegalStateException("Cannot nullify addition of child "
+ entry.getKey() + ": it's still attached to its parent.");
}
@@ -973,14 +977,14 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
* This can happen if the entry is removed from a group that was broken up or if the entry was
* filtered out during any of the filtering steps.
*/
- private void annulAddition(ListEntry entry) {
+ private void annulAddition(PipelineEntry entry) {
entry.getAttachState().detach();
}
private void assignSections() {
Trace.beginSection("ShadeListBuilder.assignSections");
// Assign sections to top-level elements and their children
- for (ListEntry entry : mNotifList) {
+ for (PipelineEntry entry : mNotifList) {
NotifSection section = applySections(entry);
if (entry instanceof GroupEntry) {
GroupEntry parent = (GroupEntry) entry;
@@ -1001,7 +1005,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
private void sortWithSemiStableSort() {
// Sort each group's children
boolean allSorted = true;
- for (ListEntry entry : mNotifList) {
+ for (PipelineEntry entry : mNotifList) {
if (entry instanceof GroupEntry) {
GroupEntry parent = (GroupEntry) entry;
allSorted &= sortGroupChildren(parent.getRawChildren());
@@ -1010,7 +1014,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
// Sort each section within the top level list
mNotifList.sort(mTopLevelComparator);
if (!getStabilityManager().isEveryChangeAllowed()) {
- for (List<ListEntry> subList : getSectionSubLists(mNotifList)) {
+ for (List<PipelineEntry> subList : getSectionSubLists(mNotifList)) {
allSorted &= mSemiStableSort.stabilizeTo(subList, mStableOrder, mNewNotifList);
}
applyNewNotifList();
@@ -1022,7 +1026,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
}
}
- private Iterable<List<ListEntry>> getSectionSubLists(List<ListEntry> entries) {
+ private Iterable<List<PipelineEntry>> getSectionSubLists(List<PipelineEntry> entries) {
return ShadeListBuilderHelper.INSTANCE.getSectionSubLists(entries);
}
@@ -1057,12 +1061,12 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
/**
* Assign the index of each notification relative to the total order
*/
- private void assignIndexes(List<ListEntry> notifList) {
+ private void assignIndexes(List<PipelineEntry> notifList) {
if (notifList.size() == 0) return;
NotifSection currentSection = requireNonNull(notifList.get(0).getSection());
int sectionMemberIndex = 0;
for (int i = 0; i < notifList.size(); i++) {
- final ListEntry entry = notifList.get(i);
+ final PipelineEntry entry = notifList.get(i);
NotifSection section = requireNonNull(entry.getSection());
if (section.getIndex() != currentSection.getIndex()) {
sectionMemberIndex = 0;
@@ -1099,7 +1103,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
Trace.endSection();
}
- private void logAttachStateChanges(ListEntry entry) {
+ private void logAttachStateChanges(PipelineEntry entry) {
final ListAttachState curr = entry.getAttachState();
final ListAttachState prev = entry.getPreviousAttachState();
@@ -1115,8 +1119,8 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
mLogger.logParentChanged(mIterationCount, prev.getParent(), curr.getParent());
}
- GroupEntry currSuppressedParent = curr.getSuppressedChanges().getParent();
- GroupEntry prevSuppressedParent = prev.getSuppressedChanges().getParent();
+ PipelineEntry currSuppressedParent = curr.getSuppressedChanges().getParent();
+ PipelineEntry prevSuppressedParent = prev.getSuppressedChanges().getParent();
if (currSuppressedParent != null && (prevSuppressedParent == null
|| !prevSuppressedParent.getKey().equals(currSuppressedParent.getKey()))) {
mLogger.logParentChangeSuppressedStarted(
@@ -1210,7 +1214,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
@Nullable
private NotifComparator getSectionComparator(
- @NonNull ListEntry o1, @NonNull ListEntry o2) {
+ @NonNull PipelineEntry o1, @NonNull PipelineEntry o2) {
final NotifSection section = o1.getSection();
if (section != o2.getSection()) {
throw new RuntimeException("Entry ordering should only be done within sections");
@@ -1221,7 +1225,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
return null;
}
- private final Comparator<ListEntry> mTopLevelComparator = (o1, o2) -> {
+ private final Comparator<PipelineEntry> mTopLevelComparator = (o1, o2) -> {
int cmp = Integer.compare(
o1.getSectionIndex(),
o2.getSectionIndex());
@@ -1264,7 +1268,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
};
@Nullable
- private Integer getStableOrderRank(ListEntry entry) {
+ private Integer getStableOrderRank(PipelineEntry entry) {
if (getStabilityManager().isEntryReorderingAllowed(entry)) {
// let the stability manager constrain or allow reordering
return null;
@@ -1323,7 +1327,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
return null;
}
- private NotifSection applySections(ListEntry entry) {
+ private NotifSection applySections(PipelineEntry entry) {
final NotifSection newSection = findSection(entry);
final ListAttachState prevAttachState = entry.getPreviousAttachState();
@@ -1346,7 +1350,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
return finalSection;
}
- private void setEntrySection(ListEntry entry, NotifSection finalSection) {
+ private void setEntrySection(PipelineEntry entry, NotifSection finalSection) {
entry.getAttachState().setSection(finalSection);
NotificationEntry representativeEntry = entry.getRepresentativeEntry();
if (representativeEntry != null) {
@@ -1358,7 +1362,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
}
@NonNull
- private NotifSection findSection(ListEntry entry) {
+ private NotifSection findSection(PipelineEntry entry) {
for (int i = 0; i < mNotifSections.size(); i++) {
NotifSection section = mNotifSections.get(i);
if (section.getSectioner().isInSection(entry)) {
@@ -1428,10 +1432,10 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
mChoreographer.schedule();
}
- private static int countChildren(List<ListEntry> entries) {
+ private static int countChildren(List<PipelineEntry> entries) {
int count = 0;
for (int i = 0; i < entries.size(); i++) {
- final ListEntry entry = entries.get(i);
+ final PipelineEntry entry = entries.get(i);
if (entry instanceof GroupEntry) {
count += ((GroupEntry) entry).getChildren().size();
}
@@ -1439,7 +1443,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
return count;
}
- private void dispatchOnBeforeTransformGroups(List<ListEntry> entries) {
+ private void dispatchOnBeforeTransformGroups(List<PipelineEntry> entries) {
Trace.beginSection("ShadeListBuilder.dispatchOnBeforeTransformGroups");
mOnBeforeTransformGroupsListeners.forEachTraced(listener -> {
listener.onBeforeTransformGroups(entries);
@@ -1447,7 +1451,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
Trace.endSection();
}
- private void dispatchOnBeforeSort(List<ListEntry> entries) {
+ private void dispatchOnBeforeSort(List<PipelineEntry> entries) {
Trace.beginSection("ShadeListBuilder.dispatchOnBeforeSort");
mOnBeforeSortListeners.forEachTraced(listener -> {
listener.onBeforeSort(entries);
@@ -1455,7 +1459,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
Trace.endSection();
}
- private void dispatchOnBeforeFinalizeFilter(List<ListEntry> entries) {
+ private void dispatchOnBeforeFinalizeFilter(List<PipelineEntry> entries) {
Trace.beginSection("ShadeListBuilder.dispatchOnBeforeFinalizeFilter");
mOnBeforeFinalizeFilterListeners.forEachTraced(listener -> {
listener.onBeforeFinalizeFilter(entries);
@@ -1463,7 +1467,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
Trace.endSection();
}
- private void dispatchOnBeforeRenderList(List<ListEntry> entries) {
+ private void dispatchOnBeforeRenderList(List<PipelineEntry> entries) {
Trace.beginSection("ShadeListBuilder.dispatchOnBeforeRenderList");
mOnBeforeRenderListListeners.forEachTraced(listener -> {
listener.onBeforeRenderList(entries);
@@ -1508,13 +1512,13 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
* @param entries A read-only view into the current notif list. Note that this list is
* backed by the live list and will change in response to new pipeline runs.
*/
- void onRenderList(@NonNull List<ListEntry> entries);
+ void onRenderList(@NonNull List<PipelineEntry> entries);
}
private static final NotifSectioner DEFAULT_SECTIONER = new NotifSectioner("UnknownSection",
NotificationPriorityBucketKt.BUCKET_UNKNOWN) {
@Override
- public boolean isInSection(ListEntry entry) {
+ public boolean isInSection(PipelineEntry entry) {
return true;
}
};
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/SuppressedAttachState.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/SuppressedAttachState.kt
index 584563b6c388..c9429547a518 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/SuppressedAttachState.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/SuppressedAttachState.kt
@@ -19,7 +19,7 @@ package com.android.systemui.statusbar.notification.collection
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
/**
- * Stores the suppressed state that [ShadeListBuilder] assigned to this [ListEntry] before the
+ * Stores the suppressed state that [ShadeListBuilder] assigned to this [PipelineEntry] before the
* VisualStabilityManager suppressed group and section changes.
*/
data class SuppressedAttachState private constructor(
@@ -35,7 +35,7 @@ data class SuppressedAttachState private constructor(
* - Root if suppressing group change to top-level
* - GroupEntry if suppressing group change to a different group
*/
- var parent: GroupEntry?,
+ var parent: PipelineEntry?,
/**
* Whether the ListEntry would have been pruned had its group change not been suppressed.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BundleCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BundleCoordinator.kt
index 244c5946c21e..e6d5f4120a20 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BundleCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/BundleCoordinator.kt
@@ -20,7 +20,7 @@ import android.app.NotificationChannel.NEWS_ID
import android.app.NotificationChannel.PROMOTIONS_ID
import android.app.NotificationChannel.RECS_ID
import android.app.NotificationChannel.SOCIAL_MEDIA_ID
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
@@ -48,7 +48,7 @@ class BundleCoordinator @Inject constructor(
val newsSectioner =
object : NotifSectioner("News", BUCKET_NEWS) {
- override fun isInSection(entry: ListEntry): Boolean {
+ override fun isInSection(entry: PipelineEntry): Boolean {
return entry.representativeEntry?.channel?.id == NEWS_ID
}
@@ -59,7 +59,7 @@ class BundleCoordinator @Inject constructor(
val socialSectioner =
object : NotifSectioner("Social", BUCKET_SOCIAL) {
- override fun isInSection(entry: ListEntry): Boolean {
+ override fun isInSection(entry: PipelineEntry): Boolean {
return entry.representativeEntry?.channel?.id == SOCIAL_MEDIA_ID
}
@@ -70,7 +70,7 @@ class BundleCoordinator @Inject constructor(
val recsSectioner =
object : NotifSectioner("Recommendations", BUCKET_RECS) {
- override fun isInSection(entry: ListEntry): Boolean {
+ override fun isInSection(entry: PipelineEntry): Boolean {
return entry.representativeEntry?.channel?.id == RECS_ID
}
@@ -81,7 +81,7 @@ class BundleCoordinator @Inject constructor(
val promoSectioner =
object : NotifSectioner("Promotions", BUCKET_PROMO) {
- override fun isInSection(entry: ListEntry): Boolean {
+ override fun isInSection(entry: PipelineEntry): Boolean {
return entry.representativeEntry?.channel?.id == PROMOTIONS_ID
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinator.java
index 9df4bf4af4e8..afba85b49c30 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ColorizedFgsCoordinator.java
@@ -25,6 +25,7 @@ import androidx.annotation.Nullable;
import com.android.systemui.dagger.qualifiers.Application;
import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
@@ -96,7 +97,7 @@ public class ColorizedFgsCoordinator implements Coordinator {
private final NotifSectioner mNotifSectioner = new NotifSectioner("ColorizedSectioner",
NotificationPriorityBucketKt.BUCKET_FOREGROUND_SERVICE) {
@Override
- public boolean isInSection(ListEntry entry) {
+ public boolean isInSection(PipelineEntry entry) {
NotificationEntry notificationEntry = entry.getRepresentativeEntry();
if (notificationEntry != null) {
return isRichOngoing(notificationEntry);
@@ -117,7 +118,7 @@ public class ColorizedFgsCoordinator implements Coordinator {
private final NotifComparator mOngoingComparator = new NotifComparator(
"OngoingComparator") {
@Override
- public int compare(@NonNull ListEntry o1, @NonNull ListEntry o2) {
+ public int compare(@NonNull PipelineEntry o1, @NonNull PipelineEntry o2) {
return Integer.compare(
getSortKey(o1.getRepresentativeEntry()),
getSortKey(o2.getRepresentativeEntry())
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinator.kt
index af2c1979ff77..248b5286803f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ConversationCoordinator.kt
@@ -16,7 +16,8 @@
package com.android.systemui.statusbar.notification.collection.coordinator
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.GroupEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.SortBySectionTimeFlag
@@ -61,6 +62,7 @@ class ConversationCoordinator @Inject constructor(
originalGroup == null -> null
originalGroup == promoted.parent -> null
originalGroup.parent == null -> null
+ originalGroup !is GroupEntry -> summary.key
originalGroup.summary != summary -> null
originalGroup.children.any { it.channel == summary.channel } -> null
else -> summary.key
@@ -74,7 +76,7 @@ class ConversationCoordinator @Inject constructor(
override fun shouldPromoteToTopLevel(entry: NotificationEntry): Boolean {
val shouldPromote = entry.channel?.isImportantConversation == true
if (shouldPromote) {
- val summary = entry.parent?.summary
+ val summary = (entry.parent as? GroupEntry)?.summary
if (summary != null && entry.channel == summary.channel) {
promotedEntriesToSummaryOfSameChannel[entry] = summary
}
@@ -85,14 +87,14 @@ class ConversationCoordinator @Inject constructor(
val priorityPeopleSectioner =
object : NotifSectioner("Priority People", BUCKET_PRIORITY_PEOPLE) {
- override fun isInSection(entry: ListEntry): Boolean {
+ override fun isInSection(entry: PipelineEntry): Boolean {
return getPeopleType(entry) == TYPE_IMPORTANT_PERSON
}
}
// TODO(b/330193582): Rename to just "People"
val peopleAlertingSectioner = object : NotifSectioner("People(alerting)", BUCKET_PEOPLE) {
- override fun isInSection(entry: ListEntry): Boolean {
+ override fun isInSection(entry: PipelineEntry): Boolean {
if (SortBySectionTimeFlag.isEnabled) {
return highPriorityProvider.isHighPriorityConversation(entry)
|| isConversation(entry)
@@ -111,7 +113,7 @@ class ConversationCoordinator @Inject constructor(
val peopleSilentSectioner = object : NotifSectioner("People(silent)", BUCKET_PEOPLE) {
// Because the peopleAlertingSectioner is above this one, it will claim all conversations that are alerting.
// All remaining conversations must be silent.
- override fun isInSection(entry: ListEntry): Boolean {
+ override fun isInSection(entry: PipelineEntry): Boolean {
SortBySectionTimeFlag.assertInLegacyMode()
return isConversation(entry)
}
@@ -132,17 +134,17 @@ class ConversationCoordinator @Inject constructor(
pipeline.addOnBeforeRenderListListener(onBeforeRenderListListener)
}
- private fun isConversation(entry: ListEntry): Boolean =
+ private fun isConversation(entry: PipelineEntry): Boolean =
getPeopleType(entry) != TYPE_NON_PERSON
@PeopleNotificationType
- private fun getPeopleType(entry: ListEntry): Int =
+ private fun getPeopleType(entry: PipelineEntry): Int =
entry.representativeEntry?.let {
peopleNotificationIdentifier.getPeopleNotificationType(it)
} ?: TYPE_NON_PERSON
private val notifComparator: NotifComparator = object : NotifComparator("People") {
- override fun compare(entry1: ListEntry, entry2: ListEntry): Int {
+ override fun compare(entry1: PipelineEntry, entry2: PipelineEntry): Int {
val type1 = getPeopleType(entry1)
val type2 = getPeopleType(entry2)
return type2.compareTo(type1)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DataStoreCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DataStoreCoordinator.kt
index 034a4fd2af72..e4ec76c68e6f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DataStoreCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DataStoreCoordinator.kt
@@ -17,7 +17,7 @@
package com.android.systemui.statusbar.notification.collection.coordinator
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifLiveDataStoreImpl
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.NotificationEntry
@@ -43,12 +43,12 @@ internal constructor(private val notifLiveDataStoreImpl: NotifLiveDataStoreImpl)
d.dump("notifLiveDataStoreImpl", notifLiveDataStoreImpl)
}
- private fun onAfterRenderList(entries: List<ListEntry>) {
+ private fun onAfterRenderList(entries: List<PipelineEntry>) {
val flatEntryList = flattenedEntryList(entries)
notifLiveDataStoreImpl.setActiveNotifList(flatEntryList)
}
- private fun flattenedEntryList(entries: List<ListEntry>) =
+ private fun flattenedEntryList(entries: List<PipelineEntry>) =
mutableListOf<NotificationEntry>().also { list ->
entries.forEach { entry ->
when (entry) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DismissibilityCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DismissibilityCoordinator.kt
index 0a9dddc1c75e..6bed0cf054af 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DismissibilityCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/DismissibilityCoordinator.kt
@@ -17,7 +17,7 @@
package com.android.systemui.statusbar.notification.collection.coordinator
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
import com.android.systemui.statusbar.notification.collection.provider.NotificationDismissibilityProviderImpl
@@ -37,7 +37,7 @@ constructor(
pipeline.addOnBeforeRenderListListener(::onBeforeRenderListListener)
}
- private fun onBeforeRenderListListener(entries: List<ListEntry>) {
+ private fun onBeforeRenderListListener(entries: List<PipelineEntry>) {
val isLocked = !keyguardStateController.isUnlocked
val nonDismissableEntryKeys = mutableSetOf<String>()
markNonDismissibleEntries(nonDismissableEntryKeys, entries, isLocked)
@@ -54,7 +54,7 @@ constructor(
*/
private fun markNonDismissibleEntries(
markedKeys: MutableSet<String>,
- entries: List<ListEntry>,
+ entries: List<PipelineEntry>,
isLocked: Boolean
): Boolean {
var anyNonDismissableEntries = false
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GroupCountCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GroupCountCoordinator.kt
index 02bf3b3be537..2f0701f96f28 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GroupCountCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GroupCountCoordinator.kt
@@ -18,7 +18,7 @@ package com.android.systemui.statusbar.notification.collection.coordinator
import android.util.ArrayMap
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
import com.android.systemui.statusbar.notification.collection.render.NotifGroupController
@@ -34,7 +34,7 @@ class GroupCountCoordinator @Inject constructor() : Coordinator {
pipeline.addOnAfterRenderGroupListener(::onAfterRenderGroup)
}
- private fun onBeforeFinalizeFilter(entries: List<ListEntry>) {
+ private fun onBeforeFinalizeFilter(entries: List<PipelineEntry>) {
// save untruncated child counts to our internal map
untruncatedChildCounts.clear()
entries.asSequence().filterIsInstance<GroupEntry>().forEach { groupEntry ->
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GroupWhenCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GroupWhenCoordinator.kt
index f253100b3661..d0411b56d92d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GroupWhenCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GroupWhenCoordinator.kt
@@ -18,7 +18,7 @@ package com.android.systemui.statusbar.notification.collection.coordinator
import android.util.ArrayMap
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Invalidator
@@ -52,7 +52,7 @@ constructor(
pipeline.addPreRenderInvalidator(invalidator)
}
- private fun onBeforeFinalizeFilterListener(entries: List<ListEntry>) {
+ private fun onBeforeFinalizeFilterListener(entries: List<PipelineEntry>) {
cancelListInvalidation()
notificationGroupTimes.clear()
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GutsCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GutsCoordinator.kt
index b200136b1b43..9045aac6ea6f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GutsCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/GutsCoordinator.kt
@@ -18,7 +18,7 @@ package com.android.systemui.statusbar.notification.collection.coordinator
import android.util.ArraySet
import com.android.systemui.Dumpable
import com.android.systemui.dump.DumpManager
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
@@ -113,7 +113,7 @@ class GutsCoordinator @Inject constructor(
}
}
- private fun isCurrentlyShowingGuts(entry: ListEntry) =
+ private fun isCurrentlyShowingGuts(entry: PipelineEntry) =
notifsWithOpenGuts.contains(entry.key)
private fun closeGutsAndEndLifetimeExtension(entry: NotificationEntry) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt
index eb5a3703bcfb..611e0ef77fac 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt
@@ -27,7 +27,7 @@ import com.android.systemui.statusbar.chips.notification.domain.interactor.Statu
import com.android.systemui.statusbar.chips.notification.shared.StatusBarNotifChips
import com.android.systemui.statusbar.notification.NotifPipelineFlags
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifCollection
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.NotificationEntry
@@ -103,7 +103,7 @@ constructor(
mNotifPipeline = pipeline
mHeadsUpManager.addListener(mOnHeadsUpChangedListener)
pipeline.addCollectionListener(mNotifCollectionListener)
- pipeline.addOnBeforeTransformGroupsListener(::onBeforeTransformGroups)
+ pipeline.addOnBeforeTransformGroupsListener { onBeforeTransformGroups() }
pipeline.addOnBeforeFinalizeFilterListener(::onBeforeFinalizeFilter)
pipeline.addPromoter(mNotifPromoter)
pipeline.addNotificationLifetimeExtender(mLifetimeExtender)
@@ -170,7 +170,7 @@ constructor(
* Once the pipeline starts running, we can look through posted entries and quickly process any
* that don't have groups, and thus will never gave a group heads up edge case.
*/
- fun onBeforeTransformGroups(list: List<ListEntry>) {
+ fun onBeforeTransformGroups() {
mNow = mSystemClock.currentTimeMillis()
if (mPostedEntries.isEmpty()) {
return
@@ -191,7 +191,7 @@ constructor(
* we know that stability and [NotifPromoter]s have been applied, so we can use the location of
* notifications in this list to determine what kind of group heads up behavior should happen.
*/
- fun onBeforeFinalizeFilter(list: List<ListEntry>) =
+ fun onBeforeFinalizeFilter(list: List<PipelineEntry>) =
mHeadsUpManager.modifyHuns { hunMutator ->
// Nothing to do if there are no other adds/updates
if (mPostedEntries.isEmpty()) {
@@ -410,7 +410,7 @@ constructor(
)
.firstOrNull()
- private fun getGroupLocationsByKey(list: List<ListEntry>): Map<String, GroupLocation> =
+ private fun getGroupLocationsByKey(list: List<PipelineEntry>): Map<String, GroupLocation> =
mutableMapOf<String, GroupLocation>().also { map ->
list.forEach { topLevelEntry ->
when (topLevelEntry) {
@@ -833,13 +833,13 @@ constructor(
val sectioner =
object : NotifSectioner("HeadsUp", BUCKET_HEADS_UP) {
- override fun isInSection(entry: ListEntry): Boolean =
+ override fun isInSection(entry: PipelineEntry): Boolean =
// TODO: This check won't notice if a child of the group is going to HUN...
isGoingToShowHunNoRetract(entry)
override fun getComparator(): NotifComparator {
return object : NotifComparator("HeadsUp") {
- override fun compare(o1: ListEntry, o2: ListEntry): Int =
+ override fun compare(o1: PipelineEntry, o2: PipelineEntry): Int =
mHeadsUpManager.compare(o1.representativeEntry, o2.representativeEntry)
}
}
@@ -867,7 +867,7 @@ constructor(
private fun isSticky(entry: NotificationEntry) = mHeadsUpManager.isSticky(entry.key)
- private fun isEntryBinding(entry: ListEntry): Boolean {
+ private fun isEntryBinding(entry: PipelineEntry): Boolean {
val bindingUntil = mEntriesBindingUntil[entry.key]
return bindingUntil != null && bindingUntil >= mNow
}
@@ -875,12 +875,12 @@ constructor(
/**
* Whether the notification is already heads up or binding so that it can imminently heads up
*/
- private fun isAttemptingToShowHun(entry: ListEntry) =
+ private fun isAttemptingToShowHun(entry: PipelineEntry) =
mHeadsUpManager.isHeadsUpEntry(entry.key) ||
isEntryBinding(entry) ||
isHeadsUpAnimatingAway(entry)
- private fun isHeadsUpAnimatingAway(entry: ListEntry): Boolean {
+ private fun isHeadsUpAnimatingAway(entry: PipelineEntry): Boolean {
if (!GroupHunAnimationFix.isEnabled) return false
return entry.representativeEntry?.row?.isHeadsUpAnimatingAway ?: false
}
@@ -891,7 +891,7 @@ constructor(
* returns `true` even if the update would (in isolation of its group) cause the heads up to be
* retracted. This is important for not retracting transferred group heads ups.
*/
- private fun isGoingToShowHunNoRetract(entry: ListEntry) =
+ private fun isGoingToShowHunNoRetract(entry: PipelineEntry) =
mPostedEntries[entry.key]?.calculateShouldBeHeadsUpNoRetract ?: isAttemptingToShowHun(entry)
/**
@@ -900,7 +900,7 @@ constructor(
* strict because any update which would revoke the heads up supersedes the current heads
* up/binding state.
*/
- private fun isGoingToShowHunStrict(entry: ListEntry) =
+ private fun isGoingToShowHunStrict(entry: PipelineEntry) =
mPostedEntries[entry.key]?.calculateShouldBeHeadsUpStrict ?: isAttemptingToShowHun(entry)
private fun endNotifLifetimeExtensionIfExtended(entry: NotificationEntry) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinator.kt
index e2328497d9ea..56deb18df9ab 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/LockScreenMinimalismCoordinator.kt
@@ -27,7 +27,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
@@ -176,7 +176,7 @@ constructor(
}
}
- private fun pickOutTopUnseenNotifs(list: List<ListEntry>) {
+ private fun pickOutTopUnseenNotifs(list: List<PipelineEntry>) {
if (NotificationMinimalism.isUnexpectedlyInLegacyMode()) return
if (!minimalismEnabled) return
// Only ever elevate a top unseen notification on keyguard, not even locked shade
@@ -224,7 +224,7 @@ constructor(
val topOngoingSectioner =
object : NotifSectioner("TopOngoing", BUCKET_TOP_ONGOING) {
- override fun isInSection(entry: ListEntry): Boolean {
+ override fun isInSection(entry: PipelineEntry): Boolean {
if (NotificationMinimalism.isUnexpectedlyInLegacyMode()) return false
if (!minimalismEnabled) return false
return entry.anyEntry { notificationEntry ->
@@ -235,7 +235,7 @@ constructor(
val topUnseenSectioner =
object : NotifSectioner("TopUnseen", BUCKET_TOP_UNSEEN) {
- override fun isInSection(entry: ListEntry): Boolean {
+ override fun isInSection(entry: PipelineEntry): Boolean {
if (NotificationMinimalism.isUnexpectedlyInLegacyMode()) return false
if (!minimalismEnabled) return false
return entry.anyEntry { notificationEntry ->
@@ -244,7 +244,7 @@ constructor(
}
}
- private fun ListEntry.anyEntry(predicate: (NotificationEntry?) -> Boolean) =
+ private fun PipelineEntry.anyEntry(predicate: (NotificationEntry?) -> Boolean) =
when {
predicate(representativeEntry) -> true
this !is GroupEntry -> false
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/OriginalUnseenKeyguardCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/OriginalUnseenKeyguardCoordinator.kt
index de6f2576ff19..660ee401b369 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/OriginalUnseenKeyguardCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/OriginalUnseenKeyguardCoordinator.kt
@@ -30,6 +30,7 @@ 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 com.android.systemui.statusbar.expansionChanges
+import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
@@ -313,7 +314,7 @@ constructor(
unseenNotifications.contains(entry) -> false
// Don't apply the filter to (non-promoted) group summaries
// - summary will be pruned if necessary, depending on if children are filtered
- entry.parent?.summary == entry -> false
+ (entry.parent as? GroupEntry)?.summary == entry -> false
// Check that the entry satisfies certain characteristics that would bypass the
// filter
shouldIgnoreUnseenCheck(entry) -> false
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java
index 2ecce1f02ef6..20c6736b74c8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/PreparationCoordinator.java
@@ -35,7 +35,7 @@ import androidx.annotation.Nullable;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.statusbar.IStatusBarService;
import com.android.systemui.statusbar.notification.collection.GroupEntry;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.ShadeListBuilder;
@@ -232,9 +232,10 @@ public class PreparationCoordinator implements Coordinator {
*/
@Override
public boolean shouldFilterOut(NotificationEntry entry, long now) {
- final GroupEntry parent = requireNonNull(entry.getParent());
- Boolean isMemberOfDelayedGroup = mIsDelayedGroupCache.get(parent);
- if (isMemberOfDelayedGroup == null) {
+ final PipelineEntry pipelineEntryParent = requireNonNull(entry.getParent());
+ Boolean isMemberOfDelayedGroup = mIsDelayedGroupCache.get(pipelineEntryParent);
+ if (isMemberOfDelayedGroup == null && pipelineEntryParent instanceof GroupEntry) {
+ GroupEntry parent = (GroupEntry) pipelineEntryParent;
isMemberOfDelayedGroup = shouldWaitForGroupToInflate(parent, now);
mIsDelayedGroupCache.put(parent, isMemberOfDelayedGroup);
}
@@ -279,7 +280,7 @@ public class PreparationCoordinator implements Coordinator {
}
};
- private void purgeCaches(Collection<ListEntry> entries) {
+ private void purgeCaches(Collection<PipelineEntry> entries) {
Set<String> wantedPackages = getPackages(entries);
mAppIconProvider.purgeCache(wantedPackages);
mNotificationIconStyleProvider.purgeCache(wantedPackages);
@@ -288,9 +289,9 @@ public class PreparationCoordinator implements Coordinator {
/**
* Get all app packages present in {@param entries}.
*/
- private static @NonNull Set<String> getPackages(Collection<ListEntry> entries) {
+ private static @NonNull Set<String> getPackages(Collection<PipelineEntry> entries) {
Set<String> packages = new HashSet<>();
- for (ListEntry entry : entries) {
+ for (PipelineEntry entry : entries) {
NotificationEntry notificationEntry = entry.getRepresentativeEntry();
if (notificationEntry == null) {
Log.wtf(TAG, "notification entry " + entry.getKey()
@@ -302,9 +303,9 @@ public class PreparationCoordinator implements Coordinator {
return packages;
}
- private void inflateAllRequiredViews(List<ListEntry> entries) {
+ private void inflateAllRequiredViews(List<PipelineEntry> entries) {
for (int i = 0, size = entries.size(); i < size; i++) {
- ListEntry entry = entries.get(i);
+ PipelineEntry entry = entries.get(i);
if (entry instanceof GroupEntry) {
GroupEntry groupEntry = (GroupEntry) entry;
inflateRequiredGroupViews(groupEntry);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java
index 69b069d792e3..d1063d95a305 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RankingCoordinator.java
@@ -20,7 +20,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope;
@@ -97,7 +97,7 @@ public class RankingCoordinator implements Coordinator {
private final NotifSectioner mAlertingNotifSectioner = new NotifSectioner("Alerting",
NotificationPriorityBucketKt.BUCKET_ALERTING) {
@Override
- public boolean isInSection(ListEntry entry) {
+ public boolean isInSection(PipelineEntry entry) {
return mHighPriorityProvider.isHighPriority(entry);
}
@@ -115,8 +115,9 @@ public class RankingCoordinator implements Coordinator {
private final NotifSectioner mSilentNotifSectioner = new NotifSectioner("Silent",
NotificationPriorityBucketKt.BUCKET_SILENT) {
@Override
- public boolean isInSection(ListEntry entry) {
+ public boolean isInSection(PipelineEntry entry) {
return !mHighPriorityProvider.isHighPriority(entry)
+ && entry.getRepresentativeEntry() != null
&& !entry.getRepresentativeEntry().isAmbient();
}
@@ -128,7 +129,7 @@ public class RankingCoordinator implements Coordinator {
@Nullable
@Override
- public void onEntriesUpdated(@NonNull List<ListEntry> entries) {
+ public void onEntriesUpdated(@NonNull List<PipelineEntry> entries) {
mHasSilentEntries = false;
for (int i = 0; i < entries.size(); i++) {
if (entries.get(i).getRepresentativeEntry().getSbn().isClearable()) {
@@ -144,7 +145,7 @@ public class RankingCoordinator implements Coordinator {
private final NotifSectioner mMinimizedNotifSectioner = new NotifSectioner("Minimized",
NotificationPriorityBucketKt.BUCKET_SILENT) {
@Override
- public boolean isInSection(ListEntry entry) {
+ public boolean isInSection(PipelineEntry entry) {
return !mHighPriorityProvider.isHighPriority(entry)
&& entry.getRepresentativeEntry().isAmbient();
}
@@ -157,7 +158,7 @@ public class RankingCoordinator implements Coordinator {
@Nullable
@Override
- public void onEntriesUpdated(@NonNull List<ListEntry> entries) {
+ public void onEntriesUpdated(@NonNull List<PipelineEntry> entries) {
mHasMinimizedEntries = false;
for (int i = 0; i < entries.size(); i++) {
if (entries.get(i).getRepresentativeEntry().getSbn().isClearable()) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAlertTimeCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAlertTimeCoordinator.kt
index 4a7b7ca51ba2..930e52a8fd52 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAlertTimeCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAlertTimeCoordinator.kt
@@ -17,7 +17,7 @@ package com.android.systemui.statusbar.notification.collection.coordinator
import android.util.ArrayMap
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
@@ -39,7 +39,7 @@ class RowAlertTimeCoordinator @Inject constructor() : Coordinator {
pipeline.addOnAfterRenderEntryListener(::onAfterRenderEntry)
}
- private fun onBeforeFinalizeFilterListener(entries: List<ListEntry>) {
+ private fun onBeforeFinalizeFilterListener(entries: List<PipelineEntry>) {
latestAlertTimeBySummary.clear()
entries.asSequence().filterIsInstance<GroupEntry>().forEach { groupEntry ->
val summary = checkNotNull(groupEntry.summary)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinator.kt
index df8e56eb4102..a987c544bb50 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/RowAppearanceCoordinator.kt
@@ -20,7 +20,7 @@ import android.content.Context
import com.android.systemui.res.R
import com.android.systemui.shade.ShadeDisplayAware
import com.android.systemui.statusbar.notification.AssistantFeedbackController
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
@@ -63,7 +63,7 @@ internal constructor(
pipeline.addOnAfterRenderEntryListener(::onAfterRenderEntry)
}
- private fun onBeforeRenderList(list: List<ListEntry>) {
+ private fun onBeforeRenderList(list: List<PipelineEntry>) {
entryToExpand =
list.firstOrNull()?.representativeEntry?.takeIf { entry ->
!mSectionStyleProvider.isMinimizedSection(entry.section!!)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinator.kt
index 90916d1c77d8..db24e7d0604d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinator.kt
@@ -32,7 +32,7 @@ import com.android.systemui.statusbar.NotificationLockscreenUserManager.REDACTIO
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.notification.DynamicPrivacyController
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
@@ -155,7 +155,7 @@ constructor(
}
}
- override fun onBeforeRenderList(entries: List<ListEntry>) {
+ override fun onBeforeRenderList(entries: List<PipelineEntry>) {
if (
isKeyguardGoingAway ||
statusBarStateController.state == StatusBarState.KEYGUARD &&
@@ -220,13 +220,15 @@ constructor(
}
}
-private fun extractAllRepresentativeEntries(entries: List<ListEntry>): Sequence<NotificationEntry> =
+private fun extractAllRepresentativeEntries(entries: List<PipelineEntry>): Sequence<NotificationEntry> =
entries.asSequence().flatMap(::extractAllRepresentativeEntries)
-private fun extractAllRepresentativeEntries(listEntry: ListEntry): Sequence<NotificationEntry> =
+private fun extractAllRepresentativeEntries(
+ pipelineEntry: PipelineEntry,
+): Sequence<NotificationEntry> =
sequence {
- listEntry.representativeEntry?.let { yield(it) }
- if (listEntry is GroupEntry) {
- yieldAll(extractAllRepresentativeEntries(listEntry.children))
+ pipelineEntry.representativeEntry?.let { yield(it) }
+ if (pipelineEntry is GroupEntry) {
+ yieldAll(extractAllRepresentativeEntries(pipelineEntry.children))
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ShadeEventCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ShadeEventCoordinator.kt
index 1c66db783a34..29a8eb0c25d9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ShadeEventCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/ShadeEventCoordinator.kt
@@ -19,7 +19,7 @@ package com.android.systemui.statusbar.notification.collection.coordinator
import android.service.notification.NotificationListenerService
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
@@ -67,7 +67,7 @@ class ShadeEventCoordinator @Inject internal constructor(
mShadeEmptiedCallback = callback
}
- private fun onBeforeRenderList(entries: List<ListEntry>) {
+ private fun onBeforeRenderList(entries: List<PipelineEntry>) {
if (mEntryRemoved && entries.isEmpty()) {
mLogger.logShadeEmptied()
// TODO(b/206023518): This was bad. Do not copy this.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/StackCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/StackCoordinator.kt
index 1cb2366a16fe..53a73f4ced63 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/StackCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/StackCoordinator.kt
@@ -19,7 +19,7 @@ package com.android.systemui.statusbar.notification.collection.coordinator
import com.android.app.tracing.traceSection
import com.android.server.notification.Flags.screenshareNotificationHiding
import com.android.systemui.Flags.screenshareNotificationHidingBugFix
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotifPipeline
import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope
import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManagerImpl
@@ -50,14 +50,14 @@ internal constructor(
groupExpansionManagerImpl.attach(pipeline)
}
- private fun onAfterRenderList(entries: List<ListEntry>) =
+ private fun onAfterRenderList(entries: List<PipelineEntry>) =
traceSection("StackCoordinator.onAfterRenderList") {
val notifStats = calculateNotifStats(entries)
activeNotificationsInteractor.setNotifStats(notifStats)
renderListInteractor.setRenderedList(entries)
}
- private fun calculateNotifStats(entries: List<ListEntry>): NotifStats {
+ private fun calculateNotifStats(entries: List<PipelineEntry>): NotifStats {
var hasNonClearableAlertingNotifs = false
var hasClearableAlertingNotifs = false
var hasNonClearableSilentNotifs = false
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java
index 49d5029bbc70..3e5655a9e925 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java
@@ -39,7 +39,7 @@ import com.android.systemui.shade.domain.interactor.ShadeAnimationInteractor;
import com.android.systemui.shade.domain.interactor.ShadeInteractor;
import com.android.systemui.statusbar.notification.VisibilityLocationProvider;
import com.android.systemui.statusbar.notification.collection.GroupEntry;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.listbuilder.OnBeforeRenderListListener;
@@ -253,21 +253,20 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable {
return false;
}
- final GroupEntry parent = entry.getParent();
+ final PipelineEntry parent = entry.getParent();
if (parent == null) {
return false;
}
-
return isHeadsUpGroup(parent);
}
- private boolean isHeadsUpGroup(GroupEntry groupEntry) {
- if (StabilizeHeadsUpGroup.isUnexpectedlyInLegacyMode()) {
+ private boolean isHeadsUpGroup(PipelineEntry pipelineEntry) {
+ if (!(pipelineEntry instanceof GroupEntry groupEntry)) {
return false;
}
- if (groupEntry == null) {
+ if (StabilizeHeadsUpGroup.isUnexpectedlyInLegacyMode()) {
return false;
}
@@ -370,7 +369,7 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable {
}
@Override
- public boolean isEntryReorderingAllowed(@NonNull ListEntry entry) {
+ public boolean isEntryReorderingAllowed(@NonNull PipelineEntry entry) {
if (StabilizeHeadsUpGroup.isEnabled()) {
if (isEveryChangeAllowed()) {
return true;
@@ -403,7 +402,7 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable {
private final OnBeforeRenderListListener mOnBeforeRenderListListener =
new OnBeforeRenderListListener() {
@Override
- public void onBeforeRenderList(List<ListEntry> entries) {
+ public void onBeforeRenderList(List<PipelineEntry> entries) {
if (StabilizeHeadsUpGroup.isUnexpectedlyInLegacyMode()) {
return;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProvider.kt
index 465bc288cbc1..adcc3ec02f0c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProvider.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/NotifUiAdjustmentProvider.kt
@@ -124,7 +124,7 @@ constructor(
val parent = entry.parent ?: error("Entry must have a parent to determine if minimized")
val isMinimizedSection = sectionStyleProvider.isMinimizedSection(section)
val isTopLevelEntry = parent == GroupEntry.ROOT_ENTRY
- val isGroupSummary = parent.summary == entry
+ val isGroupSummary = (parent as? GroupEntry)?.summary == entry
return isMinimizedSection && (isTopLevelEntry || isGroupSummary)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnAfterRenderListListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnAfterRenderListListener.java
index ac450c03b850..e3ab81c84bfc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnAfterRenderListListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnAfterRenderListListener.java
@@ -18,7 +18,7 @@ package com.android.systemui.statusbar.notification.collection.listbuilder;
import androidx.annotation.NonNull;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import java.util.List;
@@ -31,5 +31,5 @@ public interface OnAfterRenderListListener {
* @param entries The current list of top-level entries. Note that this is a live view into the
* current list and will change whenever the pipeline is rerun.
*/
- void onAfterRenderList(@NonNull List<ListEntry> entries);
+ void onAfterRenderList(@NonNull List<PipelineEntry> entries);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeFinalizeFilterListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeFinalizeFilterListener.java
index 086661ea219b..3c4f4225388c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeFinalizeFilterListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeFinalizeFilterListener.java
@@ -16,7 +16,7 @@
package com.android.systemui.statusbar.notification.collection.listbuilder;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import java.util.List;
@@ -30,5 +30,5 @@ public interface OnBeforeFinalizeFilterListener {
* @param entries The current list of top-level entries. Note that this is a live view into the
* current list and will change whenever the pipeline is rerun.
*/
- void onBeforeFinalizeFilter(List<ListEntry> entries);
+ void onBeforeFinalizeFilter(List<PipelineEntry> entries);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeRenderListListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeRenderListListener.java
index 44a27a4b546a..6ceb7d5653f0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeRenderListListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeRenderListListener.java
@@ -16,7 +16,7 @@
package com.android.systemui.statusbar.notification.collection.listbuilder;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import java.util.List;
@@ -30,5 +30,5 @@ public interface OnBeforeRenderListListener {
* @param entries The current list of top-level entries. Note that this is a live view into the
* current list and will change whenever the pipeline is rerun.
*/
- void onBeforeRenderList(List<ListEntry> entries);
+ void onBeforeRenderList(List<PipelineEntry> entries);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeSortListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeSortListener.java
index 56cfe5cb3716..858cec1e80b5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeSortListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeSortListener.java
@@ -16,7 +16,7 @@
package com.android.systemui.statusbar.notification.collection.listbuilder;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import java.util.List;
@@ -30,5 +30,5 @@ public interface OnBeforeSortListener {
* @param entries The current list of top-level entries. Note that this is a live view into the
* current list and will change whenever the pipeline is rerun.
*/
- void onBeforeSort(List<ListEntry> entries);
+ void onBeforeSort(List<PipelineEntry> entries);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeTransformGroupsListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeTransformGroupsListener.java
index 0dc4df0da066..eb525c7c4505 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeTransformGroupsListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/OnBeforeTransformGroupsListener.java
@@ -16,7 +16,7 @@
package com.android.systemui.statusbar.notification.collection.listbuilder;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter;
@@ -35,5 +35,5 @@ public interface OnBeforeTransformGroupsListener {
* a live view into the current notif list and will change as the list moves through
* the pipeline.
*/
- void onBeforeTransformGroups(List<ListEntry> list);
+ void onBeforeTransformGroups(List<PipelineEntry> list);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderHelper.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderHelper.kt
index d8f75f61c05a..0d8a64abd13d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderHelper.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderHelper.kt
@@ -16,10 +16,10 @@
package com.android.systemui.statusbar.notification.collection.listbuilder
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
object ShadeListBuilderHelper {
- fun getSectionSubLists(entries: List<ListEntry>): Iterable<List<ListEntry>> =
+ fun getSectionSubLists(entries: List<PipelineEntry>): Iterable<List<PipelineEntry>> =
getContiguousSubLists(entries, minLength = 1) { it.sectionIndex }
inline fun <T : Any, K : Any> getContiguousSubLists(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderLogger.kt
index a8409d0c6fa0..8a9548f0b9d5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/ShadeListBuilderLogger.kt
@@ -23,7 +23,7 @@ import com.android.systemui.log.core.LogLevel.INFO
import com.android.systemui.log.core.LogLevel.WARNING
import com.android.systemui.statusbar.notification.NotifPipelineFlags
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.listbuilder.PipelineState.StateName
import com.android.systemui.statusbar.notification.collection.listbuilder.PipelineState.getStateName
@@ -152,9 +152,9 @@ class ShadeListBuilderLogger @Inject constructor(
fun logEntryAttachStateChanged(
buildId: Int,
- entry: ListEntry,
- prevParent: GroupEntry?,
- newParent: GroupEntry?
+ entry: PipelineEntry,
+ prevParent: PipelineEntry?,
+ newParent: PipelineEntry?
) {
buffer.log(TAG, INFO, {
long1 = buildId.toLong()
@@ -177,7 +177,7 @@ class ShadeListBuilderLogger @Inject constructor(
})
}
- fun logParentChanged(buildId: Int, prevParent: GroupEntry?, newParent: GroupEntry?) {
+ fun logParentChanged(buildId: Int, prevParent: PipelineEntry?, newParent: PipelineEntry?) {
buffer.log(TAG, INFO, {
long1 = buildId.toLong()
str1 = prevParent?.logKey
@@ -195,8 +195,8 @@ class ShadeListBuilderLogger @Inject constructor(
fun logParentChangeSuppressedStarted(
buildId: Int,
- suppressedParent: GroupEntry?,
- keepingParent: GroupEntry?
+ suppressedParent: PipelineEntry?,
+ keepingParent: PipelineEntry?
) {
buffer.log(TAG, INFO, {
long1 = buildId.toLong()
@@ -209,8 +209,8 @@ class ShadeListBuilderLogger @Inject constructor(
fun logParentChangeSuppressedStopped(
buildId: Int,
- previouslySuppressedParent: GroupEntry?,
- previouslyKeptParent: GroupEntry?
+ previouslySuppressedParent: PipelineEntry?,
+ previouslyKeptParent: PipelineEntry?
) {
buffer.log(TAG, INFO, {
long1 = buildId.toLong()
@@ -224,7 +224,7 @@ class ShadeListBuilderLogger @Inject constructor(
fun logGroupPruningSuppressed(
buildId: Int,
- keepingParent: GroupEntry?
+ keepingParent: PipelineEntry?
) {
buffer.log(TAG, INFO, {
long1 = buildId.toLong()
@@ -310,7 +310,7 @@ class ShadeListBuilderLogger @Inject constructor(
val logRankInFinalList = Compile.IS_DEBUG && notifPipelineFlags.isDevLoggingEnabled()
- fun logFinalList(entries: List<ListEntry>) {
+ fun logFinalList(entries: List<PipelineEntry>) {
if (entries.isEmpty()) {
buffer.log(TAG, DEBUG, {}, { "(empty list)" })
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifComparator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifComparator.java
index f7bbd281ec51..f7c74c217cdf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifComparator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifComparator.java
@@ -18,7 +18,7 @@ package com.android.systemui.statusbar.notification.collection.listbuilder.plugg
import androidx.annotation.NonNull;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import java.util.Comparator;
@@ -29,7 +29,7 @@ import java.util.List;
*/
public abstract class NotifComparator
extends Pluggable<NotifComparator>
- implements Comparator<ListEntry> {
+ implements Comparator<PipelineEntry> {
protected NotifComparator(String name) {
super(name);
@@ -41,5 +41,5 @@ public abstract class NotifComparator
* @return a negative integer, zero, or a positive integer as the first argument is less than
* equal to, or greater than the second (same as standard Comparator<> interface).
*/
- public abstract int compare(@NonNull ListEntry o1, @NonNull ListEntry o2);
+ public abstract int compare(@NonNull PipelineEntry o1, @NonNull PipelineEntry o2);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifSectioner.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifSectioner.java
index 8c52c53ea6b2..4a856a55f185 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifSectioner.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifSectioner.java
@@ -18,7 +18,7 @@ package com.android.systemui.statusbar.notification.collection.listbuilder.plugg
import android.annotation.Nullable;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.ShadeListBuilder;
import com.android.systemui.statusbar.notification.collection.render.NodeController;
import com.android.systemui.statusbar.notification.collection.render.NodeSpec;
@@ -52,11 +52,11 @@ public abstract class NotifSectioner extends Pluggable<NotifSectioner> {
* However, this doesn't necessarily mean that your section will get called on each top-level
* notification. The first section to return true determines the section of the notification.
*/
- public abstract boolean isInSection(ListEntry entry);
+ public abstract boolean isInSection(PipelineEntry entry);
/**
* Returns an optional {@link NotifComparator} to sort entries only in this section.
- * {@link ListEntry} instances passed to this comparator are guaranteed to have this section,
+ * {@link PipelineEntry} instances passed to this comparator are guaranteed to have this section,
* and this ordering will take precedence over any global comparators supplied to {@link
* com.android.systemui.statusbar.notification.collection.NotifPipeline#setComparators(List)}.
*
@@ -80,5 +80,5 @@ public abstract class NotifSectioner extends Pluggable<NotifSectioner> {
* Notify of children of this section being updated
* @param entries of this section that are borrowed (must clone to store)
*/
- public void onEntriesUpdated(List<ListEntry> entries) {}
+ public void onEntriesUpdated(List<PipelineEntry> entries) {}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifStabilityManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifStabilityManager.kt
index 58bbca822164..e1e2bcff3e31 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifStabilityManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifStabilityManager.kt
@@ -16,7 +16,7 @@
package com.android.systemui.statusbar.notification.collection.listbuilder.pluggable
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
/**
@@ -75,7 +75,7 @@ abstract class NotifStabilityManager protected constructor(name: String) :
* being suppressed. However, if an order change is suppressed, that will be reported to ths
* implementation by calling [onEntryReorderSuppressed] after ordering is complete.
*/
- abstract fun isEntryReorderingAllowed(entry: ListEntry): Boolean
+ abstract fun isEntryReorderingAllowed(entry: PipelineEntry): Boolean
/**
* Called by the pipeline to determine if every call to the other stability methods would
@@ -100,7 +100,7 @@ object DefaultNotifStabilityManager : NotifStabilityManager("DefaultNotifStabili
override fun isGroupChangeAllowed(entry: NotificationEntry): Boolean = true
override fun isGroupPruneAllowed(entry: GroupEntry): Boolean = true
override fun isSectionChangeAllowed(entry: NotificationEntry): Boolean = true
- override fun isEntryReorderingAllowed(entry: ListEntry): Boolean = true
+ override fun isEntryReorderingAllowed(entry: PipelineEntry): Boolean = true
override fun isEveryChangeAllowed(): Boolean = true
override fun onEntryReorderSuppressed() {}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt
index 014ac549591e..ae2c70a284e9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt
@@ -27,6 +27,7 @@ import com.android.systemui.log.core.LogLevel.ERROR
import com.android.systemui.log.core.LogLevel.INFO
import com.android.systemui.log.core.LogLevel.WARNING
import com.android.systemui.log.core.LogLevel.WTF
+import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.collection.NotifCollection
import com.android.systemui.statusbar.notification.collection.NotifCollection.CancellationReason
import com.android.systemui.statusbar.notification.collection.NotifCollection.FutureDismissal
@@ -421,6 +422,14 @@ class NotifCollectionLogger @Inject constructor(
})
}
+ private fun getParentLogKey(childEntry: NotificationEntry): String {
+ return if (childEntry.parent is GroupEntry) {
+ (childEntry.parent as? GroupEntry)?.summary?.logKey ?: "(null)"
+ } else {
+ "(null)"
+ }
+ }
+
fun logDismissAlreadyParentDismissedNotif(
childEntry: NotificationEntry,
childIndex: Int,
@@ -430,7 +439,7 @@ class NotifCollectionLogger @Inject constructor(
str1 = childEntry.logKey
int1 = childIndex
int2 = childCount
- str2 = childEntry.parent?.summary?.logKey ?: "(null)"
+ str2 = getParentLogKey(childEntry)
}, {
"DISMISS Already Parent-Dismissed $str1 ($int1/$int2) with summary $str2"
})
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/HighPriorityProvider.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/HighPriorityProvider.java
index 2e3ab926ad57..051bd3a99549 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/HighPriorityProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/HighPriorityProvider.java
@@ -23,7 +23,7 @@ import android.app.NotificationManager;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.statusbar.notification.collection.GroupEntry;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager;
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier;
@@ -53,7 +53,7 @@ public class HighPriorityProvider {
}
/**
- * @return true if the ListEntry is high priority, else false
+ * @return true if the PipelineEntry is high priority, else false
*
* A NotificationEntry is considered high priority if it:
* - has importance greater than or equal to IMPORTANCE_DEFAULT
@@ -67,12 +67,12 @@ public class HighPriorityProvider {
* A GroupEntry is considered high priority if its representativeEntry (summary) or any of its
* children are high priority.
*/
- public boolean isHighPriority(@Nullable ListEntry entry) {
+ public boolean isHighPriority(@Nullable PipelineEntry entry) {
return isHighPriority(entry, /* allowImplicit = */ true);
}
/**
- * @return true if the ListEntry is explicitly high priority, else false
+ * @return true if the PipelineEntry is explicitly high priority, else false
*
* A NotificationEntry is considered explicitly high priority if has importance greater than or
* equal to IMPORTANCE_DEFAULT.
@@ -80,11 +80,11 @@ public class HighPriorityProvider {
* A GroupEntry is considered explicitly high priority if its representativeEntry (summary) or
* any of its children are explicitly high priority.
*/
- public boolean isExplicitlyHighPriority(@Nullable ListEntry entry) {
+ public boolean isExplicitlyHighPriority(@Nullable PipelineEntry entry) {
return isHighPriority(entry, /* allowImplicit= */ false);
}
- private boolean isHighPriority(@Nullable ListEntry entry, boolean allowImplicit) {
+ private boolean isHighPriority(@Nullable PipelineEntry entry, boolean allowImplicit) {
if (entry == null) {
return false;
}
@@ -100,9 +100,9 @@ public class HighPriorityProvider {
}
/**
- * @return true if the ListEntry is high priority conversation, else false
+ * @return true if the PipelineEntry is high priority conversation, else false
*/
- public boolean isHighPriorityConversation(@NonNull ListEntry entry) {
+ public boolean isHighPriorityConversation(@NonNull PipelineEntry entry) {
final NotificationEntry notifEntry = entry.getRepresentativeEntry();
if (notifEntry == null) {
return false;
@@ -119,7 +119,7 @@ public class HighPriorityProvider {
return isNotificationEntryWithAtLeastOneImportantChild(entry);
}
- private boolean isNotificationEntryWithAtLeastOneImportantChild(@NonNull ListEntry entry) {
+ private boolean isNotificationEntryWithAtLeastOneImportantChild(@NonNull PipelineEntry entry) {
if (!(entry instanceof GroupEntry)) {
return false;
}
@@ -134,7 +134,7 @@ public class HighPriorityProvider {
* Returns whether the given ListEntry has a high priority child or is in a group with a child
* that's high priority
*/
- private boolean hasHighPriorityChild(ListEntry entry, boolean allowImplicit) {
+ private boolean hasHighPriorityChild(PipelineEntry entry, boolean allowImplicit) {
if (NotificationBundleUi.isEnabled()) {
GroupEntry representativeGroupEntry = null;
if (entry instanceof GroupEntry) {
@@ -142,9 +142,10 @@ public class HighPriorityProvider {
} else if (entry instanceof NotificationEntry){
final NotificationEntry notificationEntry = entry.getRepresentativeEntry();
if (notificationEntry.getParent() != null
- && notificationEntry.getParent().getSummary() != null
- && notificationEntry.getParent().getSummary() == notificationEntry) {
- representativeGroupEntry = notificationEntry.getParent();
+ && notificationEntry.getParent() instanceof GroupEntry parent
+ && parent.getSummary() != null
+ && parent.getSummary() == notificationEntry) {
+ representativeGroupEntry = parent;
}
}
return representativeGroupEntry != null &&
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionStyleProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionStyleProvider.kt
index ea9f29521459..f418bb639f49 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionStyleProvider.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/provider/SectionStyleProvider.kt
@@ -17,7 +17,7 @@
package com.android.systemui.statusbar.notification.collection.provider
import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.SortBySectionTimeFlag
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifSectioner
@@ -53,7 +53,7 @@ class SectionStyleProvider @Inject constructor(
* Determine if the given entry is minimized.
*/
@JvmOverloads
- fun isMinimized(entry: ListEntry, ifNotInSection: Boolean = true): Boolean {
+ fun isMinimized(entry: PipelineEntry, ifNotInSection: Boolean = true): Boolean {
val section = entry.section ?: return ifNotInSection
return isMinimizedSection(section)
}
@@ -77,7 +77,7 @@ class SectionStyleProvider @Inject constructor(
* Determine if the given entry is silent.
*/
@JvmOverloads
- fun isSilent(entry: ListEntry, ifNotInSection: Boolean = true): Boolean {
+ fun isSilent(entry: PipelineEntry, ifNotInSection: Boolean = true): Boolean {
val section = entry.section ?: return ifNotInSection
if (SortBySectionTimeFlag.isEnabled) {
if (entry.section?.bucket == BUCKET_PEOPLE) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java
index 16b98e20498a..b179a694dad7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupExpansionManagerImpl.java
@@ -25,7 +25,7 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.statusbar.notification.collection.EntryAdapter;
import com.android.systemui.statusbar.notification.collection.GroupEntry;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.listbuilder.OnBeforeRenderListListener;
@@ -81,7 +81,7 @@ public class GroupExpansionManagerImpl implements GroupExpansionManager, Dumpabl
}
final Set<NotificationEntry> renderingSummaries = new HashSet<>();
- for (ListEntry entry : entries) {
+ for (PipelineEntry entry : entries) {
if (entry instanceof GroupEntry) {
renderingSummaries.add(entry.getRepresentativeEntry());
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupMembershipManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupMembershipManager.java
index 69267e5d9e55..3edbfafd7d33 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupMembershipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupMembershipManager.java
@@ -22,6 +22,7 @@ import android.annotation.Nullable;
import com.android.systemui.statusbar.notification.collection.EntryAdapter;
import com.android.systemui.statusbar.notification.collection.ListEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import java.util.List;
@@ -78,5 +79,5 @@ public interface GroupMembershipManager {
* @return list of the children
*/
@Nullable
- List<NotificationEntry> getChildren(@NonNull ListEntry summary);
+ List<NotificationEntry> getChildren(@NonNull PipelineEntry summary);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupMembershipManagerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupMembershipManagerImpl.java
index 80a9f8adf8f3..a1a23e3a0b44 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupMembershipManagerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/GroupMembershipManagerImpl.java
@@ -24,7 +24,7 @@ import androidx.annotation.Nullable;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.statusbar.notification.collection.EntryAdapter;
import com.android.systemui.statusbar.notification.collection.GroupEntry;
-import com.android.systemui.statusbar.notification.collection.ListEntry;
+import com.android.systemui.statusbar.notification.collection.PipelineEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.shared.NotificationBundleUi;
@@ -48,8 +48,13 @@ public class GroupMembershipManagerImpl implements GroupMembershipManager {
// The entry is not attached, so it doesn't count.
return false;
}
+ PipelineEntry pipelineEntry = entry.getParent();
+ if (!(pipelineEntry instanceof GroupEntry groupEntry)) {
+ return false;
+ }
+
// If entry is a summary, its parent is a GroupEntry with summary = entry.
- return entry.getParent().getSummary() == entry;
+ return groupEntry.getSummary() == entry;
}
@Override
@@ -65,7 +70,10 @@ public class GroupMembershipManagerImpl implements GroupMembershipManager {
if (isTopLevelEntry(entry) || entry.getParent() == null) {
return null;
}
- return entry.getParent().getSummary();
+ if (entry.getParent() instanceof GroupEntry parent) {
+ return parent.getSummary();
+ }
+ return null;
}
@Nullable
@@ -91,8 +99,9 @@ public class GroupMembershipManagerImpl implements GroupMembershipManager {
@Nullable
@Override
- public List<NotificationEntry> getChildren(@NonNull ListEntry entry) {
+ public List<NotificationEntry> getChildren(@NonNull PipelineEntry entry) {
NotificationBundleUi.assertInLegacyMode();
+
if (entry instanceof GroupEntry) {
return ((GroupEntry) entry).getChildren();
}
@@ -100,8 +109,7 @@ public class GroupMembershipManagerImpl implements GroupMembershipManager {
NotificationEntry representativeEntry = entry.getRepresentativeEntry();
if (representativeEntry != null && isGroupSummary(representativeEntry)) {
// maybe we were actually passed the summary
- GroupEntry parent = representativeEntry.getParent();
- if (parent != null) {
+ if (representativeEntry.getParent() instanceof GroupEntry parent) {
return parent.getChildren();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt
index 9fc4e4036b31..e17319484cce 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt
@@ -18,12 +18,12 @@ package com.android.systemui.statusbar.notification.collection.render
import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.listbuilder.NotifSection
import com.android.systemui.statusbar.notification.collection.provider.SectionHeaderVisibilityProvider
import com.android.systemui.util.Compile
import com.android.app.tracing.traceSection
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
/**
* Converts a notif list (the output of the ShadeListBuilder) into a NodeSpec, an abstract
@@ -45,7 +45,7 @@ class NodeSpecBuilder(
fun buildNodeSpec(
rootController: NodeController,
- notifList: List<ListEntry>
+ notifList: List<PipelineEntry>
): NodeSpec = traceSection("NodeSpecBuilder.buildNodeSpec") {
val root = NodeSpecImpl(null, rootController)
@@ -100,7 +100,7 @@ class NodeSpecBuilder(
return@traceSection root
}
- private fun buildNotifNode(parent: NodeSpec, entry: ListEntry): NodeSpec = when (entry) {
+ private fun buildNotifNode(parent: NodeSpec, entry: PipelineEntry): NodeSpec = when (entry) {
is NotificationEntry -> NodeSpecImpl(parent, viewBarn.requireNodeController(entry))
is GroupEntry ->
NodeSpecImpl(parent, viewBarn.requireNodeController(checkNotNull(entry.summary)))
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewBarn.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewBarn.kt
index fd91d5a2c082..56662f105e4a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewBarn.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewBarn.kt
@@ -18,18 +18,18 @@ package com.android.systemui.statusbar.notification.collection.render
import android.view.textclassifier.Log
import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import javax.inject.Inject
/**
- * The ViewBarn is just a map from [ListEntry] to an instance of a [NodeController].
+ * The ViewBarn is just a map from [PipelineEntry] to an instance of a [NodeController].
*/
@SysUISingleton
class NotifViewBarn @Inject constructor() {
private val rowMap = mutableMapOf<String, NotifViewController>()
- fun requireNodeController(entry: ListEntry): NodeController {
+ fun requireNodeController(entry: PipelineEntry): NodeController {
if (DEBUG) {
Log.d(TAG, "requireNodeController: ${entry.key}")
}
@@ -50,14 +50,14 @@ class NotifViewBarn @Inject constructor() {
return rowMap[entry.key] ?: error("No view has been registered for entry: ${entry.key}")
}
- fun registerViewForEntry(entry: ListEntry, controller: NotifViewController) {
+ fun registerViewForEntry(entry: PipelineEntry, controller: NotifViewController) {
if (DEBUG) {
Log.d(TAG, "registerViewForEntry: ${entry.key}")
}
rowMap[entry.key] = controller
}
- fun removeViewForEntry(entry: ListEntry) {
+ fun removeViewForEntry(entry: PipelineEntry) {
if (DEBUG) {
Log.d(TAG, "removeViewForEntry: ${entry.key}")
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewRenderer.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewRenderer.kt
index 8284022c7270..396d47e7096c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewRenderer.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NotifViewRenderer.kt
@@ -17,7 +17,7 @@
package com.android.systemui.statusbar.notification.collection.render
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
/**
@@ -34,7 +34,7 @@ interface NotifViewRenderer {
* also ensure that future calls to [getStackController], [getGroupController], and
* [getRowController] will provide valid results.
*/
- fun onRenderList(notifList: List<ListEntry>)
+ fun onRenderList(notifList: List<PipelineEntry>)
/**
* Provides an interface for the pipeline to update individual groups. This will be called at
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt
index 21e68376031c..93e844de79d9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/RenderStageManager.kt
@@ -19,7 +19,7 @@ package com.android.systemui.statusbar.notification.collection.render
import com.android.app.tracing.traceSection
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.PipelineDumpable
import com.android.systemui.statusbar.notification.collection.PipelineDumper
@@ -46,7 +46,7 @@ class RenderStageManager @Inject constructor() : PipelineDumpable {
listBuilder.setOnRenderListListener(::onRenderList)
}
- private fun onRenderList(notifList: List<ListEntry>) {
+ private fun onRenderList(notifList: List<PipelineEntry>) {
traceSection("RenderStageManager.onRenderList") {
val viewRenderer = viewRenderer ?: return
viewRenderer.onRenderList(notifList)
@@ -85,7 +85,7 @@ class RenderStageManager @Inject constructor() : PipelineDumpable {
dump("onAfterRenderEntryListeners", onAfterRenderEntryListeners)
}
- private fun dispatchOnAfterRenderList(entries: List<ListEntry>) {
+ private fun dispatchOnAfterRenderList(entries: List<PipelineEntry>) {
traceSection("RenderStageManager.dispatchOnAfterRenderList") {
onAfterRenderListListeners.forEach { listener -> listener.onAfterRenderList(entries) }
}
@@ -93,7 +93,7 @@ class RenderStageManager @Inject constructor() : PipelineDumpable {
private fun dispatchOnAfterRenderGroups(
viewRenderer: NotifViewRenderer,
- entries: List<ListEntry>,
+ entries: List<PipelineEntry>,
) {
traceSection("RenderStageManager.dispatchOnAfterRenderGroups") {
if (onAfterRenderGroupListeners.isEmpty()) {
@@ -110,7 +110,7 @@ class RenderStageManager @Inject constructor() : PipelineDumpable {
private fun dispatchOnAfterRenderEntries(
viewRenderer: NotifViewRenderer,
- entries: List<ListEntry>,
+ entries: List<PipelineEntry>,
) {
traceSection("RenderStageManager.dispatchOnAfterRenderEntries") {
if (onAfterRenderEntryListeners.isEmpty()) {
@@ -129,7 +129,7 @@ class RenderStageManager @Inject constructor() : PipelineDumpable {
* Performs a forward, depth-first traversal of the list where the group's summary immediately
* precedes the group's children.
*/
- private inline fun List<ListEntry>.forEachNotificationEntry(
+ private inline fun List<PipelineEntry>.forEachNotificationEntry(
action: (NotificationEntry) -> Unit
) {
forEach { entry ->
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt
index 72316bf14c9a..9532d6d89cf7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/ShadeViewManager.kt
@@ -22,7 +22,7 @@ import com.android.app.tracing.traceSection
import com.android.systemui.shade.ShadeDisplayAware
import com.android.systemui.statusbar.notification.NotificationSectionsFeatureManager
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.PipelineDumpable
import com.android.systemui.statusbar.notification.collection.PipelineDumper
@@ -76,7 +76,7 @@ constructor(
private val viewRenderer =
object : NotifViewRenderer {
- override fun onRenderList(notifList: List<ListEntry>) {
+ override fun onRenderList(notifList: List<PipelineEntry>) {
traceSection("ShadeViewManager.onRenderList") {
viewDiffer.applySpec(specBuilder.buildNodeSpec(rootController, notifList))
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/domain/interactor/RenderNotificationListInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/domain/interactor/RenderNotificationListInteractor.kt
index bde3c4d8c632..adc049e7cdf1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/domain/interactor/RenderNotificationListInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/domain/interactor/RenderNotificationListInteractor.kt
@@ -29,7 +29,7 @@ import com.android.app.tracing.traceSection
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.statusbar.StatusBarIconView
import com.android.systemui.statusbar.notification.collection.GroupEntry
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider
import com.android.systemui.statusbar.notification.data.repository.ActiveNotificationListRepository
@@ -57,11 +57,11 @@ constructor(
/**
* Sets the current list of rendered notification entries as displayed in the notification list.
*/
- fun setRenderedList(entries: List<ListEntry>) {
+ fun setRenderedList(entries: List<PipelineEntry>) {
traceSection("RenderNotificationListInteractor.setRenderedList") {
repository.activeNotifications.update { existingModels ->
buildActiveNotificationsStore(existingModels, sectionStyleProvider, context) {
- entries.forEach(::addListEntry)
+ entries.forEach(::addPipelineEntry)
setRankingsMap(entries)
}
}
@@ -89,11 +89,11 @@ private class ActiveNotificationsStoreBuilder(
fun build(): ActiveNotificationsStore = builder.build()
/**
- * Convert a [ListEntry] into [ActiveNotificationEntryModel]s, and add them to the
+ * Convert a [PipelineEntry] into [ActiveNotificationEntryModel]s, and add them to the
* [ActiveNotificationsStore]. Special care is taken to avoid re-allocating models if the result
* would be identical to an existing model (at the expense of additional computations).
*/
- fun addListEntry(entry: ListEntry) {
+ fun addPipelineEntry(entry: PipelineEntry) {
when (entry) {
is GroupEntry -> {
entry.summary?.let { summary ->
@@ -116,11 +116,11 @@ private class ActiveNotificationsStoreBuilder(
}
}
- fun setRankingsMap(entries: List<ListEntry>) {
+ fun setRankingsMap(entries: List<PipelineEntry>) {
builder.setRankingsMap(flatMapToRankingsMap(entries))
}
- fun flatMapToRankingsMap(entries: List<ListEntry>): Map<String, Int> {
+ fun flatMapToRankingsMap(entries: List<PipelineEntry>): Map<String, Int> {
val result = ArrayMap<String, Int>()
for (entry in entries) {
if (entry is NotificationEntry) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/ConnectedDisplaysStatusBarNotificationIconViewStore.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/ConnectedDisplaysStatusBarNotificationIconViewStore.kt
index eb55856d994b..5760b5f79c74 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/ConnectedDisplaysStatusBarNotificationIconViewStore.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/icon/ui/viewbinder/ConnectedDisplaysStatusBarNotificationIconViewStore.kt
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.notification.icon.ui.viewbinder
+import android.util.Log
import com.android.systemui.display.domain.interactor.DisplayWindowPropertiesInteractor
import com.android.systemui.lifecycle.Activatable
import com.android.systemui.statusbar.StatusBarIconView
@@ -61,9 +62,16 @@ constructor(
}
override fun iconView(key: String): StatusBarIconView? {
- val entry = notifCollection.getEntry(key) ?: return null
- val displayWindowProperties =
- displayWindowPropertiesInteractor.getForStatusBar(displayId) ?: return null
+ val entry = notifCollection.getEntry(key)
+ if (entry == null) {
+ Log.w(TAG, "No notification entry found for key: $key")
+ return null
+ }
+ val displayWindowProperties = displayWindowPropertiesInteractor.getForStatusBar(displayId)
+ if (displayWindowProperties == null) {
+ Log.w(TAG, "No display properties found for display id: $displayId")
+ return null
+ }
return cachedIcons.computeIfAbsent(key) {
val context = displayWindowProperties.context
iconManager.createSbIconView(context, entry)
@@ -93,4 +101,8 @@ constructor(
interface Factory {
fun create(displayId: Int): ConnectedDisplaysStatusBarNotificationIconViewStore
}
+
+ companion object {
+ private const val TAG = "ConnectedDisplaysNotifIconViewStore"
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/KeyguardNotificationVisibilityProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/KeyguardNotificationVisibilityProvider.kt
index c7548aae7131..5096894911c8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/KeyguardNotificationVisibilityProvider.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/interruption/KeyguardNotificationVisibilityProvider.kt
@@ -19,7 +19,7 @@ import com.android.systemui.settings.UserTracker
import com.android.systemui.statusbar.NotificationLockscreenUserManager
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController
-import com.android.systemui.statusbar.notification.collection.ListEntry
+import com.android.systemui.statusbar.notification.collection.PipelineEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.provider.HighPriorityProvider
import com.android.systemui.statusbar.policy.KeyguardStateController
@@ -198,7 +198,7 @@ constructor(
else -> false
}
- private fun shouldHideIfEntrySilent(entry: ListEntry): Boolean =
+ private fun shouldHideIfEntrySilent(entry: PipelineEntry): Boolean =
when {
// Show if explicitly high priority (not hidden)
highPriorityProvider.isExplicitlyHighPriority(entry) -> false
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleNotificationIdentifier.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleNotificationIdentifier.kt
index f755dbb48e1d..002230e4e516 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleNotificationIdentifier.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/people/PeopleNotificationIdentifier.kt
@@ -20,6 +20,7 @@ import android.annotation.IntDef
import android.service.notification.NotificationListenerService.Ranking
import android.service.notification.StatusBarNotification
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager
import com.android.systemui.statusbar.notification.people.PeopleNotificationIdentifier.Companion.PeopleNotificationType
@@ -117,8 +118,8 @@ class PeopleNotificationIdentifierImpl @Inject constructor(
if (!entry.sbn.notification.isGroupSummary) {
return TYPE_NON_PERSON;
}
-
- return getPeopleTypeForChildList(entry.parent?.children)
+ val parent = entry.parent as? GroupEntry ?: return TYPE_NON_PERSON
+ return getPeopleTypeForChildList(parent.children)
} else {
if (!groupManager.isGroupSummary(entry)) {
return TYPE_NON_PERSON
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
index b0773276a3e9..4ed9dcee072e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java
@@ -16,8 +16,10 @@
package com.android.systemui.statusbar.notification.row;
+import static com.android.systemui.Flags.notificationAppearNonlinear;
import static com.android.systemui.Flags.notificationBackgroundTintOptimization;
import static com.android.systemui.Flags.notificationRowTransparency;
+import static com.android.systemui.Flags.physicalNotificationMovement;
import static com.android.systemui.statusbar.notification.row.ExpandableView.ClipSide.BOTTOM;
import static com.android.systemui.statusbar.notification.row.ExpandableView.ClipSide.TOP;
@@ -71,7 +73,8 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
* #ALPHA_APPEAR_START_FRACTION.
*/
- private static final float ALPHA_APPEAR_START_FRACTION = .7f;
+ private static final float ALPHA_APPEAR_START_FRACTION =
+ notificationAppearNonlinear() ? .55f : .7f;
/**
* The content should show fully with progress at #ALPHA_APPEAR_END_FRACTION
* The start of the animation is at #ALPHA_APPEAR_START_FRACTION
@@ -111,6 +114,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
private float mOverrideAmount;
private boolean mShadowHidden;
private boolean mIsHeadsUpAnimation;
+ private boolean mIsHeadsUpCycling;
/* In order to track headsup longpress coorindate. */
protected Point mTargetPoint;
private boolean mDismissed;
@@ -349,10 +353,12 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
@Override
public long performRemoveAnimation(long duration, long delay, float translationDirection,
- boolean isHeadsUpAnimation, Runnable onStartedRunnable, Runnable onFinishedRunnable,
- AnimatorListenerAdapter animationListener, ClipSide clipSide) {
+ boolean isHeadsUpAnimation, boolean isHeadsUpCycling, Runnable onStartedRunnable,
+ Runnable onFinishedRunnable, AnimatorListenerAdapter animationListener,
+ ClipSide clipSide) {
enableAppearDrawing(true);
mIsHeadsUpAnimation = isHeadsUpAnimation;
+ mIsHeadsUpCycling = isHeadsUpCycling;
if (mDrawingAppearAnimation) {
startAppearAnimation(false /* isAppearing */, translationDirection,
delay, duration, onStartedRunnable, onFinishedRunnable, animationListener,
@@ -370,9 +376,10 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
@Override
public void performAddAnimation(long delay, long duration, boolean isHeadsUpAppear,
- Runnable onFinishRunnable) {
+ boolean isHeadsUpCycling, Runnable onFinishRunnable) {
enableAppearDrawing(true);
mIsHeadsUpAnimation = isHeadsUpAppear;
+ mIsHeadsUpCycling = isHeadsUpCycling;
if (mDrawingAppearAnimation) {
startAppearAnimation(true /* isAppearing */, isHeadsUpAppear ? 0.0f : -1.0f, delay,
duration, null, null, null, ClipSide.BOTTOM);
@@ -404,14 +411,14 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
targetValue = 0.0f;
}
- if (NotificationHeadsUpCycling.isEnabled()) {
- // TODO(b/316404716): add avalanche filtering
+ if (NotificationHeadsUpCycling.isEnabled() && !useNonLinearAnimation()) {
mCurrentAppearInterpolator = Interpolators.LINEAR;
}
mAppearAnimator = ValueAnimator.ofFloat(mAppearAnimationFraction,
targetValue);
- mAppearAnimator.setInterpolator(mCurrentAppearInterpolator);
+ mAppearAnimator.setInterpolator(
+ useNonLinearAnimation() ? Interpolators.LINEAR : mCurrentAppearInterpolator);
mAppearAnimator.setDuration(
(long) (duration * Math.abs(mAppearAnimationFraction - targetValue)));
mAppearAnimator.addUpdateListener(animation -> {
@@ -530,7 +537,13 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
* @param clipSide Which side if view we want to clip from
*/
private void updateAppearRect(ClipSide clipSide) {
- float interpolatedFraction = mAppearAnimationFraction;
+ float interpolatedFraction;
+ if (useNonLinearAnimation()) {
+ interpolatedFraction = mCurrentAppearInterpolator.getInterpolation(
+ mAppearAnimationFraction);
+ } else {
+ interpolatedFraction = mAppearAnimationFraction;
+ }
mAppearAnimationTranslation = (1.0f - interpolatedFraction) * mAnimationTranslationY;
final int fullHeight = getActualHeight();
float height = fullHeight * interpolatedFraction;
@@ -558,6 +571,11 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
}
}
+ private boolean useNonLinearAnimation() {
+ return notificationAppearNonlinear() && (!mIsHeadsUpCycling
+ || physicalNotificationMovement());
+ }
+
private void updateAppearRect() {
updateAppearRect(ClipSide.BOTTOM);
}
@@ -567,7 +585,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
mAppearAnimationFraction,
ALPHA_APPEAR_START_FRACTION,
ALPHA_APPEAR_END_FRACTION,
- Interpolators.ALPHA_IN
+ notificationAppearNonlinear() ? mCurrentAppearInterpolator : Interpolators.ALPHA_IN
);
}
@@ -813,6 +831,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
pw.print("mDrawingAppearAnimation", mDrawingAppearAnimation);
pw.print("mAppearAnimationFraction", mAppearAnimationFraction);
pw.print("mIsHeadsUpAnimation", mIsHeadsUpAnimation);
+ pw.print("mIsHeadsUpCycling", mIsHeadsUpCycling);
pw.print("mTargetPoint", mTargetPoint);
pw.println();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
index 6f7eade1c0f2..4c744086fea4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java
@@ -2182,7 +2182,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
R.dimen.notification_min_height);
}
mMaxSmallHeightWithSummarization = NotificationUtils.getFontScaledHeight(mContext,
- com.android.internal.R.dimen.notification_collapsed_height_with_summarization);
+ com.android.internal.R.dimen.notification_min_height);
mMaxExpandedHeight = NotificationUtils.getFontScaledHeight(mContext,
R.dimen.notification_max_height);
mMaxExpandedHeightForPromotedOngoing = NotificationUtils.getFontScaledHeight(mContext,
@@ -3494,20 +3494,17 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
@Override
public void performAddAnimation(long delay, long duration, boolean isHeadsUpAppear,
- Runnable onFinishRunnable) {
+ boolean isHeadsUpCycling, Runnable onFinishRunnable) {
mLogger.logStartAppearAnimation(mLoggingKey, /* isAppear = */ true);
- super.performAddAnimation(delay, duration, isHeadsUpAppear, onFinishRunnable);
+ super.performAddAnimation(delay, duration, isHeadsUpAppear, isHeadsUpCycling,
+ onFinishRunnable);
}
@Override
- public long performRemoveAnimation(
- long duration,
- long delay,
- float translationDirection,
- boolean isHeadsUpAnimation,
- Runnable onStartedRunnable,
- Runnable onFinishedRunnable,
- AnimatorListenerAdapter animationListener, ClipSide clipSide) {
+ public long performRemoveAnimation(long duration, long delay, float translationDirection,
+ boolean isHeadsUpAnimation, boolean isHeadsUpCycling, Runnable onStartedRunnable,
+ Runnable onFinishedRunnable, AnimatorListenerAdapter animationListener,
+ ClipSide clipSide) {
mLogger.logStartAppearAnimation(mLoggingKey, /* isAppear = */ false);
if (mMenuRow != null && mMenuRow.isMenuVisible()) {
Animator anim = getTranslateViewAnimator(0f, null /* listener */);
@@ -3522,9 +3519,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
@Override
public void onAnimationEnd(Animator animation) {
- ExpandableNotificationRow.super.performRemoveAnimation(
- duration, delay, translationDirection, isHeadsUpAnimation,
- null, onFinishedRunnable, animationListener, ClipSide.BOTTOM);
+ ExpandableNotificationRow.super.performRemoveAnimation(duration, delay,
+ translationDirection, isHeadsUpAnimation, isHeadsUpCycling, null,
+ onFinishedRunnable, animationListener, ClipSide.BOTTOM);
}
});
anim.start();
@@ -3532,8 +3529,8 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
}
}
return super.performRemoveAnimation(duration, delay, translationDirection,
- isHeadsUpAnimation, onStartedRunnable, onFinishedRunnable, animationListener,
- clipSide);
+ isHeadsUpAnimation, isHeadsUpCycling, onStartedRunnable, onFinishedRunnable,
+ animationListener, clipSide);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java
index da664f864f06..292f74a65554 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableView.java
@@ -467,7 +467,8 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable, Ro
* remove animation should be performed upwards,
* such that the child appears to be going away to the top. 1
* Should mean the opposite.
- * @param isHeadsUpAnimation Is this a headsUp animation.
+ * @param isHeadsUpAnimation Is this a headsUp animation
+ * @param isHeadsUpCycling Is this the cycling heads up animation
* @param onFinishedRunnable A runnable which should be run when the animation is finished.
* @param animationListener An animation listener to add to the animation.
* @return The additional delay, in milliseconds, that this view needs to add before the
@@ -475,7 +476,7 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable, Ro
*/
public abstract long performRemoveAnimation(long duration,
long delay, float translationDirection, boolean isHeadsUpAnimation,
- Runnable onStartedRunnable,
+ boolean isHeadsUpCycling, Runnable onStartedRunnable,
Runnable onFinishedRunnable,
AnimatorListenerAdapter animationListener, ClipSide clipSide);
@@ -485,11 +486,12 @@ public abstract class ExpandableView extends FrameLayout implements Dumpable, Ro
}
public void performAddAnimation(long delay, long duration, boolean isHeadsUpAppear) {
- performAddAnimation(delay, duration, isHeadsUpAppear, null);
+ performAddAnimation(delay, duration, isHeadsUpAppear, false /* isHeadsUpCycling */,
+ null);
}
public abstract void performAddAnimation(long delay, long duration, boolean isHeadsUpAppear,
- Runnable onEndRunnable);
+ boolean isHeadsUpCycling, Runnable onEndRunnable);
public int getPinnedHeadsUpHeight() {
return getIntrinsicHeight();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java
index c31f4ad5c3f1..4b2b1688bde6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java
@@ -998,6 +998,10 @@ public class NotificationContentInflater implements NotificationRowContentBinder
entry.setPromotedNotificationContentModel(result.mPromotedContent);
}
+ if (PromotedNotificationUiForceExpanded.isEnabled()) {
+ row.setPromotedOngoing(entry.isOngoingPromoted());
+ }
+
boolean setRepliesAndActions = true;
if ((reInflateFlags & FLAG_CONTENT_VIEW_CONTRACTED) != 0) {
if (result.inflatedContentView != null) {
@@ -1130,9 +1134,6 @@ public class NotificationContentInflater implements NotificationRowContentBinder
entry.setHeadsUpStatusBarText(result.headsUpStatusBarText);
entry.setHeadsUpStatusBarTextPublic(result.headsUpStatusBarTextPublic);
- if (PromotedNotificationUiForceExpanded.isEnabled()) {
- row.setPromotedOngoing(entry.isOngoingPromoted());
- }
Trace.endAsyncSection(APPLY_TRACE_METHOD, System.identityHashCode(row));
if (endListener != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java
index cd228e7872c1..a064d1c5b701 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/StackScrollerDecorView.java
@@ -260,7 +260,7 @@ public abstract class StackScrollerDecorView extends ExpandableView {
@Override
public long performRemoveAnimation(long duration, long delay,
float translationDirection, boolean isHeadsUpAnimation,
- Runnable onStartedRunnable,
+ boolean isHeadsUpCycling, Runnable onStartedRunnable,
Runnable onFinishedRunnable,
AnimatorListenerAdapter animationListener, ClipSide clipSide) {
// TODO: Use duration
@@ -279,7 +279,7 @@ public abstract class StackScrollerDecorView extends ExpandableView {
@Override
public void performAddAnimation(long delay, long duration, boolean isHeadsUpAppear,
- Runnable endRunnable) {
+ boolean isHeadsUpCycling, Runnable endRunnable) {
// TODO: use delay and duration
setContentVisibleAnimated(true);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCallTemplateViewWrapper.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCallTemplateViewWrapper.kt
index 2d946945597e..e887e25b74a2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCallTemplateViewWrapper.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationCallTemplateViewWrapper.kt
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.notification.row.wrapper
+import android.app.Flags.notificationsRedesignTemplates
import android.content.Context
import android.view.View
import com.android.internal.widget.CachingIconView
@@ -25,17 +26,13 @@ import com.android.systemui.statusbar.notification.NotificationFadeAware
import com.android.systemui.statusbar.notification.NotificationUtils
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow
-/**
- * Wraps a notification containing a call template
- */
-class NotificationCallTemplateViewWrapper constructor(
- ctx: Context,
- view: View,
- row: ExpandableNotificationRow
-) : NotificationTemplateViewWrapper(ctx, view, row) {
+/** Wraps a notification containing a call template */
+class NotificationCallTemplateViewWrapper
+constructor(ctx: Context, view: View, row: ExpandableNotificationRow) :
+ NotificationTemplateViewWrapper(ctx, view, row) {
private val minHeightWithActions: Int =
- NotificationUtils.getFontScaledHeight(ctx, R.dimen.notification_max_height)
+ NotificationUtils.getFontScaledHeight(ctx, R.dimen.notification_max_height)
private val callLayout: CallLayout = view as CallLayout
private lateinit var conversationIconContainer: View
@@ -48,13 +45,17 @@ class NotificationCallTemplateViewWrapper constructor(
private fun resolveViews() {
with(callLayout) {
conversationIconContainer =
- requireViewById(com.android.internal.R.id.conversation_icon_container)
+ requireViewById(com.android.internal.R.id.conversation_icon_container)
conversationIconView = requireViewById(com.android.internal.R.id.conversation_icon)
conversationBadgeBg =
- requireViewById(com.android.internal.R.id.conversation_icon_badge_bg)
+ requireViewById(com.android.internal.R.id.conversation_icon_badge_bg)
expandBtn = requireViewById(com.android.internal.R.id.expand_button)
appName = requireViewById(com.android.internal.R.id.app_name_text)
- conversationTitleView = requireViewById(com.android.internal.R.id.conversation_text)
+ conversationTitleView =
+ requireViewById(
+ if (notificationsRedesignTemplates()) com.android.internal.R.id.title
+ else com.android.internal.R.id.conversation_text
+ )
}
}
@@ -68,20 +69,12 @@ class NotificationCallTemplateViewWrapper constructor(
override fun updateTransformedTypes() {
// This also clears the existing types
super.updateTransformedTypes()
- addTransformedViews(
- appName,
- conversationTitleView
- )
- addViewsTransformingToSimilar(
- conversationIconView,
- conversationBadgeBg,
- expandBtn
- )
+ addTransformedViews(appName, conversationTitleView)
+ addViewsTransformingToSimilar(conversationIconView, conversationBadgeBg, expandBtn)
}
override fun disallowSingleClick(x: Float, y: Float): Boolean {
- val isOnExpandButton = expandBtn.visibility == View.VISIBLE &&
- isOnView(expandBtn, x, y)
+ val isOnExpandButton = expandBtn.visibility == View.VISIBLE && isOnView(expandBtn, x, y)
return isOnExpandButton || super.disallowSingleClick(x, y)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt
index 6a96fba8f28d..3d5f9e4cafdd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationConversationTemplateViewWrapper.kt
@@ -174,7 +174,8 @@ class NotificationConversationTemplateViewWrapper(
// and the top level image message container.
val containers =
messageContainers.asSequence().map { it.messageContainer } +
- if (notificationsRedesignTemplates()) emptySequence()
+ if (notificationsRedesignTemplates() && imageMessageContainer == null)
+ emptySequence()
else sequenceOf(imageMessageContainer!!)
val drawables =
containers
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 e8affaa4b60f..e9eecdd8a26f 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,7 +31,6 @@ 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;
@@ -42,7 +41,6 @@ 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;
@@ -69,7 +67,6 @@ 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;
@@ -157,10 +154,6 @@ 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);
@@ -302,9 +295,6 @@ 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/row/wrapper/NotificationTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java
index 3ccf5063cd68..b9aa57145c7c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/wrapper/NotificationTemplateViewWrapper.java
@@ -33,6 +33,7 @@ import android.graphics.drawable.Icon;
import android.service.notification.StatusBarNotification;
import android.util.ArraySet;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
@@ -42,6 +43,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ContrastColorUtil;
import com.android.internal.widget.NotificationActionListLayout;
import com.android.systemui.Dependency;
+import com.android.systemui.Flags;
import com.android.systemui.UiOffloadThread;
import com.android.systemui.res.R;
import com.android.systemui.statusbar.CrossFadeHelper;
@@ -51,6 +53,7 @@ import com.android.systemui.statusbar.notification.ImageTransformState;
import com.android.systemui.statusbar.notification.TransformState;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.HybridNotificationView;
+import com.android.systemui.util.DimensionKt;
import java.util.function.Consumer;
@@ -186,9 +189,43 @@ public class NotificationTemplateViewWrapper extends NotificationHeaderViewWrapp
mActions = mView.findViewById(com.android.internal.R.id.actions);
mRemoteInputHistory = mView.findViewById(
com.android.internal.R.id.notification_material_reply_container);
+
+ adjustTitleAndRightIconForPromotedOngoing();
updatePendingIntentCancellations();
}
+ private void adjustTitleAndRightIconForPromotedOngoing() {
+ if (Flags.uiRichOngoingForceExpanded() && mRow.isPromotedOngoing() && mRightIcon != null) {
+ final int horizontalMargin;
+ if (notificationsRedesignTemplates()) {
+ horizontalMargin = mView.getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.notification_2025_margin);
+ } else {
+ horizontalMargin = (int) DimensionKt.dpToPx(16, mView.getContext());
+ }
+
+ // position right icon to the right available space from expander.
+ final ViewGroup.MarginLayoutParams rightIconLP =
+ (ViewGroup.MarginLayoutParams) mRightIcon.getLayoutParams();
+ rightIconLP.setMarginEnd(horizontalMargin);
+ mRightIcon.setLayoutParams(rightIconLP);
+
+ // align top line view to start of the right icon.
+ final int iconSize = mView.getResources().getDimensionPixelSize(
+ com.android.internal.R.dimen.notification_right_icon_size);
+ final int marginEnd = 2 * horizontalMargin + iconSize;
+ mNotificationTopLine.setHeaderTextMarginEnd(marginEnd);
+
+ // title has too much margin on the right, so we need to reduce it
+ if (mTitle != null) {
+ final ViewGroup.MarginLayoutParams titleLP =
+ (ViewGroup.MarginLayoutParams) mTitle.getLayoutParams();
+ titleLP.setMarginEnd(marginEnd);
+ mTitle.setLayoutParams(titleLP);
+ }
+ }
+ }
+
@Nullable
protected final Icon getLargeIcon(Notification n) {
Icon modernLargeIcon = n.getLargeIcon();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MediaContainerView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MediaContainerView.kt
index bd7bd596438a..4d10a527d53b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MediaContainerView.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/MediaContainerView.kt
@@ -70,14 +70,15 @@ class MediaContainerView(context: Context, attrs: AttributeSet?) : ExpandableVie
}
override fun performRemoveAnimation(
- duration: Long,
- delay: Long,
- translationDirection: Float,
- isHeadsUpAnimation: Boolean,
- onStartedRunnable: Runnable?,
- onFinishedRunnable: Runnable?,
- animationListener: AnimatorListenerAdapter?,
- clipSide: ClipSide
+ duration: Long,
+ delay: Long,
+ translationDirection: Float,
+ isHeadsUpAnimation: Boolean,
+ isHeadsUpCycling: Boolean,
+ onStartedRunnable: Runnable?,
+ onFinishedRunnable: Runnable?,
+ animationListener: AnimatorListenerAdapter?,
+ clipSide: ClipSide,
): Long {
return 0
}
@@ -86,7 +87,8 @@ class MediaContainerView(context: Context, attrs: AttributeSet?) : ExpandableVie
delay: Long,
duration: Long,
isHeadsUpAppear: Boolean,
- onEnd: Runnable?
+ isHeadsUpCycling: Boolean,
+ onEnd: Runnable?,
) {
// No animation, it doesn't need it, this would be local
}
@@ -103,9 +105,7 @@ class MediaContainerView(context: Context, attrs: AttributeSet?) : ExpandableVie
assertMediaContainerVisibility(visibility)
}
- /**
- * visibility should be aligned with MediaContainerView visibility on the keyguard.
- */
+ /** visibility should be aligned with MediaContainerView visibility on the keyguard. */
private fun isVisibilityValid(visibility: Int): Boolean {
val currentViewState = viewState as? MediaContainerViewState ?: return true
val shouldBeGone = !currentViewState.shouldBeVisible
@@ -113,8 +113,7 @@ class MediaContainerView(context: Context, attrs: AttributeSet?) : ExpandableVie
}
/**
- * b/298213983
- * MediaContainerView's visibility is changed to VISIBLE when it should be GONE.
+ * b/298213983 MediaContainerView's visibility is changed to VISIBLE when it should be GONE.
* This method check this state and logs.
*/
private fun assertMediaContainerVisibility(visibility: Int) {
@@ -122,8 +121,10 @@ class MediaContainerView(context: Context, attrs: AttributeSet?) : ExpandableVie
if (currentViewState is MediaContainerViewState) {
if (!currentViewState.shouldBeVisible && visibility == VISIBLE) {
- Log.wtf("MediaContainerView", "MediaContainerView should be GONE " +
- "but its visibility changed to VISIBLE")
+ Log.wtf(
+ "MediaContainerView",
+ "MediaContainerView should be GONE " + "but its visibility changed to VISIBLE",
+ )
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
index 5e0d57ebb3fe..2b052236a921 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/StackStateAnimator.java
@@ -506,8 +506,8 @@ public class StackStateAnimator {
}
changingView.performRemoveAnimation(ANIMATION_DURATION_APPEAR_DISAPPEAR,
0 /* delay */, translationDirection, false /* isHeadsUpAppear */,
- startAnimation, postAnimation, getGlobalAnimationFinishedListener(),
- ExpandableView.ClipSide.BOTTOM);
+ false /* isHeadsUpCycling */, startAnimation, postAnimation,
+ getGlobalAnimationFinishedListener(), ExpandableView.ClipSide.BOTTOM);
needsCustomAnimation = true;
} else if (event.animationType ==
NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_REMOVE_SWIPED_OUT) {
@@ -538,7 +538,7 @@ public class StackStateAnimator {
};
}
changingView.performAddAnimation(0, ANIMATION_DURATION_HEADS_UP_CYCLING,
- /* isHeadsUpAppear= */ true, onAnimationEnd);
+ /* isHeadsUpAppear= */ true, /* isHeadsUpCycling= */ true, onAnimationEnd);
} else if (event.animationType == ANIMATION_TYPE_HEADS_UP_APPEAR) {
mHeadsUpAppearChildren.add(changingView);
@@ -559,7 +559,7 @@ public class StackStateAnimator {
onAnimationEnd = () -> mLogger.appearAnimationEnded(finalKey);
}
changingView.performAddAnimation(0, ANIMATION_DURATION_HEADS_UP_APPEAR,
- /* isHeadsUpAppear= */ true, onAnimationEnd);
+ /* isHeadsUpAppear= */ true, /* isHeadsUpCycling= */ false, onAnimationEnd);
} else if (event.animationType == ANIMATION_TYPE_HEADS_UP_CYCLING_OUT) {
mHeadsUpDisappearChildren.add(changingView);
Runnable endRunnable = null;
@@ -629,6 +629,7 @@ public class StackStateAnimator {
// translation, the actual translation is in StackScrollAlgorithm.
/* translationDirection= */ 0.0f,
/* isHeadsUpAnimation= */ true,
+ /* isHeadsUpCycling= */ true,
startAnimation, postAnimation,
getGlobalAnimationFinishedListener(), ExpandableView.ClipSide.TOP);
mAnimationProperties.delay += removeAnimationDelay;
@@ -706,6 +707,7 @@ public class StackStateAnimator {
long removeAnimationDelay = changingView.performRemoveAnimation(
ANIMATION_DURATION_HEADS_UP_DISAPPEAR,
0, 0.0f, true /* isHeadsUpAppear */,
+ false /* isHeadsUpCycling */,
startAnimation, postAnimation,
getGlobalAnimationFinishedListener(), ExpandableView.ClipSide.BOTTOM);
mAnimationProperties.delay += removeAnimationDelay;
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 08d98a1d53e5..1dbaf2f0f401 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
@@ -147,7 +147,7 @@ constructor(
sceneInteractor.transitionState.map { transition: ObservableTransitionState ->
transition is Transition &&
transition.fromContent == Scenes.Lockscreen &&
- (transition.toContent == Scenes.Bouncer || transition.toContent == Scenes.Gone)
+ (transition.toContent == Overlays.Bouncer || transition.toContent == Scenes.Gone)
}
/**
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 34b65603542c..877aa76590e9 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
@@ -76,6 +76,7 @@ import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToLockscreenTran
import com.android.systemui.keyguard.ui.viewmodel.ViewStateAccessor
import com.android.systemui.res.R
import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.LargeScreenHeaderHelper
import com.android.systemui.shade.ShadeDisplayAware
@@ -307,7 +308,7 @@ constructor(
keyguardTransitionInteractor.transitionValue(ALTERNATE_BOUNCER).map { it > 0f },
keyguardTransitionInteractor
.transitionValue(
- scene = Scenes.Bouncer,
+ content = Overlays.Bouncer,
stateWithoutSceneContainer = PRIMARY_BOUNCER,
)
.map { it > 0f },
@@ -361,7 +362,7 @@ constructor(
private val isOnGlanceableHub: Flow<Boolean> =
combine(
keyguardTransitionInteractor.isFinishedIn(
- scene = Scenes.Communal,
+ content = Scenes.Communal,
stateWithoutSceneContainer = GLANCEABLE_HUB,
),
anyOf(
@@ -638,7 +639,7 @@ constructor(
anyOf(
isKeyguardOccluded,
keyguardTransitionInteractor
- .transitionValue(scene = Scenes.Gone, stateWithoutSceneContainer = GONE)
+ .transitionValue(content = Scenes.Gone, stateWithoutSceneContainer = GONE)
.map { it == 1f },
)
}
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 bc297699c41a..8c44fe56d269 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -84,7 +84,7 @@ import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
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 com.android.systemui.scene.shared.model.Overlays;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeExpansionChangeEvent;
import com.android.systemui.shade.ShadeExpansionListener;
@@ -724,8 +724,10 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
if (!primaryBouncerIsShowing()) {
if (SceneContainerFlag.isEnabled()) {
mCentralSurfaces.hideKeyguard();
- mSceneInteractorLazy.get().changeScene(
- Scenes.Bouncer, "StatusBarKeyguardViewManager.showBouncerOrKeyguard");
+ mSceneInteractorLazy.get().showOverlay(
+ Overlays.Bouncer,
+ "StatusBarKeyguardViewManager.showBouncerOrKeyguard"
+ );
} else {
if (Flags.simPinRaceConditionOnRestart()) {
if (mPrimaryBouncerInteractor.show(/* isScrimmed= */ true)) {
@@ -816,8 +818,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
/* clearDismissAction= */ !SceneContainerFlag.isEnabled());
if (mKeyguardStateController.isShowing() && !isBouncerShowing()) {
if (SceneContainerFlag.isEnabled()) {
- mSceneInteractorLazy.get().changeScene(
- Scenes.Bouncer,
+ mSceneInteractorLazy.get().showOverlay(
+ Overlays.Bouncer,
"primary bouncer requested"
);
} else {
@@ -915,8 +917,10 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
// we'll handle the dismiss action after keyguard is gone, so just show the
// bouncer
if (SceneContainerFlag.isEnabled()) {
- mSceneInteractorLazy.get().changeScene(
- Scenes.Bouncer, "StatusBarKeyguardViewManager.dismissWithAction");
+ mSceneInteractorLazy.get().showOverlay(
+ Overlays.Bouncer,
+ "StatusBarKeyguardViewManager.dismissWithAction"
+ );
} else {
mPrimaryBouncerInteractor.show(/* isScrimmed= */ true);
}
@@ -926,8 +930,10 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
mPrimaryBouncerInteractor.setDismissAction(
mAfterKeyguardGoneAction, mKeyguardGoneCancelAction);
if (SceneContainerFlag.isEnabled()) {
- mSceneInteractorLazy.get().changeScene(
- Scenes.Bouncer, "StatusBarKeyguardViewManager.dismissWithAction");
+ mSceneInteractorLazy.get().showOverlay(
+ Overlays.Bouncer,
+ "StatusBarKeyguardViewManager.dismissWithAction"
+ );
} else {
mPrimaryBouncerInteractor.show(/* isScrimmed= */ true);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt
index d3369033942e..2efc0579f333 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryImpl.kt
@@ -20,6 +20,7 @@ import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
+import android.content.pm.PackageManager
import android.telephony.CarrierConfigManager
import android.telephony.SubscriptionInfo
import android.telephony.SubscriptionManager
@@ -192,6 +193,19 @@ constructor(
serviceStateChangedEvent
.mapLatest {
val modems = telephonyManager.activeModemCount
+
+ // Assume false for automotive devices which don't have the calling feature.
+ // TODO: b/398045526 to revisit the below.
+ val isAutomotive: Boolean =
+ context.packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
+ val hasFeatureCalling: Boolean =
+ context.packageManager.hasSystemFeature(
+ PackageManager.FEATURE_TELEPHONY_CALLING
+ )
+ if (isAutomotive && !hasFeatureCalling) {
+ return@mapLatest false
+ }
+
// Check the service state for every modem. If any state reports emergency calling
// capable, then consider the device to have emergency call capabilities
(0..<modems)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt
index e37c3f10cfcb..ac301b035398 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/viewmodel/MobileIconViewModel.kt
@@ -94,7 +94,12 @@ class MobileIconViewModel(
}
private val satelliteProvider by lazy {
- CarrierBasedSatelliteViewModelImpl(subscriptionId, iconInteractor)
+ CarrierBasedSatelliteViewModelImpl(
+ subscriptionId,
+ airplaneModeInteractor,
+ iconInteractor,
+ scope,
+ )
}
/**
@@ -145,9 +150,15 @@ class MobileIconViewModel(
/** Representation of this network when it is non-terrestrial (e.g., satellite) */
private class CarrierBasedSatelliteViewModelImpl(
override val subscriptionId: Int,
+ airplaneModeInteractor: AirplaneModeInteractor,
interactor: MobileIconInteractor,
+ scope: CoroutineScope,
) : MobileIconViewModelCommon {
- override val isVisible: StateFlow<Boolean> = MutableStateFlow(true)
+ override val isVisible: StateFlow<Boolean> =
+ airplaneModeInteractor.isAirplaneMode
+ .map { !it }
+ .stateIn(scope, SharingStarted.WhileSubscribed(), false)
+
override val icon: Flow<SignalIconModel> = interactor.signalLevelIcon
override val contentDescription: Flow<MobileContentDescription?> = MutableStateFlow(null)
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 39a1b46292b0..4189221d8a83 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
@@ -37,6 +37,10 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.android.compose.theme.PlatformTheme
import com.android.keyguard.AlphaOptimizedLinearLayout
import com.android.systemui.lifecycle.rememberViewModel
+import com.android.systemui.media.controls.ui.controller.MediaHierarchyManager
+import com.android.systemui.media.controls.ui.view.MediaHost
+import com.android.systemui.media.controls.ui.view.MediaHostState
+import com.android.systemui.media.dagger.MediaModule.POPUP
import com.android.systemui.plugins.DarkIconDispatcher
import com.android.systemui.res.R
import com.android.systemui.statusbar.chips.ui.compose.OngoingActivityChips
@@ -67,6 +71,7 @@ import com.android.systemui.statusbar.pipeline.shared.ui.model.VisibilityModel
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModel
import com.android.systemui.statusbar.pipeline.shared.ui.viewmodel.HomeStatusBarViewModel.HomeStatusBarViewModelFactory
import javax.inject.Inject
+import javax.inject.Named
/** Factory to simplify the dependency management for [StatusBarRoot] */
class StatusBarRootFactory
@@ -81,6 +86,8 @@ constructor(
private val ongoingCallController: OngoingCallController,
private val darkIconDispatcherStore: DarkIconDispatcherStore,
private val eventAnimationInteractor: SystemStatusEventAnimationInteractor,
+ private val mediaHierarchyManager: MediaHierarchyManager,
+ @Named(POPUP) private val mediaHost: MediaHost,
) {
fun create(root: ViewGroup, andThen: (ViewGroup) -> Unit): ComposeView {
val composeView = ComposeView(root.context)
@@ -99,6 +106,8 @@ constructor(
ongoingCallController = ongoingCallController,
darkIconDispatcher = darkIconDispatcher,
eventAnimationInteractor = eventAnimationInteractor,
+ mediaHierarchyManager = mediaHierarchyManager,
+ mediaHost = mediaHost,
onViewCreated = andThen,
)
}
@@ -130,6 +139,8 @@ fun StatusBarRoot(
ongoingCallController: OngoingCallController,
darkIconDispatcher: DarkIconDispatcher,
eventAnimationInteractor: SystemStatusEventAnimationInteractor,
+ mediaHierarchyManager: MediaHierarchyManager,
+ mediaHost: MediaHost,
onViewCreated: (ViewGroup) -> Unit,
) {
val displayId = parent.context.displayId
@@ -237,6 +248,15 @@ fun StatusBarRoot(
// Add a composable container for `StatusBarPopupChip`s
if (StatusBarPopupChips.isEnabled) {
+ with(mediaHost) {
+ expansion = MediaHostState.EXPANDED
+ expandedMatchesParentHeight = true
+ showsOnlyActiveMedia = true
+ falsingProtectionNeeded = false
+ disablePagination = true
+ init(MediaHierarchyManager.LOCATION_STATUS_BAR_POPUP)
+ }
+
val endSideContent =
phoneStatusBarView.requireViewById<AlphaOptimizedLinearLayout>(
R.id.status_bar_end_side_content
@@ -256,7 +276,12 @@ fun StatusBarRoot(
setContent {
StatusBarPopupChipsContainer(
- chips = statusBarViewModel.popupChips
+ chips = statusBarViewModel.popupChips,
+ mediaHost = mediaHost,
+ onMediaControlPopupVisibilityChanged = { popupShowing ->
+ mediaHierarchyManager.isMediaControlPopupShowing =
+ popupShowing
+ },
)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModel.kt
index 7d9a7d49cf7f..2dc17f40a380 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ui/viewmodel/KeyguardStatusBarViewModel.kt
@@ -78,6 +78,7 @@ constructor(
currentScene == Scenes.Lockscreen &&
Overlays.NotificationsShade !in currentOverlays &&
Overlays.QuickSettingsShade !in currentOverlays &&
+ Overlays.Bouncer !in currentOverlays &&
!isDozing &&
!showHeadsUpStatusBar
}
diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/TouchpadTutorialModule.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/TouchpadTutorialModule.kt
index d8a9527b22ab..d2f1d3cb7b47 100644
--- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/TouchpadTutorialModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/TouchpadTutorialModule.kt
@@ -133,14 +133,14 @@ private class ScreensProvider(
override fun BackGesture(
onDoneButtonClicked: () -> Unit,
onBack: () -> Unit,
- isAutoProceed: Boolean,
+ onAutoProceed: (suspend () -> Unit)?,
) {
BackGestureTutorialScreen(
backGestureScreenViewModel,
easterEggGestureViewModel,
onDoneButtonClicked,
onBack,
- isAutoProceed,
+ onAutoProceed,
)
}
@@ -148,14 +148,14 @@ private class ScreensProvider(
override fun HomeGesture(
onDoneButtonClicked: () -> Unit,
onBack: () -> Unit,
- isAutoProceed: Boolean,
+ onAutoProceed: (suspend () -> Unit)?,
) {
HomeGestureTutorialScreen(
homeGestureScreenViewModel,
easterEggGestureViewModel,
onDoneButtonClicked,
onBack,
- isAutoProceed,
+ onAutoProceed,
)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/BackGestureTutorialScreen.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/BackGestureTutorialScreen.kt
index c28483c55952..2e2a97d9702f 100644
--- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/BackGestureTutorialScreen.kt
+++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/BackGestureTutorialScreen.kt
@@ -33,7 +33,7 @@ fun BackGestureTutorialScreen(
easterEggGestureViewModel: EasterEggGestureViewModel,
onDoneButtonClicked: () -> Unit,
onBack: () -> Unit,
- isAutoProceed: Boolean = false,
+ onAutoProceed: (suspend () -> Unit)? = null,
) {
val screenConfig =
TutorialScreenConfig(
@@ -48,7 +48,6 @@ fun BackGestureTutorialScreen(
bodyErrorResId = R.string.touchpad_back_gesture_error_body,
),
animations = TutorialScreenConfig.Animations(educationResId = R.raw.trackpad_back_edu),
- hasNextButton = isAutoProceed,
)
GestureTutorialScreen(
screenConfig = screenConfig,
@@ -61,6 +60,7 @@ fun BackGestureTutorialScreen(
onEasterEggFinished = easterEggGestureViewModel::onEasterEggFinished,
onDoneButtonClicked = onDoneButtonClicked,
onBack = onBack,
+ onAutoProceed = onAutoProceed,
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/GestureTutorialScreen.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/GestureTutorialScreen.kt
index 47c82e309d9b..db3e31ba2e61 100644
--- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/GestureTutorialScreen.kt
+++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/GestureTutorialScreen.kt
@@ -49,6 +49,7 @@ fun GestureTutorialScreen(
onEasterEggFinished: () -> Unit,
onDoneButtonClicked: () -> Unit,
onBack: () -> Unit,
+ onAutoProceed: (suspend () -> Unit)? = null,
) {
BackHandler(onBack = onBack)
var cachedTutorialState: TutorialActionState by
@@ -64,7 +65,7 @@ fun GestureTutorialScreen(
easterEggTriggered,
onEasterEggFinished,
) {
- ActionTutorialContent(tutorialState, onDoneButtonClicked, screenConfig)
+ ActionTutorialContent(tutorialState, onDoneButtonClicked, screenConfig, onAutoProceed)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/HomeGestureTutorialScreen.kt b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/HomeGestureTutorialScreen.kt
index b238a8db31f8..3e27dfb07624 100644
--- a/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/HomeGestureTutorialScreen.kt
+++ b/packages/SystemUI/src/com/android/systemui/touchpad/tutorial/ui/composable/HomeGestureTutorialScreen.kt
@@ -32,7 +32,7 @@ fun HomeGestureTutorialScreen(
easterEggGestureViewModel: EasterEggGestureViewModel,
onDoneButtonClicked: () -> Unit,
onBack: () -> Unit,
- isAutoProceed: Boolean = false,
+ onAutoProceed: (suspend () -> Unit)? = null,
) {
val screenConfig =
TutorialScreenConfig(
@@ -47,7 +47,6 @@ fun HomeGestureTutorialScreen(
bodyErrorResId = R.string.touchpad_home_gesture_error_body,
),
animations = TutorialScreenConfig.Animations(educationResId = R.raw.trackpad_home_edu),
- hasNextButton = isAutoProceed,
)
GestureTutorialScreen(
screenConfig = screenConfig,
@@ -60,6 +59,7 @@ fun HomeGestureTutorialScreen(
onEasterEggFinished = easterEggGestureViewModel::onEasterEggFinished,
onDoneButtonClicked = onDoneButtonClicked,
onBack = onBack,
+ onAutoProceed = onAutoProceed,
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserLockedInteractor.kt b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserLockedInteractor.kt
index ef29a387e06f..3bd8af690763 100644
--- a/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserLockedInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/user/domain/interactor/UserLockedInteractor.kt
@@ -18,12 +18,20 @@ package com.android.systemui.user.domain.interactor
import android.os.UserHandle
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.user.data.repository.UserRepository
import javax.inject.Inject
+import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.flowOn
@SysUISingleton
-class UserLockedInteractor @Inject constructor(val userRepository: UserRepository) {
+class UserLockedInteractor
+@Inject
+constructor(
+ @Background val backgroundDispatcher: CoroutineDispatcher,
+ val userRepository: UserRepository,
+) {
fun isUserUnlocked(userHandle: UserHandle?): Flow<Boolean> =
- userRepository.isUserUnlocked(userHandle)
+ userRepository.isUserUnlocked(userHandle).flowOn(backgroundDispatcher)
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/Events.java b/packages/SystemUI/src/com/android/systemui/volume/Events.java
index e10d1cb833fa..b8eb5189408e 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/Events.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/Events.java
@@ -37,16 +37,16 @@ import java.util.Arrays;
public class Events {
private static final String TAG = Util.logTag(Events.class);
- public static final int EVENT_SHOW_DIALOG = 0; // (reason|int) (keyguard|bool)
- public static final int EVENT_DISMISS_DIALOG = 1; // (reason|int)
+ @Deprecated public static final int EVENT_SHOW_DIALOG = 0; // (reason|int) (keyguard|bool)
+ @Deprecated public static final int EVENT_DISMISS_DIALOG = 1; // (reason|int)
public static final int EVENT_ACTIVE_STREAM_CHANGED = 2; // (stream|int)
public static final int EVENT_EXPAND = 3; // (expand|bool)
public static final int EVENT_KEY = 4; // (stream|int) (lastAudibleStreamVolume)
public static final int EVENT_COLLECTION_STARTED = 5;
public static final int EVENT_COLLECTION_STOPPED = 6;
- public static final int EVENT_ICON_CLICK = 7; // (stream|int) (icon_state|int)
- public static final int EVENT_SETTINGS_CLICK = 8;
- public static final int EVENT_TOUCH_LEVEL_CHANGED = 9; // (stream|int) (level|int)
+ @Deprecated public static final int EVENT_ICON_CLICK = 7; // (stream|int) (icon_state|int)
+ @Deprecated public static final int EVENT_SETTINGS_CLICK = 8;
+ @Deprecated public static final int EVENT_TOUCH_LEVEL_CHANGED = 9; // (stream|int) (level|int)
public static final int EVENT_LEVEL_CHANGED = 10; // (stream|int) (level|int)
public static final int EVENT_INTERNAL_RINGER_MODE_CHANGED = 11; // (mode|int)
public static final int EVENT_EXTERNAL_RINGER_MODE_CHANGED = 12; // (mode|int)
@@ -55,12 +55,12 @@ public class Events {
public static final int EVENT_MUTE_CHANGED = 15; // (stream|int) (muted|bool)
public static final int EVENT_TOUCH_LEVEL_DONE = 16; // (stream|int) (level|int)
public static final int EVENT_ZEN_CONFIG_CHANGED = 17; // (allow/disallow|string)
- public static final int EVENT_RINGER_TOGGLE = 18; // (ringer_mode)
+ @Deprecated public static final int EVENT_RINGER_TOGGLE = 18; // (ringer_mode)
public static final int EVENT_SHOW_USB_OVERHEAT_ALARM = 19; // (reason|int) (keyguard|bool)
public static final int EVENT_DISMISS_USB_OVERHEAT_ALARM = 20; // (reason|int) (keyguard|bool)
public static final int EVENT_ODI_CAPTIONS_CLICK = 21;
public static final int EVENT_ODI_CAPTIONS_TOOLTIP_CLICK = 22;
- public static final int EVENT_SLIDER_TOUCH_TRACKING = 23; // (tracking|bool)
+ @Deprecated public static final int EVENT_SLIDER_TOUCH_TRACKING = 23; // (tracking|bool)
private static final String[] EVENT_TAGS = {
"show_dialog",
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 0bdf99e49b1b..14eede6f6816 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
@@ -24,6 +24,7 @@ import android.widget.ImageButton
import androidx.annotation.LayoutRes
import androidx.compose.ui.util.fastForEachIndexed
import androidx.constraintlayout.motion.widget.MotionLayout
+import androidx.constraintlayout.motion.widget.MotionScene
import androidx.dynamicanimation.animation.FloatValueHolder
import androidx.dynamicanimation.animation.SpringAnimation
import androidx.dynamicanimation.animation.SpringForce
@@ -47,6 +48,7 @@ import com.android.systemui.volume.dialog.ui.viewmodel.VolumeDialogViewModel
import javax.inject.Inject
import kotlin.properties.Delegates
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.mapLatest
@@ -55,6 +57,7 @@ private const val CLOSE_DRAWER_DELAY = 300L
// Ensure roundness and color of button is updated when progress is changed by a minimum fraction.
private const val BUTTON_MIN_VISIBLE_CHANGE = 0.05F
+@OptIn(ExperimentalCoroutinesApi::class)
@VolumeDialogScope
class VolumeDialogRingerViewBinder
@Inject
@@ -208,6 +211,13 @@ constructor(
ringerState.orientation,
ringerBackgroundView,
)
+ drawerContainer
+ .getTransition(R.id.close_to_open_transition)
+ .setInterpolatorInfo(
+ MotionScene.Transition.INTERPOLATE_REFERENCE_ID,
+ null,
+ R.anim.volume_dialog_ringer_open,
+ )
drawerContainer.transitionToState(
R.id.volume_dialog_ringer_drawer_open
)
@@ -370,6 +380,12 @@ constructor(
orientation: Int,
) {
setTransition(R.id.close_to_open_transition)
+ getTransition(R.id.close_to_open_transition)
+ .setInterpolatorInfo(
+ MotionScene.Transition.INTERPOLATE_REFERENCE_ID,
+ null,
+ R.anim.volume_dialog_ringer_close,
+ )
updateCloseState(this, selectedIndex, orientation, ringerBackground)
transitionToState(R.id.volume_dialog_ringer_drawer_close)
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt
index b0d6d62289c7..69a939ae078e 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModel.kt
@@ -25,6 +25,7 @@ import android.media.AudioManager.STREAM_RING
import android.os.VibrationEffect
import android.widget.Toast
import com.android.internal.R as internalR
+import com.android.internal.logging.UiEventLogger
import com.android.settingslib.Utils
import com.android.settingslib.notification.domain.interactor.NotificationsSoundPolicyInteractor
import com.android.settingslib.volume.shared.model.AudioStream
@@ -43,6 +44,7 @@ import com.android.systemui.volume.dialog.domain.interactor.VolumeDialogVisibili
import com.android.systemui.volume.dialog.ringer.domain.VolumeDialogRingerInteractor
import com.android.systemui.volume.dialog.ringer.shared.model.VolumeDialogRingerModel
import com.android.systemui.volume.dialog.shared.VolumeDialogLogger
+import com.android.systemui.volume.dialog.ui.VolumeDialogUiEvent
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
@@ -73,6 +75,7 @@ constructor(
private val volumeDialogLogger: VolumeDialogLogger,
private val visibilityInteractor: VolumeDialogVisibilityInteractor,
configurationController: ConfigurationController,
+ private val uiEventLogger: UiEventLogger,
private val systemClock: SystemClock,
) {
@@ -112,6 +115,7 @@ constructor(
.build()
private var lastClickTime = 0L
+
init {
ringerViewModel
.onEach { viewModelState ->
@@ -137,6 +141,7 @@ constructor(
provideTouchFeedback(ringerMode)
maybeShowToast(ringerMode)
ringerInteractor.setRingerMode(ringerMode)
+ ringerMode.toVolumeDialogUiEvent()?.let(uiEventLogger::log)
}
visibilityInteractor.resetDismissTimeout()
drawerState.value =
@@ -312,3 +317,12 @@ constructor(
}
}
}
+
+private fun RingerMode.toVolumeDialogUiEvent(): VolumeDialogUiEvent? {
+ return when (value) {
+ RINGER_MODE_NORMAL -> VolumeDialogUiEvent.RINGER_MODE_NORMAL
+ RINGER_MODE_VIBRATE -> VolumeDialogUiEvent.RINGER_MODE_VIBRATE
+ RINGER_MODE_SILENT -> VolumeDialogUiEvent.RINGER_MODE_SILENT
+ else -> null
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/viewmodel/VolumeDialogSettingsButtonViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/viewmodel/VolumeDialogSettingsButtonViewModel.kt
index 0e4e707df923..94c66cccbc59 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/viewmodel/VolumeDialogSettingsButtonViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/settings/ui/viewmodel/VolumeDialogSettingsButtonViewModel.kt
@@ -32,12 +32,14 @@ import com.airbnb.lottie.SimpleColorFilter
import com.airbnb.lottie.model.KeyPath
import com.airbnb.lottie.value.LottieValueCallback
import com.android.internal.R as internalR
+import com.android.internal.logging.UiEventLogger
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.UiBackground
import com.android.systemui.lottie.await
import com.android.systemui.res.R
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog
import com.android.systemui.volume.dialog.settings.domain.VolumeDialogSettingsButtonInteractor
+import com.android.systemui.volume.dialog.ui.VolumeDialogUiEvent
import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaDeviceSessionInteractor
import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaOutputInteractor
import com.android.systemui.volume.panel.shared.model.filterData
@@ -71,6 +73,7 @@ constructor(
mediaOutputInteractor: MediaOutputInteractor,
private val mediaDeviceSessionInteractor: MediaDeviceSessionInteractor,
private val interactor: VolumeDialogSettingsButtonInteractor,
+ private val uiEventLogger: UiEventLogger,
) {
@SuppressLint("UseCompatLoadingForDrawables")
@@ -160,6 +163,7 @@ constructor(
fun onButtonClicked() {
interactor.onButtonClicked()
+ uiEventLogger.log(VolumeDialogUiEvent.VOLUME_DIALOG_SETTINGS_CLICK)
}
private data class PlaybackStates(val isPreviousActive: Boolean?, val isCurrentActive: Boolean)
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt
index 1c0fabea6d63..a0e3fbd2f3d1 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/VolumeDialogSliderViewBinder.kt
@@ -23,6 +23,7 @@ import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.foundation.gestures.Orientation
+import androidx.compose.foundation.interaction.DragInteraction
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.padding
@@ -58,7 +59,6 @@ import com.android.systemui.volume.dialog.sliders.ui.viewmodel.VolumeDialogSlide
import com.android.systemui.volume.haptics.ui.VolumeHapticsConfigsProvider
import javax.inject.Inject
import kotlin.math.round
-import kotlin.math.roundToInt
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.isActive
@@ -136,7 +136,7 @@ private fun VolumeDialogSlider(
)
.also { sliderState ->
sliderState.onValueChangeFinished = {
- viewModel.onStreamChangeFinished(sliderState.value.roundToInt())
+ viewModel.onSliderChangeFinished(sliderState.value)
hapticsViewModel?.onValueChangeEnded()
}
sliderState.onValueChange = { newValue ->
@@ -161,6 +161,15 @@ private fun VolumeDialogSlider(
hapticsViewModel?.onValueChange(value)
}
}
+ LaunchedEffect(interactionSource) {
+ interactionSource.interactions.collect {
+ when (it) {
+ is DragInteraction.Start -> viewModel.onSliderDragStarted()
+ is DragInteraction.Cancel -> viewModel.onSliderDragFinished()
+ is DragInteraction.Stop -> viewModel.onSliderDragFinished()
+ }
+ }
+ }
VerticalSlider(
state = sliderState,
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModel.kt
index 9ac052af95d9..19b2880b9496 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModel.kt
@@ -19,6 +19,7 @@ package com.android.systemui.volume.dialog.sliders.ui.viewmodel
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.pointer.PointerEvent
import androidx.compose.ui.input.pointer.PointerEventType
+import com.android.internal.logging.UiEventLogger
import com.android.systemui.util.time.SystemClock
import com.android.systemui.volume.Events
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialog
@@ -30,6 +31,7 @@ import com.android.systemui.volume.dialog.sliders.domain.interactor.VolumeDialog
import com.android.systemui.volume.dialog.sliders.domain.interactor.VolumeDialogSliderInteractor
import com.android.systemui.volume.dialog.sliders.domain.model.VolumeDialogSliderType
import com.android.systemui.volume.dialog.sliders.shared.model.SliderInputEvent
+import com.android.systemui.volume.dialog.ui.VolumeDialogUiEvent
import javax.inject.Inject
import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineScope
@@ -69,6 +71,7 @@ constructor(
private val inputEventsInteractor: VolumeDialogSliderInputEventsInteractor,
private val systemClock: SystemClock,
private val logger: VolumeDialogLogger,
+ private val uiEventLogger: UiEventLogger,
) {
private val userVolumeUpdates = MutableStateFlow<VolumeUpdate?>(null)
@@ -99,9 +102,11 @@ constructor(
isMuted = isMuted,
isRoutedToBluetooth = routedToBluetooth,
)
+
is VolumeDialogSliderType.RemoteMediaStream -> {
volumeDialogSliderIconProvider.getCastIcon(isMuted)
}
+
is VolumeDialogSliderType.AudioSharingStream -> {
volumeDialogSliderIconProvider.getAudioSharingIcon(isMuted)
}
@@ -135,8 +140,19 @@ constructor(
}
}
- fun onStreamChangeFinished(volume: Int) {
- logger.onVolumeSliderAdjustmentFinished(volume = volume, stream = sliderType.audioStream)
+ fun onSliderDragStarted() {
+ uiEventLogger.log(VolumeDialogUiEvent.VOLUME_DIALOG_SLIDER_STARTED_TRACKING_TOUCH)
+ }
+
+ fun onSliderDragFinished() {
+ uiEventLogger.log(VolumeDialogUiEvent.VOLUME_DIALOG_SLIDER_STOPPED_TRACKING_TOUCH)
+ }
+
+ fun onSliderChangeFinished(volume: Float) {
+ logger.onVolumeSliderAdjustmentFinished(
+ volume = volume.roundToInt(),
+ stream = sliderType.audioStream,
+ )
}
fun onTouchEvent(pointerEvent: PointerEvent) {
@@ -146,14 +162,17 @@ constructor(
inputEventsInteractor.onTouchEvent(
SliderInputEvent.Touch.Start(position.x, position.y)
)
+
PointerEventType.Move ->
inputEventsInteractor.onTouchEvent(
SliderInputEvent.Touch.Move(position.x, position.y)
)
+
PointerEventType.Scroll ->
inputEventsInteractor.onTouchEvent(
SliderInputEvent.Touch.Move(position.x, position.y)
)
+
PointerEventType.Release ->
inputEventsInteractor.onTouchEvent(
SliderInputEvent.Touch.End(position.x, position.y)
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/VolumeDialogUiEvent.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/VolumeDialogUiEvent.kt
new file mode 100644
index 000000000000..cf1b69ed6cba
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/VolumeDialogUiEvent.kt
@@ -0,0 +1,60 @@
+/*
+ * 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.volume.dialog.ui
+
+import com.android.internal.logging.UiEvent
+import com.android.internal.logging.UiEventLogger
+
+/** UI events for Volume Dialog. */
+enum class VolumeDialogUiEvent(val metricId: Int) : UiEventLogger.UiEventEnum {
+ @UiEvent(doc = "The ringer mode was toggled to silent") RINGER_MODE_SILENT(154),
+ @UiEvent(doc = "The ringer mode was toggled to vibrate") RINGER_MODE_VIBRATE(155),
+ @UiEvent(doc = "The ringer mode was toggled to normal") RINGER_MODE_NORMAL(334),
+ @UiEvent(doc = "The volume dialog settings icon was clicked") VOLUME_DIALOG_SETTINGS_CLICK(143),
+ @UiEvent(doc = "The volume dialog was shown because the volume changed")
+ VOLUME_DIALOG_SHOW_VOLUME_CHANGED(128),
+ @UiEvent(doc = "The volume dialog was shown because the volume changed remotely")
+ VOLUME_DIALOG_SHOW_REMOTE_VOLUME_CHANGED(129),
+ @UiEvent(doc = "The volume dialog was shown because the usb high temperature alarm changed")
+ VOLUME_DIALOG_SHOW_USB_TEMP_ALARM_CHANGED(130),
+ @UiEvent(doc = "The volume dialog was dismissed because of a touch outside the dialog")
+ VOLUME_DIALOG_DISMISS_TOUCH_OUTSIDE(134),
+ @UiEvent(
+ doc =
+ "The system asked the volume dialog to close, e.g. for a navigation bar " +
+ "touch, or ActivityManager ACTION_CLOSE_SYSTEM_DIALOGS broadcast."
+ )
+ VOLUME_DIALOG_DISMISS_SYSTEM(135),
+ @UiEvent(doc = "The volume dialog was dismissed because it timed out")
+ VOLUME_DIALOG_DISMISS_TIMEOUT(136),
+ @UiEvent(doc = "The volume dialog was dismissed because the screen turned off")
+ VOLUME_DIALOG_DISMISS_SCREEN_OFF(137),
+ @UiEvent(doc = "The volume dialog was dismissed because the settings icon was clicked")
+ VOLUME_DIALOG_DISMISS_SETTINGS(138),
+ @UiEvent(doc = "The volume dialog was dismissed because the stream no longer exists")
+ VOLUME_DIALOG_DISMISS_STREAM_GONE(140),
+ @UiEvent(
+ doc = "The volume dialog was dismissed because the usb high temperature alarm " + "changed"
+ )
+ VOLUME_DIALOG_DISMISS_USB_TEMP_ALARM_CHANGED(142),
+ @UiEvent(doc = "The right-most slider started tracking touch")
+ VOLUME_DIALOG_SLIDER_STARTED_TRACKING_TOUCH(1620),
+ @UiEvent(doc = "The right-most slider stopped tracking touch")
+ VOLUME_DIALOG_SLIDER_STOPPED_TRACKING_TOUCH(1621);
+
+ override fun getId() = metricId
+}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/viewmodel/VolumeDialogPluginViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/viewmodel/VolumeDialogPluginViewModel.kt
index 1765f0111e08..6d16300bf56e 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/viewmodel/VolumeDialogPluginViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/dialog/ui/viewmodel/VolumeDialogPluginViewModel.kt
@@ -16,6 +16,7 @@
package com.android.systemui.volume.dialog.ui.viewmodel
+import com.android.internal.logging.UiEventLogger
import com.android.systemui.volume.Events
import com.android.systemui.volume.dialog.VolumeDialog
import com.android.systemui.volume.dialog.dagger.scope.VolumeDialogPlugin
@@ -26,6 +27,7 @@ import com.android.systemui.volume.dialog.domain.interactor.VolumeDialogVisibili
import com.android.systemui.volume.dialog.shared.VolumeDialogLogger
import com.android.systemui.volume.dialog.shared.model.CsdWarningConfigModel
import com.android.systemui.volume.dialog.shared.model.VolumeDialogVisibilityModel
+import com.android.systemui.volume.dialog.ui.VolumeDialogUiEvent
import javax.inject.Inject
import javax.inject.Provider
import kotlinx.coroutines.CoroutineScope
@@ -44,6 +46,7 @@ constructor(
private val volumeDialogProvider: Provider<VolumeDialog>,
private val logger: VolumeDialogLogger,
val csdWarningConfigModel: CsdWarningConfigModel,
+ private val uiEventLogger: UiEventLogger,
) {
fun launchVolumeDialog() {
@@ -52,11 +55,11 @@ constructor(
with(visibilityModel) {
if (this is VolumeDialogVisibilityModel.Visible) {
showDialog()
- Events.writeEvent(Events.EVENT_SHOW_DIALOG, reason, keyguardLocked)
+ toVolumeDialogUiEvent()?.let(uiEventLogger::log)
logger.onShow(reason)
}
if (this is VolumeDialogVisibilityModel.Dismissed) {
- Events.writeEvent(Events.EVENT_DISMISS_DIALOG, reason)
+ toVolumeDialogUiEvent()?.let(uiEventLogger::log)
logger.onDismiss(reason)
}
}
@@ -86,3 +89,29 @@ constructor(
.show()
}
}
+
+private fun VolumeDialogVisibilityModel.Dismissed.toVolumeDialogUiEvent(): VolumeDialogUiEvent? {
+ return when (reason) {
+ Events.DISMISS_REASON_TOUCH_OUTSIDE ->
+ VolumeDialogUiEvent.VOLUME_DIALOG_DISMISS_TOUCH_OUTSIDE
+ Events.DISMISS_REASON_VOLUME_CONTROLLER -> VolumeDialogUiEvent.VOLUME_DIALOG_DISMISS_SYSTEM
+ Events.DISMISS_REASON_TIMEOUT -> VolumeDialogUiEvent.VOLUME_DIALOG_DISMISS_TIMEOUT
+ Events.DISMISS_REASON_SCREEN_OFF -> VolumeDialogUiEvent.VOLUME_DIALOG_DISMISS_SCREEN_OFF
+ Events.DISMISS_REASON_SETTINGS_CLICKED -> VolumeDialogUiEvent.VOLUME_DIALOG_DISMISS_SETTINGS
+ Events.DISMISS_STREAM_GONE -> VolumeDialogUiEvent.VOLUME_DIALOG_DISMISS_STREAM_GONE
+ Events.DISMISS_REASON_USB_OVERHEAD_ALARM_CHANGED ->
+ VolumeDialogUiEvent.VOLUME_DIALOG_DISMISS_USB_TEMP_ALARM_CHANGED
+ else -> null
+ }
+}
+
+private fun VolumeDialogVisibilityModel.Visible.toVolumeDialogUiEvent(): VolumeDialogUiEvent? {
+ return when (reason) {
+ Events.SHOW_REASON_VOLUME_CHANGED -> VolumeDialogUiEvent.VOLUME_DIALOG_SHOW_VOLUME_CHANGED
+ Events.SHOW_REASON_REMOTE_VOLUME_CHANGED ->
+ VolumeDialogUiEvent.VOLUME_DIALOG_SHOW_REMOTE_VOLUME_CHANGED
+ Events.SHOW_REASON_USB_OVERHEAD_ALARM_CHANGED ->
+ VolumeDialogUiEvent.VOLUME_DIALOG_SHOW_USB_TEMP_ALARM_CHANGED
+ else -> null
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java b/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
index e76401528ff6..b23efcea1c2c 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/BubblesManager.java
@@ -23,6 +23,7 @@ import static android.service.notification.NotificationListenerService.REASON_AP
import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL_ALL;
import static android.service.notification.NotificationListenerService.REASON_GROUP_SUMMARY_CANCELED;
import static android.service.notification.NotificationListenerService.REASON_PACKAGE_BANNED;
+import static android.service.notification.NotificationListenerService.REASON_PACKAGE_CHANGED;
import static android.service.notification.NotificationStats.DISMISSAL_BUBBLE;
import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_NEUTRAL;
@@ -451,7 +452,8 @@ public class BubblesManager {
public void onEntryRemoved(NotificationEntry entry,
@NotifCollection.CancellationReason int reason) {
if (reason == REASON_APP_CANCEL || reason == REASON_APP_CANCEL_ALL
- || reason == REASON_PACKAGE_BANNED) {
+ || reason == REASON_PACKAGE_BANNED
+ || reason == REASON_PACKAGE_CHANGED) {
BubblesManager.this.onEntryRemoved(entry);
}
}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
index e2cfbc6f764c..a42f5d3f67ea 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
@@ -65,6 +65,8 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import static java.util.Collections.emptySet;
+
import android.app.Activity;
import android.app.ActivityTaskManager;
import android.app.IActivityTaskManager;
@@ -155,6 +157,7 @@ import com.android.systemui.log.SessionTracker;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.scene.domain.interactor.SceneInteractor;
import com.android.systemui.scene.shared.flag.SceneContainerFlag;
+import com.android.systemui.scene.shared.model.Overlays;
import com.android.systemui.scene.shared.model.Scenes;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shared.system.TaskStackChangeListener;
@@ -190,6 +193,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.Random;
+import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -2775,7 +2779,7 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
private void setPrimaryBouncerVisibility(boolean isVisible) {
if (SceneContainerFlag.isEnabled()) {
ObservableTransitionState transitionState = new ObservableTransitionState.Idle(
- isVisible ? Scenes.Bouncer : Scenes.Lockscreen);
+ Scenes.Lockscreen, isVisible ? Set.of(Overlays.Bouncer) : emptySet());
when(mSceneInteractor.getTransitionState()).thenReturn(
MutableStateFlow(transitionState));
onTransitionStateChanged(transitionState);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/animation/FontInterpolatorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/animation/FontInterpolatorTest.kt
index 2e634390679a..c2a495d13c02 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/animation/FontInterpolatorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/animation/FontInterpolatorTest.kt
@@ -64,6 +64,12 @@ class FontInterpolatorTest : SysuiTestCase() {
"'wght' 500, 'ital' 0.5, 'GRAD' 450",
interp.lerp(startFont, endFont, 0.5f, 0.5f),
)
+
+ // Ensure axes rounded correctly to nearest step
+ assertSameAxes(
+ "'wght' 490, 'ital' 0.5, 'GRAD' 446",
+ interp.lerp(startFont, endFont, 0.492f, 0.492f),
+ )
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/composable/BouncerContentTest.kt b/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/composable/BouncerContentTest.kt
index 1320223cabf3..4e08596adc21 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/composable/BouncerContentTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/bouncer/ui/composable/BouncerContentTest.kt
@@ -33,7 +33,7 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
import com.android.systemui.bouncer.ui.BouncerDialogFactory
-import com.android.systemui.bouncer.ui.viewmodel.bouncerSceneContentViewModelFactory
+import com.android.systemui.bouncer.ui.viewmodel.bouncerOverlayContentViewModelFactory
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.lifecycle.rememberViewModel
@@ -98,9 +98,9 @@ class BouncerContentTest : SysuiTestCase() {
BouncerContent(
viewModel =
rememberViewModel("test") {
- kosmos.bouncerSceneContentViewModelFactory.create()
+ kosmos.bouncerOverlayContentViewModelFactory.create()
},
- layout = BouncerSceneLayout.BESIDE_USER_SWITCHER,
+ layout = BouncerOverlayLayout.BESIDE_USER_SWITCHER,
modifier = Modifier.fillMaxSize().testTag("BouncerContent"),
dialogFactory = bouncerDialogFactory,
)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/animation/ColorSchemeTransitionTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/animation/ColorSchemeTransitionTest.kt
index 4d0605fd5190..90a8ad5d0eac 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/animation/ColorSchemeTransitionTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/animation/ColorSchemeTransitionTest.kt
@@ -18,9 +18,12 @@ package com.android.systemui.media.controls.ui.animation
import android.animation.ValueAnimator
import android.graphics.Color
+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.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.media.controls.ui.view.GutsViewHolder
import com.android.systemui.media.controls.ui.view.MediaViewHolder
@@ -33,6 +36,7 @@ import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyInt
import org.mockito.Mock
import org.mockito.Mockito.never
import org.mockito.Mockito.times
@@ -49,7 +53,9 @@ private const val TARGET_COLOR = Color.BLUE
class ColorSchemeTransitionTest : SysuiTestCase() {
private interface ExtractCB : (ColorScheme) -> Int
+
private interface ApplyCB : (Int) -> Unit
+
private lateinit var colorTransition: AnimatingColorTransition
private lateinit var colorSchemeTransition: ColorSchemeTransition
@@ -79,7 +85,7 @@ class ColorSchemeTransitionTest : SysuiTestCase() {
mediaViewHolder,
multiRippleController,
turbulenceNoiseController,
- animatingColorTransitionFactory
+ animatingColorTransitionFactory,
)
colorTransition =
@@ -154,10 +160,21 @@ class ColorSchemeTransitionTest : SysuiTestCase() {
verify(applyColor).invoke(expectedColor)
}
+ @DisableFlags(Flags.FLAG_MEDIA_CONTROLS_A11Y_COLORS)
@Test
- fun testColorSchemeTransition_update() {
+ fun testColorSchemeTransition_update_legacy() {
colorSchemeTransition.updateColorScheme(colorScheme)
verify(mockAnimatingTransition, times(8)).updateColorScheme(colorScheme)
verify(gutsViewHolder).colorScheme = colorScheme
}
+
+ @EnableFlags(Flags.FLAG_MEDIA_CONTROLS_A11Y_COLORS)
+ @Test
+ fun testColorSchemeTransition_update() {
+ colorSchemeTransition.updateColorScheme(colorScheme)
+ verify(mockAnimatingTransition, times(3)).updateColorScheme(colorScheme)
+ verify(gutsViewHolder).setColors(colorScheme)
+ verify(multiRippleController).updateColor(anyInt())
+ verify(turbulenceNoiseController).updateNoiseColor(anyInt())
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerTest.kt
index aaf5559290df..58bae308bcdf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaCarouselControllerTest.kt
@@ -881,8 +881,15 @@ class MediaCarouselControllerTest(flags: FlagsParameterization) : SysuiTestCase(
var updatedVisibility = false
mediaCarouselController.updateHostVisibility = { updatedVisibility = true }
mediaCarouselController.mediaCarousel = mediaCarousel
+ kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "")
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
+ runCurrent()
val job = mediaCarouselController.listenForAnyStateToGoneKeyguardTransition(this)
+
+ kosmos.sceneInteractor.changeScene(Scenes.Gone, "")
kosmos.setSceneTransition(Idle(Scenes.Gone))
verify(mediaCarousel).visibility = View.VISIBLE
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManagerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManagerTest.kt
index 6ca4ae2d2259..14b14126b7f6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManagerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/ui/controller/MediaHierarchyManagerTest.kt
@@ -17,6 +17,7 @@
package com.android.systemui.media.controls.ui.controller
import android.graphics.Rect
+import android.platform.test.annotations.EnableFlags
import android.provider.Settings
import android.testing.TestableLooper
import android.view.ViewGroup
@@ -36,7 +37,6 @@ import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.keyguard.WakefulnessLifecycle
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
-import com.android.systemui.keyguard.data.repository.keyguardRepository
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.kosmos.testScope
@@ -50,6 +50,7 @@ import com.android.systemui.res.R
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.statusbar.StatusBarState
import com.android.systemui.statusbar.SysuiStatusBarStateController
+import com.android.systemui.statusbar.featurepods.popups.StatusBarPopupChips
import com.android.systemui.statusbar.phone.KeyguardBypassController
import com.android.systemui.statusbar.policy.FakeConfigurationController
import com.android.systemui.statusbar.policy.KeyguardStateController
@@ -581,6 +582,36 @@ class MediaHierarchyManagerTest : SysuiTestCase() {
}
@Test
+ @EnableFlags(StatusBarPopupChips.FLAG_NAME)
+ fun testStatusBarPopupLocation() =
+ testScope.runTest {
+ mediaHierarchyManager.isMediaControlPopupShowing = true
+ runCurrent()
+
+ verify(mediaCarouselController)
+ .onDesiredLocationChanged(
+ eq(MediaHierarchyManager.LOCATION_STATUS_BAR_POPUP),
+ nullable(),
+ eq(false),
+ anyLong(),
+ anyLong(),
+ )
+ clearInvocations(mediaCarouselController)
+
+ mediaHierarchyManager.isMediaControlPopupShowing = false
+ runCurrent()
+
+ verify(mediaCarouselController)
+ .onDesiredLocationChanged(
+ eq(MediaHierarchyManager.LOCATION_QQS),
+ any<MediaHostState>(),
+ eq(false),
+ anyLong(),
+ anyLong(),
+ )
+ }
+
+ @Test
fun testCommunalLocationVisibilityWithShadeShowing() =
testScope.runTest {
whenever(mediaDataManager.hasActiveMediaOrRecommendation()).thenReturn(true)
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 cfe34f446f36..a7464e646410 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
@@ -39,6 +39,7 @@ import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
+import dagger.Lazy
import kotlin.test.assertTrue
import kotlinx.coroutines.Job
import org.junit.After
@@ -96,8 +97,7 @@ class BluetoothTileTest(flags: FlagsParameterization) : SysuiTestCase() {
qsLogger,
bluetoothController,
featureFlags,
- bluetoothDetailsContentViewModel,
- )
+ ) { bluetoothDetailsContentViewModel }
tile.initialize()
testableLooper.processAllMessages()
@@ -308,7 +308,7 @@ class BluetoothTileTest(flags: FlagsParameterization) : SysuiTestCase() {
qsLogger: QSLogger,
bluetoothController: BluetoothController,
featureFlags: FeatureFlagsClassic,
- bluetoothDetailsContentViewModel: BluetoothDetailsContentViewModel,
+ lazyBluetoothDetailsContentViewModel: Lazy<BluetoothDetailsContentViewModel>,
) :
BluetoothTile(
qsHost,
@@ -322,7 +322,7 @@ class BluetoothTileTest(flags: FlagsParameterization) : SysuiTestCase() {
qsLogger,
bluetoothController,
featureFlags,
- bluetoothDetailsContentViewModel,
+ lazyBluetoothDetailsContentViewModel,
) {
var restrictionChecked: String? = null
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilderTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilderTest.java
index e8b50d580c33..81213caaa5f4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilderTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilderTest.java
@@ -130,7 +130,7 @@ public class ShadeListBuilderTest extends SysuiTestCase {
private CollectionReadyForBuildListener mReadyForBuildListener;
private List<NotificationEntryBuilder> mPendingSet = new ArrayList<>();
private List<NotificationEntry> mEntrySet = new ArrayList<>();
- private List<ListEntry> mBuiltList = new ArrayList<>();
+ private List<PipelineEntry> mBuiltList = new ArrayList<>();
private TestableStabilityManager mStabilityManager;
private TestableNotifFilter mFinalizeFilter;
@@ -723,26 +723,26 @@ public class ShadeListBuilderTest extends SysuiTestCase {
@Test
public void testNotifSectionsChildrenUpdated() {
- ArrayList<ListEntry> pkg1Entries = new ArrayList<>();
- ArrayList<ListEntry> pkg2Entries = new ArrayList<>();
- ArrayList<ListEntry> pkg3Entries = new ArrayList<>();
+ ArrayList<PipelineEntry> pkg1Entries = new ArrayList<>();
+ ArrayList<PipelineEntry> pkg2Entries = new ArrayList<>();
+ ArrayList<PipelineEntry> pkg3Entries = new ArrayList<>();
final NotifSectioner pkg1Sectioner = spy(new PackageSectioner(PACKAGE_1) {
@Override
- public void onEntriesUpdated(List<ListEntry> entries) {
+ public void onEntriesUpdated(List<PipelineEntry> entries) {
super.onEntriesUpdated(entries);
pkg1Entries.addAll(entries);
}
});
final NotifSectioner pkg2Sectioner = spy(new PackageSectioner(PACKAGE_2) {
@Override
- public void onEntriesUpdated(List<ListEntry> entries) {
+ public void onEntriesUpdated(List<PipelineEntry> entries) {
super.onEntriesUpdated(entries);
pkg2Entries.addAll(entries);
}
});
final NotifSectioner pkg3Sectioner = spy(new PackageSectioner(PACKAGE_3) {
@Override
- public void onEntriesUpdated(List<ListEntry> entries) {
+ public void onEntriesUpdated(List<PipelineEntry> entries) {
super.onEntriesUpdated(entries);
pkg3Entries.addAll(entries);
}
@@ -2478,7 +2478,7 @@ public class ShadeListBuilderTest extends SysuiTestCase {
mBuiltList.size());
for (int i = 0; i < expectedEntries.length; i++) {
- ListEntry outEntry = mBuiltList.get(i);
+ PipelineEntry outEntry = mBuiltList.get(i);
ExpectedEntry expectedEntry = expectedEntries[i];
if (expectedEntry instanceof ExpectedNotif) {
@@ -2653,7 +2653,7 @@ public class ShadeListBuilderTest extends SysuiTestCase {
}
@Override
- public int compare(@NonNull ListEntry o1, @NonNull ListEntry o2) {
+ public int compare(@NonNull PipelineEntry o1, @NonNull PipelineEntry o2) {
boolean contains1 = mPreferredPackages.contains(
o1.getRepresentativeEntry().getSbn().getPackageName());
boolean contains2 = mPreferredPackages.contains(
@@ -2691,37 +2691,37 @@ public class ShadeListBuilderTest extends SysuiTestCase {
}
@Override
- public boolean isInSection(ListEntry entry) {
+ public boolean isInSection(PipelineEntry entry) {
return mPackages.contains(entry.getRepresentativeEntry().getSbn().getPackageName());
}
}
private static class RecordingOnBeforeTransformGroupsListener
implements OnBeforeTransformGroupsListener {
- List<ListEntry> mEntriesReceived;
+ List<PipelineEntry> mEntriesReceived;
@Override
- public void onBeforeTransformGroups(List<ListEntry> list) {
+ public void onBeforeTransformGroups(List<PipelineEntry> list) {
mEntriesReceived = new ArrayList<>(list);
}
}
private static class RecordingOnBeforeSortListener
implements OnBeforeSortListener {
- List<ListEntry> mEntriesReceived;
+ List<PipelineEntry> mEntriesReceived;
@Override
- public void onBeforeSort(List<ListEntry> list) {
+ public void onBeforeSort(List<PipelineEntry> list) {
mEntriesReceived = new ArrayList<>(list);
}
}
private static class RecordingOnBeforeRenderListener
implements OnBeforeRenderListListener {
- List<ListEntry> mEntriesReceived;
+ List<PipelineEntry> mEntriesReceived;
@Override
- public void onBeforeRenderList(List<ListEntry> list) {
+ public void onBeforeRenderList(List<PipelineEntry> list) {
mEntriesReceived = new ArrayList<>(list);
}
}
@@ -2800,7 +2800,7 @@ public class ShadeListBuilderTest extends SysuiTestCase {
}
@Override
- public boolean isEntryReorderingAllowed(@NonNull ListEntry entry) {
+ public boolean isEntryReorderingAllowed(@NonNull PipelineEntry entry) {
return mAllowEntryReodering;
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerWithScenesTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerWithScenesTest.kt
index 99b99ee1860b..0c0ef9d5edfe 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerWithScenesTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerWithScenesTest.kt
@@ -549,7 +549,7 @@ class NotificationGutsManagerWithScenesTest : SysuiTestCase() {
if (isVisible) {
Scenes.Lockscreen
} else {
- Scenes.Bouncer
+ Scenes.Communal
}
sceneInteractor.changeScene(key, "test")
sceneInteractor.setTransitionState(
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 10886760b521..ffb861db182c 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
@@ -113,7 +113,7 @@ import java.util.Map;
@SmallTest
// TODO(b/381263619) there are more changes and tweaks required to match the new bouncer/shade specs
// Disabling for now but it will be fixed before the flag is fully ramped up.
-@DisableFlags(Flags.FLAG_BOUNCER_UI_REVAMP)
+@DisableFlags({Flags.FLAG_BOUNCER_UI_REVAMP, Flags.FLAG_NOTIFICATION_SHADE_BLUR})
public class ScrimControllerTest extends SysuiTestCase {
@Rule public Expect mExpect = Expect.create();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
index dde6e2ee1866..0d99c0e8cab8 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
@@ -93,7 +93,7 @@ import com.android.systemui.navigationbar.TaskbarDelegate;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.ActivityStarter.OnDismissAction;
import com.android.systemui.scene.domain.interactor.SceneInteractor;
-import com.android.systemui.scene.shared.model.Scenes;
+import com.android.systemui.scene.shared.model.Overlays;
import com.android.systemui.shade.NotificationShadeWindowView;
import com.android.systemui.shade.ShadeController;
import com.android.systemui.shade.ShadeExpansionChangeEvent;
@@ -927,7 +927,7 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
@EnableSceneContainer
public void showPrimaryBouncer() {
mStatusBarKeyguardViewManager.showPrimaryBouncer(false);
- verify(mSceneInteractor).changeScene(eq(Scenes.Bouncer), anyString());
+ verify(mSceneInteractor).showOverlay(eq(Overlays.Bouncer), anyString());
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/unfold/UnfoldLatencyTrackerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/unfold/UnfoldLatencyTrackerTest.kt
index a1122c3cbcd2..a553b176c34a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/unfold/UnfoldLatencyTrackerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/unfold/UnfoldLatencyTrackerTest.kt
@@ -18,10 +18,12 @@ package com.android.systemui.unfold
import android.hardware.devicestate.DeviceStateManager
import android.hardware.devicestate.DeviceStateManager.FoldStateListener
+import android.platform.test.annotations.DisableFlags
import android.provider.Settings
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.util.LatencyTracker
+import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.foldedDeviceStateList
import com.android.systemui.halfFoldedDeviceState
@@ -46,6 +48,7 @@ import org.mockito.kotlin.whenever
@RunWith(AndroidJUnit4::class)
@SmallTest
+@DisableFlags(Flags.FLAG_UNFOLD_LATENCY_TRACKING_FIX)
class UnfoldLatencyTrackerTest : SysuiTestCase() {
@Mock lateinit var latencyTracker: LatencyTracker
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
index a38d71b178e9..68d84ecaf4b1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/wmshell/BubblesTest.java
@@ -25,6 +25,7 @@ import static android.service.notification.NotificationListenerService.NOTIFICAT
import static android.service.notification.NotificationListenerService.REASON_APP_CANCEL;
import static android.service.notification.NotificationListenerService.REASON_GROUP_SUMMARY_CANCELED;
import static android.service.notification.NotificationListenerService.REASON_PACKAGE_BANNED;
+import static android.service.notification.NotificationListenerService.REASON_PACKAGE_CHANGED;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.server.notification.Flags.FLAG_SCREENSHARE_NOTIFICATION_HIDING;
@@ -1126,6 +1127,18 @@ public class BubblesTest extends SysuiTestCase {
}
@Test
+ public void testNotifsPackageChanged_entryListenerRemove() {
+ mEntryListener.onEntryAdded(mRow);
+ mBubbleController.updateBubble(mBubbleEntry);
+
+ assertTrue(mBubbleController.hasBubbles());
+
+ // Removes the notification
+ mEntryListener.onEntryRemoved(mRow, REASON_PACKAGE_CHANGED);
+ assertFalse(mBubbleController.hasBubbles());
+ }
+
+ @Test
public void removeBubble_intercepted() {
mEntryListener.onEntryAdded(mRow);
mBubbleController.updateBubble(mBubbleEntry);
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelKosmos.kt
index 3bfd95816cf0..4d1c271d6a41 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/bouncer/ui/viewmodel/BouncerViewModelKosmos.kt
@@ -34,9 +34,7 @@ import com.android.systemui.user.domain.interactor.selectedUserInteractor
import com.android.systemui.user.ui.viewmodel.userSwitcherViewModel
import kotlinx.coroutines.flow.StateFlow
-val Kosmos.bouncerUserActionsViewModel by Fixture {
- BouncerUserActionsViewModel(bouncerInteractor = bouncerInteractor)
-}
+val Kosmos.bouncerUserActionsViewModel by Fixture { BouncerUserActionsViewModel() }
val Kosmos.bouncerUserActionsViewModelFactory by Fixture {
object : BouncerUserActionsViewModel.Factory {
@@ -46,8 +44,8 @@ val Kosmos.bouncerUserActionsViewModelFactory by Fixture {
}
}
-val Kosmos.bouncerSceneContentViewModel by Fixture {
- BouncerSceneContentViewModel(
+val Kosmos.bouncerOverlayContentViewModel by Fixture {
+ BouncerOverlayContentViewModel(
applicationContext = applicationContext,
bouncerInteractor = bouncerInteractor,
authenticationInteractor = authenticationInteractor,
@@ -65,10 +63,10 @@ val Kosmos.bouncerSceneContentViewModel by Fixture {
)
}
-val Kosmos.bouncerSceneContentViewModelFactory by Fixture {
- object : BouncerSceneContentViewModel.Factory {
- override fun create(): BouncerSceneContentViewModel {
- return bouncerSceneContentViewModel
+val Kosmos.bouncerOverlayContentViewModelFactory by Fixture {
+ object : BouncerOverlayContentViewModel.Factory {
+ override fun create(): BouncerOverlayContentViewModel {
+ return bouncerOverlayContentViewModel
}
}
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt
index f0350acd83ca..3bd8729ab173 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt
@@ -32,7 +32,6 @@ var Kosmos.sceneKeys by Fixture {
Scenes.QuickSettings,
Scenes.Shade,
Scenes.Lockscreen,
- Scenes.Bouncer,
Scenes.Gone,
Scenes.Communal,
Scenes.Dream,
@@ -42,7 +41,7 @@ var Kosmos.sceneKeys by Fixture {
val Kosmos.initialSceneKey by Fixture { Scenes.Lockscreen }
var Kosmos.overlayKeys by Fixture {
- listOf(Overlays.NotificationsShade, Overlays.QuickSettingsShade)
+ listOf(Overlays.NotificationsShade, Overlays.QuickSettingsShade, Overlays.Bouncer)
}
val Kosmos.fakeOverlaysByKeys by Fixture { overlayKeys.associateWith { FakeOverlay(it) } }
@@ -62,7 +61,6 @@ var Kosmos.sceneContainerConfig by Fixture {
Scenes.Dream to 2,
Scenes.Shade to 3,
Scenes.QuickSettings to 4,
- Scenes.Bouncer to 5,
)
SceneContainerConfig(
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryUtil.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryUtil.kt
index c95b2dcb08b6..025608a87eff 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryUtil.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/data/repository/SceneContainerRepositoryUtil.kt
@@ -17,6 +17,7 @@
package com.android.systemui.scene.data.repository
import com.android.compose.animation.scene.ObservableTransitionState
+import com.android.compose.animation.scene.OverlayKey
import com.android.compose.animation.scene.SceneKey
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
@@ -38,7 +39,7 @@ suspend fun Kosmos.setTransition(
stateTransition: TransitionStep? = null,
fillInStateSteps: Boolean = true,
scope: TestScope = testScope,
- repository: SceneContainerRepository = sceneContainerRepository
+ repository: SceneContainerRepository = sceneContainerRepository,
) {
var state: TransitionStep? = stateTransition
if (SceneContainerFlag.isEnabled) {
@@ -61,7 +62,7 @@ suspend fun Kosmos.setTransition(
fun Kosmos.setSceneTransition(
transition: ObservableTransitionState,
scope: TestScope = testScope,
- repository: SceneContainerRepository = sceneContainerRepository
+ repository: SceneContainerRepository = sceneContainerRepository,
) {
repository.setTransitionState(mutableTransitionState)
mutableTransitionState.value = transition
@@ -76,7 +77,7 @@ fun Transition(
isInitiatedByUserInput: Boolean = false,
isUserInputOngoing: Flow<Boolean> = flowOf(false),
previewProgress: Flow<Float> = flowOf(0f),
- isInPreviewStage: Flow<Boolean> = flowOf(false)
+ isInPreviewStage: Flow<Boolean> = flowOf(false),
): ObservableTransitionState.Transition {
return ObservableTransitionState.Transition(
fromScene = from,
@@ -86,17 +87,64 @@ fun Transition(
isInitiatedByUserInput = isInitiatedByUserInput,
isUserInputOngoing = isUserInputOngoing,
previewProgress = previewProgress,
- isInPreviewStage = isInPreviewStage
+ isInPreviewStage = isInPreviewStage,
)
}
-fun Idle(currentScene: SceneKey): ObservableTransitionState.Idle {
- return ObservableTransitionState.Idle(currentScene)
+fun ShowOverlay(
+ overlay: OverlayKey,
+ fromScene: SceneKey,
+ currentOverlays: Flow<Set<OverlayKey>> = flowOf(setOf(overlay)),
+ progress: Flow<Float> = flowOf(0f),
+ isInitiatedByUserInput: Boolean = false,
+ isUserInputOngoing: Flow<Boolean> = flowOf(false),
+ previewProgress: Flow<Float> = flowOf(0f),
+ isInPreviewStage: Flow<Boolean> = flowOf(false),
+): ObservableTransitionState.Transition {
+ return ObservableTransitionState.Transition.showOverlay(
+ overlay = overlay,
+ fromScene = fromScene,
+ currentOverlays = currentOverlays,
+ progress = progress,
+ isInitiatedByUserInput = isInitiatedByUserInput,
+ isUserInputOngoing = isUserInputOngoing,
+ previewProgress = previewProgress,
+ isInPreviewStage = isInPreviewStage,
+ )
+}
+
+fun HideOverlay(
+ overlay: OverlayKey,
+ toScene: SceneKey,
+ currentOverlays: Flow<Set<OverlayKey>> = flowOf(setOf(overlay)),
+ progress: Flow<Float> = flowOf(0f),
+ isInitiatedByUserInput: Boolean = false,
+ isUserInputOngoing: Flow<Boolean> = flowOf(false),
+ previewProgress: Flow<Float> = flowOf(0f),
+ isInPreviewStage: Flow<Boolean> = flowOf(false),
+): ObservableTransitionState.Transition {
+ return ObservableTransitionState.Transition.hideOverlay(
+ overlay = overlay,
+ toScene = toScene,
+ currentOverlays = currentOverlays,
+ progress = progress,
+ isInitiatedByUserInput = isInitiatedByUserInput,
+ isUserInputOngoing = isUserInputOngoing,
+ previewProgress = previewProgress,
+ isInPreviewStage = isInPreviewStage,
+ )
+}
+
+fun Idle(
+ currentScene: SceneKey,
+ currentOverlays: Set<OverlayKey> = emptySet(),
+): ObservableTransitionState.Idle {
+ return ObservableTransitionState.Idle(currentScene, currentOverlays)
}
private fun getStateWithUndefined(
sceneTransition: ObservableTransitionState,
- state: TransitionStep
+ state: TransitionStep,
): TransitionStep {
return when (sceneTransition) {
is ObservableTransitionState.Idle -> {
@@ -109,7 +157,7 @@ private fun getStateWithUndefined(
state.to
},
value = state.value,
- transitionState = state.transitionState
+ transitionState = state.transitionState,
)
}
is ObservableTransitionState.Transition -> {
@@ -127,7 +175,7 @@ private fun getStateWithUndefined(
state.from
},
value = state.value,
- transitionState = state.transitionState
+ transitionState = state.transitionState,
)
}
else -> state
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeSceneDataSource.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeSceneDataSource.kt
index f9917ac680e0..66a190c0bb99 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeSceneDataSource.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeSceneDataSource.kt
@@ -115,8 +115,14 @@ class FakeSceneDataSource(initialSceneKey: SceneKey, val testScope: TestScope) :
* If [force] is `true`, there will be no check that [isPaused] is true.
*
* If [expectedScene] is provided, will assert that it's indeed the latest called.
+ *
+ * If [expectedOverlays] is provided, will assert they are indeed present.
*/
- fun unpause(force: Boolean = false, expectedScene: SceneKey? = null) {
+ fun unpause(
+ force: Boolean = false,
+ expectedScene: SceneKey? = null,
+ expectedOverlays: Set<OverlayKey>? = null,
+ ) {
check(force || _isPaused) { "Can't unpause what's already not paused!" }
_isPaused = false
@@ -128,9 +134,12 @@ class FakeSceneDataSource(initialSceneKey: SceneKey, val testScope: TestScope) :
check(expectedScene == null || currentScene.value == expectedScene) {
"""
Unexpected scene while unpausing.
- Expected $expectedScene but was $currentScene.
+ Expected $expectedScene but was ${currentScene.value}.
"""
.trimIndent()
}
+ check(expectedOverlays == null || expectedOverlays == currentOverlays.value) {
+ "Expected $expectedOverlays, but instead found overlays ${currentOverlays.value}."
+ }
}
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java
index 562ac0c15a0b..804ec9f29926 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java
@@ -56,7 +56,7 @@ public class NotificationEntryBuilder {
private StatusBarNotification mSbn = null;
/* ListEntry properties */
- private GroupEntry mParent;
+ private PipelineEntry mParent;
private NotifSection mNotifSection;
/* If set, use this creation time instead of mClock.uptimeMillis */
@@ -91,7 +91,7 @@ public class NotificationEntryBuilder {
}
/** Update an the parent on an existing entry */
- public static void setNewParent(NotificationEntry entry, GroupEntry parent) {
+ public static void setNewParent(NotificationEntry entry, PipelineEntry parent) {
entry.setParent(parent);
}
@@ -135,7 +135,7 @@ public class NotificationEntryBuilder {
/**
* Sets the parent.
*/
- public NotificationEntryBuilder setParent(@Nullable GroupEntry parent) {
+ public NotificationEntryBuilder setParent(@Nullable PipelineEntry parent) {
mParent = parent;
return this;
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/user/domain/interactor/UserLockedInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/user/domain/interactor/UserLockedInteractorKosmos.kt
index fd955089cdc7..933c351679a4 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/user/domain/interactor/UserLockedInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/user/domain/interactor/UserLockedInteractorKosmos.kt
@@ -17,7 +17,10 @@
package com.android.systemui.user.domain.interactor
import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.user.data.repository.userRepository
val Kosmos.userLockedInteractor by
- Kosmos.Fixture { UserLockedInteractor(userRepository = userRepository) }
+ Kosmos.Fixture {
+ UserLockedInteractor(backgroundDispatcher = testDispatcher, userRepository = userRepository)
+ }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelKosmos.kt
index 9f3150f7366a..919d36b3dec1 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/ringer/ui/viewmodel/VolumeDialogRingerDrawerViewModelKosmos.kt
@@ -17,6 +17,7 @@
package com.android.systemui.volume.dialog.ringer.ui.viewmodel
import android.content.applicationContext
+import com.android.internal.logging.uiEventLogger
import com.android.systemui.haptics.vibratorHelper
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
@@ -41,6 +42,7 @@ val Kosmos.volumeDialogRingerDrawerViewModel by
volumeDialogLogger = volumeDialogLogger,
visibilityInteractor = volumeDialogVisibilityInteractor,
configurationController = configurationController,
+ uiEventLogger = uiEventLogger,
systemClock = fakeSystemClock,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/settings/ui/viewmodel/VolumeDialogSettingsButtonViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/settings/ui/viewmodel/VolumeDialogSettingsButtonViewModelKosmos.kt
index 0ae3b037b50a..a17611b998c0 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/settings/ui/viewmodel/VolumeDialogSettingsButtonViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/settings/ui/viewmodel/VolumeDialogSettingsButtonViewModelKosmos.kt
@@ -17,6 +17,7 @@
package com.android.systemui.volume.dialog.settings.ui.viewmodel
import android.content.applicationContext
+import com.android.internal.logging.uiEventLogger
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testScope
@@ -33,5 +34,6 @@ val Kosmos.volumeDialogSettingsButtonViewModel by
mediaOutputInteractor,
mediaDeviceSessionInteractor,
volumeDialogSettingsButtonInteractor,
+ uiEventLogger,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModelKosmos.kt
index 90bbb28ff519..c9396f5ccde9 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/volume/dialog/sliders/ui/viewmodel/VolumeDialogSliderViewModelKosmos.kt
@@ -16,6 +16,7 @@
package com.android.systemui.volume.dialog.sliders.ui.viewmodel
+import com.android.internal.logging.uiEventLogger
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.util.time.systemClock
@@ -35,6 +36,7 @@ val Kosmos.volumeDialogSliderViewModel by
coroutineScope = applicationCoroutineScope,
volumeDialogSliderIconProvider = volumeDialogSliderIconProvider,
systemClock = systemClock,
+ uiEventLogger = uiEventLogger,
logger = volumeDialogLogger,
)
}
diff --git a/ravenwood/Android.bp b/ravenwood/Android.bp
index 65550f2b4273..ccbc46fdb03b 100644
--- a/ravenwood/Android.bp
+++ b/ravenwood/Android.bp
@@ -121,6 +121,7 @@ java_library {
name: "ravenwood-helper-framework-runtime",
srcs: [
"runtime-helper-src/framework/**/*.java",
+ ":framework-graphics-srcs",
],
static_libs: [
"ravenwood-runtime-common",
@@ -278,6 +279,7 @@ cc_library_host_shared {
cc_library_host_shared {
name: "libravenwood_runtime",
defaults: ["ravenwood_jni_defaults"],
+ header_libs: ["libicuuc_headers"],
srcs: [
"runtime-jni/ravenwood_runtime.cpp",
"runtime-jni/ravenwood_os_constants.cpp",
@@ -372,6 +374,13 @@ platform_compat_config {
visibility: ["//visibility:private"],
}
+java_library {
+ name: "ext-ravenwood",
+ installable: false,
+ static_libs: ["ext"],
+ visibility: ["//visibility:private"],
+}
+
filegroup {
name: "ravenwood-data",
device_common_srcs: [
@@ -637,6 +646,7 @@ android_ravenwood_libgroup {
libs: [
"100-framework-minus-apex.ravenwood",
"200-kxml2-android",
+ "ext-ravenwood",
"ravenwood-runtime-common-ravenwood",
diff --git a/ravenwood/Framework.bp b/ravenwood/Framework.bp
index 71496b0d5766..e36677189e02 100644
--- a/ravenwood/Framework.bp
+++ b/ravenwood/Framework.bp
@@ -419,11 +419,13 @@ java_genrule {
"--out-impl-jar $(location ravenwood.jar) " +
"--in-jar $(location :framework-graphics.impl{.jar}) " +
- "--policy-override-file $(location :ravenwood-common-policies) ",
+ "--policy-override-file $(location :ravenwood-common-policies) " +
+ "--policy-override-file $(location :framework-graphics-ravenwood-policies) ",
srcs: [
":framework-graphics.impl{.jar}",
":ravenwood-common-policies",
+ ":framework-graphics-ravenwood-policies",
":ravenwood-standard-options",
],
out: [
diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodContext.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodContext.java
index a3326337d485..9e6b12f60add 100644
--- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodContext.java
+++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodContext.java
@@ -230,6 +230,16 @@ public class RavenwoodContext extends RavenwoodBaseContext {
return mAppContext;
}
+ @Override
+ public boolean isRestricted() {
+ return false;
+ }
+
+ @Override
+ public boolean canLoadUnsafeResources() {
+ return true;
+ }
+
/**
* Wrap the given {@link Supplier} to become memoized.
*
diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodNativeLoader.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodNativeLoader.java
index a208d6dce2ce..7e935d0451ae 100644
--- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodNativeLoader.java
+++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodNativeLoader.java
@@ -48,6 +48,7 @@ public final class RavenwoodNativeLoader {
android.content.res.AssetManager.class,
android.content.res.StringBlock.class,
android.content.res.XmlBlock.class,
+ android.text.AndroidCharacter.class,
};
/**
@@ -61,15 +62,49 @@ public final class RavenwoodNativeLoader {
android.graphics.Path.class,
android.graphics.Color.class,
android.graphics.ColorSpace.class,
+ android.graphics.Bitmap.class,
+ android.graphics.BitmapFactory.class,
+ android.graphics.BitmapRegionDecoder.class,
+ android.graphics.Camera.class,
+ android.graphics.Canvas.class,
+ android.graphics.CanvasProperty.class,
+ android.graphics.ColorFilter.class,
+ android.graphics.DrawFilter.class,
+ android.graphics.FontFamily.class,
+ android.graphics.Gainmap.class,
+ android.graphics.ImageDecoder.class,
+ android.graphics.MaskFilter.class,
+ android.graphics.NinePatch.class,
+ android.graphics.Paint.class,
+ android.graphics.PathEffect.class,
+ android.graphics.PathIterator.class,
+ android.graphics.PathMeasure.class,
+ android.graphics.Picture.class,
+ android.graphics.RecordingCanvas.class,
+ android.graphics.Region.class,
+ android.graphics.RenderNode.class,
+ android.graphics.Shader.class,
+ android.graphics.RenderEffect.class,
+ android.graphics.Typeface.class,
+ android.graphics.YuvImage.class,
+ android.graphics.fonts.Font.class,
+ android.graphics.fonts.FontFamily.class,
+ android.graphics.text.LineBreaker.class,
+ android.graphics.text.MeasuredText.class,
+ android.graphics.text.TextRunShaper.class,
+ android.graphics.text.GraphemeBreak.class,
+ android.util.PathParser.class,
};
/**
* Extra strings needed to pass to register_android_graphics_classes().
*
- * `android.graphics.Graphics` is not actually a class, so we just hardcode it here.
+ * Several entries are not actually a class, so we just hardcode them here.
*/
public final static String[] GRAPHICS_EXTRA_INIT_PARAMS = new String[] {
- "android.graphics.Graphics"
+ "android.graphics.Graphics",
+ "android.graphics.ByteBufferStreamAdaptor",
+ "android.graphics.CreateJavaOutputStreamAdaptor"
};
private RavenwoodNativeLoader() {
diff --git a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java
index ae88bb234e9d..f205d238c693 100644
--- a/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java
+++ b/ravenwood/junit-impl-src/android/platform/test/ravenwood/RavenwoodRuntimeEnvironmentController.java
@@ -43,6 +43,7 @@ import android.app.UiAutomation;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.res.Resources;
+import android.graphics.Typeface;
import android.icu.util.ULocale;
import android.os.Binder;
import android.os.Build;
@@ -246,6 +247,13 @@ public class RavenwoodRuntimeEnvironmentController {
// Do the basic set up for the android sysprops.
RavenwoodSystemProperties.initialize();
+ // Set ICU data file
+ String icuData = RavenwoodCommonUtils.getRavenwoodRuntimePath()
+ + "ravenwood-data/"
+ + RavenwoodRuntimeNative.getIcuDataName()
+ + ".dat";
+ RavenwoodRuntimeNative.setSystemProperty("ro.icu.data.path", icuData);
+
// Enable all log levels for native logging, until we'll have a way to change the native
// side log level at runtime.
// Do this after loading RAVENWOOD_NATIVE_RUNTIME_NAME (which backs Os.setenv()),
@@ -268,6 +276,11 @@ public class RavenwoodRuntimeEnvironmentController {
Objects.requireNonNull(Build.TYPE);
Objects.requireNonNull(Build.VERSION.SDK);
+ // Fonts can only be initialized once
+ Typeface.init();
+ Typeface.loadPreinstalledSystemFontMap();
+ Typeface.loadNativeSystemFonts();
+
System.setProperty(RAVENWOOD_VERSION_JAVA_SYSPROP, "1");
// This will let AndroidJUnit4 use the original runner.
System.setProperty("android.junit.runner",
diff --git a/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodJdkPatch.java b/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodJdkPatch.java
index 96aed4b3401d..d5a96ddc3a98 100644
--- a/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodJdkPatch.java
+++ b/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodJdkPatch.java
@@ -20,6 +20,7 @@ import com.android.ravenwood.common.JvmWorkaround;
import java.io.FileDescriptor;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.regex.Pattern;
/**
* Class to host APIs that exist in libcore, but not in standard JRE.
@@ -46,4 +47,22 @@ public class RavenwoodJdkPatch {
final var it = map.entrySet().iterator();
return it.hasNext() ? it.next() : null;
}
+
+ /**
+ * Implements Pattern.compile(String)
+ *
+ * ART always assumes UNICODE_CHARACTER_CLASS is set.
+ */
+ public static Pattern compilePattern(String regex) {
+ return Pattern.compile(regex, Pattern.UNICODE_CHARACTER_CLASS);
+ }
+
+ /**
+ * Implements Pattern.compile(String, int)
+ *
+ * ART always assumes UNICODE_CHARACTER_CLASS is set.
+ */
+ public static Pattern compilePattern(String regex, int flag) {
+ return Pattern.compile(regex, flag | Pattern.UNICODE_CHARACTER_CLASS);
+ }
}
diff --git a/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodRuntimeNative.java b/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodRuntimeNative.java
index acbcdf1926db..0d82a8691881 100644
--- a/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodRuntimeNative.java
+++ b/ravenwood/runtime-helper-src/libcore-fake/com/android/ravenwood/RavenwoodRuntimeNative.java
@@ -66,6 +66,8 @@ public class RavenwoodRuntimeNative {
public static native int gettid();
+ public static native String getIcuDataName();
+
public static long lseek(FileDescriptor fd, long offset, int whence) throws ErrnoException {
return nLseek(JvmWorkaround.getInstance().getFdInt(fd), offset, whence);
}
diff --git a/ravenwood/runtime-helper-src/libcore-fake/dalvik/system/CloseGuard.java b/ravenwood/runtime-helper-src/libcore-fake/dalvik/system/CloseGuard.java
new file mode 100644
index 000000000000..82bab64f22f3
--- /dev/null
+++ b/ravenwood/runtime-helper-src/libcore-fake/dalvik/system/CloseGuard.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 dalvik.system;
+
+/**
+ * A no-op copy of libcore/dalvik/src/main/java/dalvik/system/CloseGuard.java
+ */
+public final class CloseGuard {
+
+ /**
+ * Returns a CloseGuard instance. {@code #open(String)} can be used to set
+ * up the instance to warn on failure to close.
+ *
+ * @return {@link CloseGuard} instance.
+ *
+ * @hide
+ */
+ public static CloseGuard get() {
+ return new CloseGuard();
+ }
+
+ /**
+ * Enables/disables stack capture and tracking. A call stack is captured
+ * during open(), and open/close events are reported to the Tracker, only
+ * if enabled is true. If a stack trace was captured, the {@link
+ * #getReporter() reporter} is informed of unclosed resources; otherwise a
+ * one-line warning is logged.
+ *
+ * @param enabled whether stack capture and tracking is enabled.
+ *
+ * @hide
+ */
+ public static void setEnabled(boolean enabled) {
+ }
+
+ /**
+ * True if CloseGuard stack capture and tracking are enabled.
+ *
+ * @hide
+ */
+ public static boolean isEnabled() {
+ return false;
+ }
+
+ /**
+ * Used to replace default Reporter used to warn of CloseGuard
+ * violations when stack tracking is enabled. Must be non-null.
+ *
+ * @param rep replacement for default Reporter.
+ *
+ * @hide
+ */
+ public static void setReporter(Reporter rep) {
+ if (rep == null) {
+ throw new NullPointerException("reporter == null");
+ }
+ }
+
+ /**
+ * Returns non-null CloseGuard.Reporter.
+ *
+ * @return CloseGuard's Reporter.
+ *
+ * @hide
+ */
+ public static Reporter getReporter() {
+ return null;
+ }
+
+ /**
+ * Sets the {@link Tracker} that is notified when resources are allocated and released.
+ * The Tracker is invoked only if CloseGuard {@link #isEnabled()} held when {@link #open()}
+ * was called. A null argument disables tracking.
+ *
+ * <p>This is only intended for use by {@code dalvik.system.CloseGuardSupport} class and so
+ * MUST NOT be used for any other purposes.
+ *
+ * @hide
+ */
+ public static void setTracker(Tracker tracker) {
+ }
+
+ /**
+ * Returns {@link #setTracker(Tracker) last Tracker that was set}, or null to indicate
+ * there is none.
+ *
+ * <p>This is only intended for use by {@code dalvik.system.CloseGuardSupport} class and so
+ * MUST NOT be used for any other purposes.
+ *
+ * @hide
+ */
+ public static Tracker getTracker() {
+ return null;
+ }
+
+ private CloseGuard() {}
+
+ /**
+ * {@code open} initializes the instance with a warning that the caller
+ * should have explicitly called the {@code closer} method instead of
+ * relying on finalization.
+ *
+ * @param closer non-null name of explicit termination method. Printed by warnIfOpen.
+ * @throws NullPointerException if closer is null.
+ *
+ * @hide
+ */
+ public void open(String closer) {
+ openWithCallSite(closer, null /* callsite */);
+ }
+
+ /**
+ * Like {@link #open(String)}, but with explicit callsite string being passed in for better
+ * performance.
+ * <p>
+ * This only has better performance than {@link #open(String)} if {@link #isEnabled()} returns {@code true}, which
+ * usually shouldn't happen on release builds.
+ *
+ * @param closer Non-null name of explicit termination method. Printed by warnIfOpen.
+ * @param callsite Non-null string uniquely identifying the callsite.
+ *
+ * @hide
+ */
+ public void openWithCallSite(String closer, String callsite) {
+ }
+
+ // We keep either an allocation stack containing the closer String or, when
+ // in disabled state, just the closer String.
+ // We keep them in a single field only to minimize overhead.
+ private Object /* String or Throwable */ closerNameOrAllocationInfo;
+
+ /**
+ * Marks this CloseGuard instance as closed to avoid warnings on
+ * finalization.
+ *
+ * @hide
+ */
+ public void close() {
+ }
+
+ /**
+ * Logs a warning if the caller did not properly cleanup by calling an
+ * explicit close method before finalization. If CloseGuard was enabled
+ * when the CloseGuard was created, passes the stacktrace associated with
+ * the allocation to the current reporter. If it was not enabled, it just
+ * directly logs a brief message.
+ *
+ * @hide
+ */
+ public void warnIfOpen() {
+ }
+
+
+ /**
+ * Interface to allow customization of tracking behaviour.
+ *
+ * <p>This is only intended for use by {@code dalvik.system.CloseGuardSupport} class and so
+ * MUST NOT be used for any other purposes.
+ *
+ * @hide
+ */
+ public interface Tracker {
+ void open(Throwable allocationSite);
+ void close(Throwable allocationSite);
+ }
+
+ /**
+ * Interface to allow customization of reporting behavior.
+ * @hide
+ */
+ public interface Reporter {
+ /**
+ *
+ * @hide
+ */
+ void report(String message, Throwable allocationSite);
+
+ /**
+ *
+ * @hide
+ */
+ default void report(String message) {}
+ }
+}
diff --git a/ravenwood/runtime-helper-src/libcore-fake/libcore/io/IoBridge.java b/ravenwood/runtime-helper-src/libcore-fake/libcore/io/IoBridge.java
new file mode 100644
index 000000000000..2a1ee2542982
--- /dev/null
+++ b/ravenwood/runtime-helper-src/libcore-fake/libcore/io/IoBridge.java
@@ -0,0 +1,63 @@
+/*
+ * 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 libcore.io;
+
+import android.system.ErrnoException;
+import android.system.Os;
+import android.system.OsConstants;
+
+import java.io.FileDescriptor;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+public class IoBridge {
+
+ public static void closeAndSignalBlockedThreads(FileDescriptor fd) throws IOException {
+ if (fd == null) {
+ return;
+ }
+ try {
+ Os.close(fd);
+ } catch (ErrnoException errnoException) {
+ throw errnoException.rethrowAsIOException();
+ }
+ }
+
+ public static FileDescriptor open(String path, int flags) throws FileNotFoundException {
+ FileDescriptor fd = null;
+ try {
+ fd = Os.open(path, flags, 0666);
+ // Posix open(2) fails with EISDIR only if you ask for write permission.
+ // Java disallows reading directories too.f
+ if (OsConstants.S_ISDIR(Os.fstat(fd).st_mode)) {
+ throw new ErrnoException("open", OsConstants.EISDIR);
+ }
+ return fd;
+ } catch (ErrnoException errnoException) {
+ try {
+ if (fd != null) {
+ closeAndSignalBlockedThreads(fd);
+ }
+ } catch (IOException ignored) {
+ }
+ FileNotFoundException ex = new FileNotFoundException(path + ": "
+ + errnoException.getMessage());
+ ex.initCause(errnoException);
+ throw ex;
+ }
+ }
+}
diff --git a/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NativeAllocationRegistry.java b/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NativeAllocationRegistry.java
index ad86135de32e..cf1a5138cbc6 100644
--- a/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NativeAllocationRegistry.java
+++ b/ravenwood/runtime-helper-src/libcore-fake/libcore/util/NativeAllocationRegistry.java
@@ -35,6 +35,11 @@ public class NativeAllocationRegistry {
return new NativeAllocationRegistry(classLoader, freeFunction, size);
}
+ public static NativeAllocationRegistry createNonmalloced(
+ Class clazz, long freeFunction, long size) {
+ return new NativeAllocationRegistry(clazz.getClassLoader(), freeFunction, size);
+ }
+
public static NativeAllocationRegistry createMalloced(
ClassLoader classLoader, long freeFunction, long size) {
return new NativeAllocationRegistry(classLoader, freeFunction, size);
@@ -45,6 +50,11 @@ public class NativeAllocationRegistry {
return new NativeAllocationRegistry(classLoader, freeFunction, 0);
}
+ public static NativeAllocationRegistry createMalloced(
+ Class clazz, long freeFunction, long size) {
+ return new NativeAllocationRegistry(clazz.getClassLoader(), freeFunction, size);
+ }
+
public NativeAllocationRegistry(ClassLoader classLoader, long freeFunction, long size) {
if (size < 0) {
throw new IllegalArgumentException("Invalid native allocation size: " + size);
@@ -52,6 +62,37 @@ public class NativeAllocationRegistry {
mFreeFunction = freeFunction;
}
+ private class CleanerThunk implements Runnable {
+ private long nativePtr;
+
+ public CleanerThunk() {
+ nativePtr = 0;
+ }
+
+ public void setNativePtr(long ptr) {
+ nativePtr = ptr;
+ }
+
+ @Override
+ public void run() {
+ if (nativePtr != 0) {
+ applyFreeFunction(mFreeFunction, nativePtr);
+ }
+ }
+ }
+
+ private static class CleanableRunner implements Runnable {
+ private final Cleaner.Cleanable mCleanable;
+
+ public CleanableRunner(Cleaner.Cleanable cleanable) {
+ mCleanable = cleanable;
+ }
+
+ public void run() {
+ mCleanable.clean();
+ }
+ }
+
public Runnable registerNativeAllocation(Object referent, long nativePtr) {
if (referent == null) {
throw new IllegalArgumentException("referent is null");
@@ -60,13 +101,25 @@ public class NativeAllocationRegistry {
throw new IllegalArgumentException("nativePtr is null");
}
- final Runnable releaser = () -> {
- RavenwoodRuntimeNative.applyFreeFunction(mFreeFunction, nativePtr);
- };
- sCleaner.register(referent, releaser);
+ final CleanerThunk thunk;
+ final CleanableRunner result;
+ try {
+ thunk = new CleanerThunk();
+ final var cleanable = sCleaner.register(referent, thunk);
+ result = new CleanableRunner(cleanable);
+ } catch (VirtualMachineError vme /* probably OutOfMemoryError */) {
+ applyFreeFunction(mFreeFunction, nativePtr);
+ throw vme;
+ }
+ // Enable the cleaner only after we can no longer throw anything, including OOME.
+ thunk.setNativePtr(nativePtr);
// Ensure that cleaner doesn't get invoked before we enable it.
Reference.reachabilityFence(referent);
- return releaser;
+ return result;
+ }
+
+ public static void applyFreeFunction(long freeFunction, long nativePtr) {
+ RavenwoodRuntimeNative.applyFreeFunction(freeFunction, nativePtr);
}
}
diff --git a/ravenwood/runtime-jni/ravenwood_runtime.cpp b/ravenwood/runtime-jni/ravenwood_runtime.cpp
index 8d8ed7119e84..01ebdc953539 100644
--- a/ravenwood/runtime-jni/ravenwood_runtime.cpp
+++ b/ravenwood/runtime-jni/ravenwood_runtime.cpp
@@ -20,6 +20,7 @@
#include <sys/syscall.h>
#include <unistd.h>
#include <utils/misc.h>
+#include <unicode/utypes.h>
#include <string>
@@ -183,6 +184,10 @@ static jint Linux_gettid(JNIEnv* env, jobject) {
return syscall(__NR_gettid);
}
+static jstring getIcuDataName(JNIEnv* env, jclass clazz) {
+ return env->NewStringUTF(U_ICUDATA_NAME);
+}
+
// ---- Registration ----
extern void register_android_system_OsConstants(JNIEnv* env);
@@ -201,6 +206,7 @@ static const JNINativeMethod sMethods[] =
{ "setenv", "(Ljava/lang/String;Ljava/lang/String;Z)V", (void*)Linux_setenv },
{ "getpid", "()I", (void*)Linux_getpid },
{ "gettid", "()I", (void*)Linux_gettid },
+ { "getIcuDataName", "()Ljava/lang/String;", (void*)getIcuDataName },
};
extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) {
diff --git a/ravenwood/texts/ravenwood-annotation-allowed-classes.txt b/ravenwood/texts/ravenwood-annotation-allowed-classes.txt
index e202d0ecfa23..7462cc2f384a 100644
--- a/ravenwood/texts/ravenwood-annotation-allowed-classes.txt
+++ b/ravenwood/texts/ravenwood-annotation-allowed-classes.txt
@@ -259,6 +259,8 @@ android.database.sqlite.SQLiteClosable
android.database.sqlite.SQLiteException
android.text.TextUtils
+android.text.Html
+android.text.HtmlToSpannedConverter
android.accounts.Account
@@ -278,6 +280,10 @@ android.graphics.PointF
android.graphics.Rect
android.graphics.RectF
+android.graphics.fonts.SystemFonts
+
+android.graphics.text.LineBreakConfig
+
android.content.ContentProvider
android.app.ActivityManager
@@ -383,3 +389,228 @@ android.app.compat.*
com.android.server.compat.*
com.android.internal.compat.*
android.app.AppCompatCallbacks
+android.graphics.AvoidXfermode
+android.graphics.BLASTBufferQueue
+android.graphics.BaseCanvas
+android.graphics.BaseRecordingCanvas
+android.graphics.Bitmap
+android.graphics.BitmapFactory
+android.graphics.BitmapRegionDecoder
+android.graphics.BitmapShader
+android.graphics.BlendMode
+android.graphics.BlendModeColorFilter
+android.graphics.BlurMaskFilter
+android.graphics.Camera
+android.graphics.Canvas
+android.graphics.CanvasProperty
+android.graphics.ColorFilter
+android.graphics.ColorMatrix
+android.graphics.ColorMatrixColorFilter
+android.graphics.Compatibility
+android.graphics.ComposePathEffect
+android.graphics.ComposeShader
+android.graphics.CornerPathEffect
+android.graphics.DashPathEffect
+android.graphics.DiscretePathEffect
+android.graphics.DrawFilter
+android.graphics.EmbossMaskFilter
+android.graphics.FontFamily
+android.graphics.FontListParser
+android.graphics.ForceDarkType
+android.graphics.FrameInfo
+android.graphics.Gainmap
+android.graphics.GraphicBuffer
+android.graphics.GraphicsProtos
+android.graphics.GraphicsStatsService
+android.graphics.HardwareBufferRenderer
+android.graphics.HardwareRenderer
+android.graphics.HardwareRendererObserver
+android.graphics.ImageDecoder
+android.graphics.ImageFormat
+android.graphics.LayerRasterizer
+android.graphics.LeakyTypefaceStorage
+android.graphics.LightingColorFilter
+android.graphics.LinearGradient
+android.graphics.MaskFilter
+android.graphics.Mesh
+android.graphics.MeshSpecification
+android.graphics.Movie
+android.graphics.NinePatch
+android.graphics.Paint
+android.graphics.PaintFlagsDrawFilter
+android.graphics.PathDashPathEffect
+android.graphics.PathEffect
+android.graphics.PathIterator
+android.graphics.PathMeasure
+android.graphics.Picture
+android.graphics.PixelXorXfermode
+android.graphics.PorterDuff
+android.graphics.PorterDuffColorFilter
+android.graphics.PorterDuffXfermode
+android.graphics.PostProcessor
+android.graphics.RadialGradient
+android.graphics.Rasterizer
+android.graphics.RecordingCanvas
+android.graphics.Region
+android.graphics.RegionIterator
+android.graphics.RenderEffect
+android.graphics.RenderNode
+android.graphics.RuntimeColorFilter
+android.graphics.RuntimeShader
+android.graphics.RuntimeXfermode
+android.graphics.Shader
+android.graphics.SumPathEffect
+android.graphics.SurfaceTexture
+android.graphics.SweepGradient
+android.graphics.TableMaskFilter
+android.graphics.TemporaryBuffer
+android.graphics.TextureLayer
+android.graphics.Typeface
+android.graphics.Xfermode
+android.graphics.YuvImage
+android.graphics.fonts.Font
+android.graphics.fonts.FontCustomizationParser
+android.graphics.fonts.FontFamily
+android.graphics.fonts.FontFamilyUpdateRequest
+android.graphics.fonts.FontFileUpdateRequest
+android.graphics.fonts.FontFileUtil
+android.graphics.fonts.FontStyle
+android.graphics.fonts.FontVariationAxis
+android.graphics.text.GraphemeBreak
+android.graphics.text.LineBreaker
+android.graphics.text.MeasuredText
+android.graphics.text.PositionedGlyphs
+android.graphics.text.TextRunShaper
+android.text.AlteredCharSequence
+android.text.AndroidBidi
+android.text.AndroidCharacter
+android.text.Annotation
+android.text.AutoGrowArray
+android.text.AutoText
+android.text.BidiFormatter
+android.text.BoringLayout
+android.text.CharSequenceCharacterIterator
+android.text.ClipboardManager
+android.text.DynamicLayout
+android.text.Editable
+android.text.Emoji
+android.text.EmojiConsistency
+android.text.FontConfig
+android.text.GetChars
+android.text.GraphemeClusterSegmentFinder
+android.text.GraphicsOperations
+android.text.Highlights
+android.text.Hyphenator
+android.text.InputFilter
+android.text.InputType
+android.text.Layout
+android.text.LoginFilter
+android.text.MeasuredParagraph
+android.text.NoCopySpan
+android.text.PackedIntVector
+android.text.PackedObjectVector
+android.text.ParcelableSpan
+android.text.PrecomputedText
+android.text.SegmentFinder
+android.text.Selection
+android.text.SpanColors
+android.text.SpanSet
+android.text.SpanWatcher
+android.text.Spannable
+android.text.SpannableString
+android.text.SpannableStringBuilder
+android.text.SpannableStringInternal
+android.text.Spanned
+android.text.SpannedString
+android.text.StaticLayout
+android.text.TextDirectionHeuristic
+android.text.TextDirectionHeuristics
+android.text.TextLine
+android.text.TextPaint
+android.text.TextShaper
+android.text.TextWatcher
+android.text.WordSegmentFinder
+android.text.format.DateFormat
+android.text.format.DateIntervalFormat
+android.text.format.DateTimeFormat
+android.text.format.DateUtils
+android.text.format.DateUtilsBridge
+android.text.format.Formatter
+android.text.format.RelativeDateTimeFormatter
+android.text.format.Time
+android.text.format.TimeFormatter
+android.text.format.TimeMigrationUtils
+android.text.method.AllCapsTransformationMethod
+android.text.method.ArrowKeyMovementMethod
+android.text.method.BaseKeyListener
+android.text.method.BaseMovementMethod
+android.text.method.CharacterPickerDialog
+android.text.method.DateKeyListener
+android.text.method.DateTimeKeyListener
+android.text.method.DialerKeyListener
+android.text.method.DigitsKeyListener
+android.text.method.HideReturnsTransformationMethod
+android.text.method.InsertModeTransformationMethod
+android.text.method.KeyListener
+android.text.method.LinkMovementMethod
+android.text.method.MetaKeyKeyListener
+android.text.method.MovementMethod
+android.text.method.MultiTapKeyListener
+android.text.method.NumberKeyListener
+android.text.method.OffsetMapping
+android.text.method.PasswordTransformationMethod
+android.text.method.QwertyKeyListener
+android.text.method.ReplacementTransformationMethod
+android.text.method.ScrollingMovementMethod
+android.text.method.SingleLineTransformationMethod
+android.text.method.TextKeyListener
+android.text.method.TimeKeyListener
+android.text.method.Touch
+android.text.method.TransformationMethod
+android.text.method.TransformationMethod2
+android.text.method.TranslationTransformationMethod
+android.text.method.WordIterator
+android.text.style.AbsoluteSizeSpan
+android.text.style.AccessibilityClickableSpan
+android.text.style.AccessibilityReplacementSpan
+android.text.style.AccessibilityURLSpan
+android.text.style.AlignmentSpan
+android.text.style.BackgroundColorSpan
+android.text.style.BulletSpan
+android.text.style.CharacterStyle
+android.text.style.ClickableSpan
+android.text.style.ForegroundColorSpan
+android.text.style.IconMarginSpan
+android.text.style.LeadingMarginSpan
+android.text.style.LineBackgroundSpan
+android.text.style.LineBreakConfigSpan
+android.text.style.LineHeightSpan
+android.text.style.LocaleSpan
+android.text.style.MaskFilterSpan
+android.text.style.MetricAffectingSpan
+android.text.style.NoWritingToolsSpan
+android.text.style.ParagraphStyle
+android.text.style.QuoteSpan
+android.text.style.RasterizerSpan
+android.text.style.RelativeSizeSpan
+android.text.style.ReplacementSpan
+android.text.style.ScaleXSpan
+android.text.style.SpanUtils
+android.text.style.SpellCheckSpan
+android.text.style.StrikethroughSpan
+android.text.style.StyleSpan
+android.text.style.SubscriptSpan
+android.text.style.SuggestionRangeSpan
+android.text.style.SuggestionSpan
+android.text.style.SuperscriptSpan
+android.text.style.TabStopSpan
+android.text.style.TextAppearanceSpan
+android.text.style.TtsSpan
+android.text.style.TypefaceSpan
+android.text.style.URLSpan
+android.text.style.UnderlineSpan
+android.text.style.UpdateAppearance
+android.text.style.UpdateLayout
+android.text.style.WrapTogetherSpan
+android.text.util.Rfc822Token
+android.text.util.Rfc822Tokenizer
diff --git a/ravenwood/texts/ravenwood-build.prop b/ravenwood/texts/ravenwood-build.prop
index 7cc4454a6e56..37c50f11f73f 100644
--- a/ravenwood/texts/ravenwood-build.prop
+++ b/ravenwood/texts/ravenwood-build.prop
@@ -8,7 +8,11 @@ ro.soc.manufacturer=Android
ro.soc.model=Ravenwood
ro.debuggable=1
-# The ones starting with "ro.product" or "ro.bild" will be copied to all "partitions" too.
+# For the graphics stack
+ro.hwui.max_texture_allocation_size=104857600
+persist.sys.locale=en-US
+
+# The ones starting with "ro.product" or "ro.build" will be copied to all "partitions" too.
# See RavenwoodSystemProperties.
ro.product.brand=Android
ro.product.device=Ravenwood
diff --git a/ravenwood/texts/ravenwood-common-policies.txt b/ravenwood/texts/ravenwood-common-policies.txt
index fd4ea6cf40c2..f0f4b8580f7d 100644
--- a/ravenwood/texts/ravenwood-common-policies.txt
+++ b/ravenwood/texts/ravenwood-common-policies.txt
@@ -21,3 +21,7 @@ class java.io.FileDescriptor # no-pta
method setInt$ @com.android.ravenwood.RavenwoodJdkPatch.setInt$
class java.util.LinkedHashMap # no-pta
method eldest @com.android.ravenwood.RavenwoodJdkPatch.eldest
+
+# Always set flag UNICODE_CHARACTER_CLASS when compiling regex
+class java.util.regex.Pattern keep
+ method compile @com.android.ravenwood.RavenwoodJdkPatch.compilePattern
diff --git a/ravenwood/texts/ravenwood-framework-policies.txt b/ravenwood/texts/ravenwood-framework-policies.txt
index fff9e6ad41d5..0695316543ae 100644
--- a/ravenwood/texts/ravenwood-framework-policies.txt
+++ b/ravenwood/texts/ravenwood-framework-policies.txt
@@ -63,3 +63,22 @@ class android.text.ClipboardManager keep # no-pta
# Just enough to allow ResourcesManager to run
class android.hardware.display.DisplayManagerGlobal keep # no-pta
method getInstance ()Landroid/hardware/display/DisplayManagerGlobal; ignore # no-pta
+
+# Bare minimum to support running ImageDecoderTest
+class android.graphics.drawable.Drawable$ConstantState keepclass # no-pta
+class android.graphics.drawable.BitmapDrawable$BitmapState keepclass # no-pta
+class android.graphics.drawable.BitmapDrawable keep # no-pta
+ method <init> (Landroid/content/res/Resources;Landroid/graphics/Bitmap;)V keep
+ method init * keep
+ method updateLocalState * keep
+ method computeBitmapSize * keep
+ method getIntrinsicWidth * keep
+ method getIntrinsicHeight * keep
+ method getBitmap * keep
+class android.graphics.drawable.Drawable keep # no-pta
+ method <init> ()V keep
+ method resolveDensity * keep
+ method updateBlendModeFilter * ignore
+
+class android.os.StrictMode keep # no-pta
+ method noteSlowCall (Ljava/lang/String;)V ignore
diff --git a/services/accessibility/accessibility.aconfig b/services/accessibility/accessibility.aconfig
index 5e1fe8a60973..b52b3dabd47d 100644
--- a/services/accessibility/accessibility.aconfig
+++ b/services/accessibility/accessibility.aconfig
@@ -145,16 +145,6 @@ flag {
}
flag {
- name: "enable_magnification_follows_mouse_bugfix"
- namespace: "accessibility"
- description: "Whether to enable mouse following for fullscreen magnification"
- bug: "354696546"
- metadata {
- purpose: PURPOSE_BUGFIX
- }
-}
-
-flag {
name: "enable_magnification_follows_mouse_with_pointer_motion_filter"
namespace: "accessibility"
description: "Whether to enable mouse following using pointer motion filter"
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java
index 9b5f22afb81d..4e41808626b4 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityInputFilter.java
@@ -53,7 +53,6 @@ import com.android.server.accessibility.magnification.FullScreenMagnificationGes
import com.android.server.accessibility.magnification.FullScreenMagnificationVibrationHelper;
import com.android.server.accessibility.magnification.MagnificationGestureHandler;
import com.android.server.accessibility.magnification.MagnificationKeyHandler;
-import com.android.server.accessibility.magnification.MouseEventHandler;
import com.android.server.accessibility.magnification.WindowMagnificationGestureHandler;
import com.android.server.accessibility.magnification.WindowMagnificationPromptController;
import com.android.server.policy.WindowManagerPolicy;
@@ -899,8 +898,7 @@ class AccessibilityInputFilter extends InputFilter implements EventStreamTransfo
triggerable,
new WindowMagnificationPromptController(displayContext, mUserId),
displayId,
- fullScreenMagnificationVibrationHelper,
- new MouseEventHandler(controller));
+ fullScreenMagnificationVibrationHelper);
}
return magnificationGestureHandler;
}
diff --git a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickIndicatorView.java b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickIndicatorView.java
index 01f359fc5753..6beb47acb8b1 100644
--- a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickIndicatorView.java
+++ b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickIndicatorView.java
@@ -123,6 +123,7 @@ public class AutoclickIndicatorView extends View {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// Get the screen dimensions.
+ // TODO(b/397944891): Handle device rotation case.
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
int screenWidth = displayMetrics.widthPixels;
int screenHeight = displayMetrics.heightPixels;
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 ba3e3d14b9c6..342675a65360 100644
--- a/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java
+++ b/services/accessibility/java/com/android/server/accessibility/autoclick/AutoclickTypePanel.java
@@ -25,6 +25,7 @@ import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.view.Gravity;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
import android.view.WindowInsets;
import android.view.WindowManager;
@@ -51,6 +52,16 @@ public class AutoclickTypePanel {
public static final int CORNER_TOP_LEFT = 2;
public static final int CORNER_TOP_RIGHT = 3;
+ // Distance between panel and screen edge.
+ // TODO(b/396402941): Finalize edge margin.
+ private static final int PANEL_EDGE_MARGIN = 15;
+
+ // Touch point when drag starts, it can be anywhere inside the panel.
+ private float mTouchStartX, mTouchStartY;
+ // Initial panel position in screen coordinates.
+ private int mPanelStartX, mPanelStartY;
+ private boolean mIsDragging = false;
+
// Types of click the AutoclickTypePanel supports.
@IntDef({
AUTOCLICK_TYPE_LEFT_CLICK,
@@ -101,6 +112,8 @@ public class AutoclickTypePanel {
private final WindowManager mWindowManager;
+ private WindowManager.LayoutParams mParams;
+
private final ClickPanelControllerInterface mClickPanelController;
// Whether the panel is expanded or not.
@@ -133,6 +146,7 @@ public class AutoclickTypePanel {
mContext = context;
mWindowManager = windowManager;
mClickPanelController = clickPanelController;
+ mParams = getDefaultLayoutParams();
mPauseButtonDrawable = mContext.getDrawable(
R.drawable.accessibility_autoclick_pause);
@@ -154,6 +168,91 @@ public class AutoclickTypePanel {
mPositionButton = mContentView.findViewById(R.id.accessibility_autoclick_position_layout);
initializeButtonState();
+
+ // Set up touch event handling for the panel to allow the user to drag and reposition the
+ // panel by touching and moving it.
+ mContentView.setOnTouchListener(this::onPanelTouch);
+ }
+
+ /**
+ * Handles touch events on the panel, enabling the user to drag and reposition it.
+ * This function supports the draggable panel feature, allowing users to move the panel
+ * to different screen locations for better usability and customization.
+ */
+ private boolean onPanelTouch(View v, MotionEvent event) {
+ // TODO(b/397681794): Make sure this works on multiple screens.
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ // Store initial touch positions.
+ mTouchStartX = event.getRawX();
+ mTouchStartY = event.getRawY();
+
+ // Store initial panel position relative to screen's top-left corner.
+ // getLocationOnScreen provides coordinates relative to the top-left corner of the
+ // screen's display. We are using this coordinate system to consistently track the
+ // panel's position during drag operations.
+ int[] location = new int[2];
+ v.getLocationOnScreen(location);
+ mPanelStartX = location[0];
+ mPanelStartY = location[1];
+ return true;
+ case MotionEvent.ACTION_MOVE:
+ mIsDragging = true;
+
+ // Set panel gravity to TOP|LEFT to match getLocationOnScreen's coordinate system
+ mParams.gravity = Gravity.LEFT | Gravity.TOP;
+
+ if (mIsDragging) {
+ // Calculate touch distance moved from start position.
+ float deltaX = event.getRawX() - mTouchStartX;
+ float deltaY = event.getRawY() - mTouchStartY;
+
+ // Update panel position, based on Top-Left absolute positioning.
+ mParams.x = mPanelStartX + (int) deltaX;
+ mParams.y = mPanelStartY + (int) deltaY;
+ mWindowManager.updateViewLayout(mContentView, mParams);
+ }
+ return true;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL:
+ if (mIsDragging) {
+ // When drag ends, snap panel to nearest edge.
+ snapToNearestEdge(mParams);
+ }
+ mIsDragging = false;
+ return true;
+ }
+ return false;
+ }
+
+ private void snapToNearestEdge(WindowManager.LayoutParams params) {
+ // Get screen width to determine which side to snap to.
+ // TODO(b/397944891): Handle device rotation case.
+ int screenWidth = mContext.getResources().getDisplayMetrics().widthPixels;
+ int yPosition = params.y;
+
+ // Determine which half of the screen the panel is on.
+ boolean isOnLeftHalf = params.x < screenWidth / 2;
+
+ if (isOnLeftHalf) {
+ // Snap to left edge. Set params.gravity to make sure x, y offsets from correct anchor.
+ params.gravity = Gravity.START | Gravity.TOP;
+ // Set the current corner to be bottom-left to ensure that the subsequent reposition
+ // action rotates the panel clockwise from bottom-left towards top-left.
+ mCurrentCornerIndex = 1;
+ } else {
+ // Snap to right edge. Set params.gravity to make sure x, y offsets from correct anchor.
+ params.gravity = Gravity.END | Gravity.TOP;
+ // Set the current corner to be top-right to ensure that the subsequent reposition
+ // action rotates the panel clockwise from top-right towards bottom-right.
+ mCurrentCornerIndex = 3;
+ }
+
+ // Apply final position: set params.x to be edge margin, params.y to maintain vertical
+ // position.
+ params.x = PANEL_EDGE_MARGIN;
+ params.y = yPosition;
+ mWindowManager.updateViewLayout(mContentView, params);
}
private void initializeButtonState() {
@@ -209,7 +308,7 @@ public class AutoclickTypePanel {
}
public void show() {
- mWindowManager.addView(mContentView, getLayoutParams());
+ mWindowManager.addView(mContentView, mParams);
}
public void hide() {
@@ -291,9 +390,8 @@ public class AutoclickTypePanel {
@Corner int nextCornerIndex = (mCurrentCornerIndex + 1) % CORNER_ROTATION_ORDER.length;
mCurrentCornerIndex = nextCornerIndex;
- // getLayoutParams() will update the panel position based on current corner.
- WindowManager.LayoutParams params = getLayoutParams();
- mWindowManager.updateViewLayout(mContentView, params);
+ setPanelPositionForCorner(mParams, mCurrentCornerIndex);
+ mWindowManager.updateViewLayout(mContentView, mParams);
}
private void setPanelPositionForCorner(WindowManager.LayoutParams params, @Corner int corner) {
@@ -303,22 +401,22 @@ public class AutoclickTypePanel {
switch (corner) {
case CORNER_BOTTOM_RIGHT:
params.gravity = Gravity.END | Gravity.BOTTOM;
- params.x = 15;
+ params.x = PANEL_EDGE_MARGIN;
params.y = 90;
break;
case CORNER_BOTTOM_LEFT:
params.gravity = Gravity.START | Gravity.BOTTOM;
- params.x = 15;
+ params.x = PANEL_EDGE_MARGIN;
params.y = 90;
break;
case CORNER_TOP_LEFT:
params.gravity = Gravity.START | Gravity.TOP;
- params.x = 15;
+ params.x = PANEL_EDGE_MARGIN;
params.y = 30;
break;
case CORNER_TOP_RIGHT:
params.gravity = Gravity.END | Gravity.TOP;
- params.x = 15;
+ params.x = PANEL_EDGE_MARGIN;
params.y = 30;
break;
default:
@@ -343,13 +441,22 @@ public class AutoclickTypePanel {
return mCurrentCornerIndex;
}
+ @VisibleForTesting
+ WindowManager.LayoutParams getLayoutParamsForTesting() {
+ return mParams;
+ }
+
+ @VisibleForTesting
+ boolean getIsDraggingForTesting() {
+ return mIsDragging;
+ }
+
/**
* Retrieves the layout params for AutoclickIndicatorView, used when it's added to the Window
* Manager.
*/
- @VisibleForTesting
@NonNull
- WindowManager.LayoutParams getLayoutParams() {
+ private WindowManager.LayoutParams getDefaultLayoutParams() {
final WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
@@ -362,7 +469,7 @@ public class AutoclickTypePanel {
mContext.getString(R.string.accessibility_autoclick_type_settings_panel_title);
layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
- setPanelPositionForCorner(layoutParams, mCurrentCornerIndex);
+ setPanelPositionForCorner(layoutParams, CORNER_BOTTOM_RIGHT);
return layoutParams;
}
}
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java
index d11ae0a6ad97..e0dd8b601a3d 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandler.java
@@ -182,7 +182,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
private final int mMinimumVelocity;
private final int mMaximumVelocity;
- private MouseEventHandler mMouseEventHandler;
+ private final MouseEventHandler mMouseEventHandler;
public FullScreenMagnificationGestureHandler(
@UiContext Context context,
@@ -194,8 +194,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
boolean detectShortcutTrigger,
@NonNull WindowMagnificationPromptController promptController,
int displayId,
- FullScreenMagnificationVibrationHelper fullScreenMagnificationVibrationHelper,
- MouseEventHandler mouseEventHandler) {
+ FullScreenMagnificationVibrationHelper fullScreenMagnificationVibrationHelper) {
this(
context,
fullScreenMagnificationController,
@@ -210,8 +209,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
/* magnificationLogger= */ null,
ViewConfiguration.get(context),
new OneFingerPanningSettingsProvider(
- context, Flags.enableMagnificationOneFingerPanningGesture()),
- mouseEventHandler);
+ context, Flags.enableMagnificationOneFingerPanningGesture()));
}
/** Constructor for tests. */
@@ -229,8 +227,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
FullScreenMagnificationVibrationHelper fullScreenMagnificationVibrationHelper,
MagnificationLogger magnificationLogger,
ViewConfiguration viewConfiguration,
- OneFingerPanningSettingsProvider oneFingerPanningSettingsProvider,
- MouseEventHandler mouseEventHandler) {
+ OneFingerPanningSettingsProvider oneFingerPanningSettingsProvider) {
super(displayId, detectSingleFingerTripleTap, detectTwoFingerTripleTap,
detectShortcutTrigger, trace, callback);
if (DEBUG_ALL) {
@@ -316,7 +313,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
mOverscrollEdgeSlop = context.getResources().getDimensionPixelSize(
R.dimen.accessibility_fullscreen_magnification_gesture_edge_slop);
mIsWatch = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH);
- mMouseEventHandler = mouseEventHandler;
+ mMouseEventHandler = new MouseEventHandler(mFullScreenMagnificationController);
if (mDetectShortcutTrigger) {
mScreenStateReceiver = new ScreenStateReceiver(context, this);
@@ -340,15 +337,14 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
@Override
void handleMouseOrStylusEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags) {
- if (Flags.enableMagnificationFollowsMouseBugfix()) {
- if (mFullScreenMagnificationController.isActivated(mDisplayId)) {
- // TODO(b/354696546): Allow mouse/stylus to activate whichever display they are
- // over, rather than only interacting with the current display.
-
- // Send through the mouse/stylus event handler.
- mMouseEventHandler.onEvent(event, mDisplayId);
- }
+ if (!mFullScreenMagnificationController.isActivated(mDisplayId)) {
+ return;
}
+ // TODO(b/354696546): Allow mouse/stylus to activate whichever display they are
+ // over, rather than only interacting with the current display.
+
+ // Send through the mouse/stylus event handler.
+ mMouseEventHandler.onEvent(event, mDisplayId);
}
private void handleTouchEventWith(
@@ -1170,8 +1166,7 @@ public class FullScreenMagnificationGestureHandler extends MagnificationGestureH
protected void cacheDelayedMotionEvent(MotionEvent event, MotionEvent rawEvent,
int policyFlags) {
- if (Flags.enableMagnificationFollowsMouseBugfix()
- && !event.isFromSource(SOURCE_TOUCHSCREEN)) {
+ if (!event.isFromSource(SOURCE_TOUCHSCREEN)) {
// Only touch events need to be cached and sent later.
return;
}
diff --git a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationGestureHandler.java b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationGestureHandler.java
index fa86ba39bb1a..6b39c98887bd 100644
--- a/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationGestureHandler.java
+++ b/services/accessibility/java/com/android/server/accessibility/magnification/MagnificationGestureHandler.java
@@ -146,8 +146,7 @@ public abstract class MagnificationGestureHandler extends BaseEventStreamTransfo
} break;
case SOURCE_MOUSE:
case SOURCE_STYLUS: {
- if (magnificationShortcutExists()
- && Flags.enableMagnificationFollowsMouseBugfix()) {
+ if (magnificationShortcutExists()) {
handleMouseOrStylusEvent(event, rawEvent, policyFlags);
}
}
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 74a87ed92f52..4441db78e4b5 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -5232,7 +5232,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
}
}
return singleCategoryKeyedEntries;
- } catch (IOException e) {
+ } catch (Exception e) {
Slog.e(TAG, "Failed to load generated previews for " + provider, e);
return new SparseArray<>();
}
@@ -5261,7 +5261,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
try {
provider.info.generatedPreviewCategories = readGeneratedPreviewCategoriesFromProto(
input);
- } catch (IOException e) {
+ } catch (Exception e) {
Slog.e(TAG, "Failed to read generated previews from file for " + provider, e);
previewsFile.delete();
provider.info.generatedPreviewCategories = 0;
@@ -5314,7 +5314,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
scheduleNotifyGroupHostsForProvidersChangedLocked(provider.getUserId());
}
}
- } catch (IOException e) {
+ } catch (Exception e) {
if (file != null && stream != null) {
file.failWrite(stream);
}
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 07a4d52f56ec..8b701f0e2069 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -198,6 +198,7 @@ import android.annotation.Nullable;
import android.annotation.PermissionMethod;
import android.annotation.PermissionName;
import android.annotation.RequiresPermission;
+import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.UserIdInt;
import android.app.Activity;
import android.app.ActivityClient;
@@ -3921,8 +3922,8 @@ public class ActivityManagerService extends IActivityManager.Stub
* The pkg name and app id have to be specified.
*/
@Override
- public void killApplication(String pkg, int appId, int userId, String reason,
- int exitInfoReason) {
+ public void killApplication(String pkg, int appId, @CanBeALL @UserIdInt int userId,
+ String reason, int exitInfoReason) {
if (pkg == null) {
return;
}
@@ -4307,7 +4308,7 @@ public class ActivityManagerService extends IActivityManager.Stub
final boolean forceStopPackageLocked(String packageName, int appId,
boolean callerWillRestart, boolean purgeCache, boolean doit,
boolean evenPersistent, boolean uninstalling, boolean packageStateStopped,
- int userId, String reasonString, int reason) {
+ @CanBeALL @UserIdInt int userId, String reasonString, int reason) {
return forceStopPackageInternalLocked(packageName, appId, callerWillRestart, purgeCache,
doit, evenPersistent, uninstalling, packageStateStopped, userId, reasonString,
reason, ProcessList.INVALID_ADJ);
@@ -4317,7 +4318,7 @@ public class ActivityManagerService extends IActivityManager.Stub
private boolean forceStopPackageInternalLocked(String packageName, int appId,
boolean callerWillRestart, boolean purgeCache, boolean doit,
boolean evenPersistent, boolean uninstalling, boolean packageStateStopped,
- int userId, String reasonString, int reason, int minOomAdj) {
+ @CanBeALL @UserIdInt int userId, String reasonString, int reason, int minOomAdj) {
int i;
if (userId == UserHandle.USER_ALL && packageName == null) {
@@ -18093,7 +18094,7 @@ public class ActivityManagerService extends IActivityManager.Stub
}
@Override
- public void killApplicationSync(String pkgName, int appId, int userId,
+ public void killApplicationSync(String pkgName, int appId, @CanBeALL @UserIdInt int userId,
String reason, int exitInfoReason) {
if (pkgName == null) {
return;
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java
index b8babe69d5a7..a61368c4bc36 100644
--- a/services/core/java/com/android/server/am/ProcessList.java
+++ b/services/core/java/com/android/server/am/ProcessList.java
@@ -67,6 +67,8 @@ import static com.android.server.wm.WindowProcessController.STOPPED_STATE_FORCE_
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SpecialUsers.CanBeALL;
+import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.ActivityManager.ProcessCapability;
import android.app.ActivityThread;
@@ -2961,8 +2963,8 @@ public final class ProcessList {
}
@GuardedBy({"mService", "mProcLock"})
- boolean killPackageProcessesLSP(String packageName, int appId, int userId, int minOomAdj,
- int reasonCode, int subReason, String reason) {
+ boolean killPackageProcessesLSP(String packageName, int appId, @CanBeALL @UserIdInt int userId,
+ int minOomAdj, int reasonCode, int subReason, String reason) {
return killPackageProcessesLSP(packageName, appId, userId, minOomAdj,
false /* callerWillRestart */, true /* allowRestart */, true /* doit */,
false /* evenPersistent */, false /* setRemoved */, false /* uninstalling */,
@@ -2970,7 +2972,8 @@ public final class ProcessList {
}
@GuardedBy("mService")
- void killAppZygotesLocked(String packageName, int appId, int userId, boolean force) {
+ void killAppZygotesLocked(String packageName, int appId, @CanBeALL @UserIdInt int userId,
+ boolean force) {
// See if there are any app zygotes running for this packageName / UID combination,
// and kill it if so.
final ArrayList<AppZygote> zygotesToKill = new ArrayList<>();
@@ -3050,9 +3053,9 @@ public final class ProcessList {
@GuardedBy({"mService", "mProcLock"})
boolean killPackageProcessesLSP(String packageName, int appId,
- int userId, int minOomAdj, boolean callerWillRestart, boolean allowRestart,
- boolean doit, boolean evenPersistent, boolean setRemoved, boolean uninstalling,
- int reasonCode, int subReason, String reason) {
+ @CanBeALL @UserIdInt int userId, int minOomAdj, boolean callerWillRestart,
+ boolean allowRestart, boolean doit, boolean evenPersistent, boolean setRemoved,
+ boolean uninstalling, int reasonCode, int subReason, String reason) {
final PackageManagerInternal pm = mService.getPackageManagerInternal();
final ArrayList<Pair<ProcessRecord, Boolean>> procs = new ArrayList<>();
@@ -5220,7 +5223,7 @@ public final class ProcessList {
}
@GuardedBy("mService")
- void sendPackageBroadcastLocked(int cmd, String[] packages, int userId) {
+ void sendPackageBroadcastLocked(int cmd, String[] packages, @CanBeALL @UserIdInt int userId) {
boolean foundProcess = false;
for (int i = mLruProcesses.size() - 1; i >= 0; i--) {
ProcessRecord r = mLruProcesses.get(i);
diff --git a/services/core/java/com/android/server/appop/AppOpsService.java b/services/core/java/com/android/server/appop/AppOpsService.java
index 2a9762caaf79..c8b8909f203f 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -66,7 +66,6 @@ import static android.app.AppOpsManager.opRestrictsRead;
import static android.app.AppOpsManager.opToName;
import static android.app.AppOpsManager.opToPublicName;
import static android.companion.virtual.VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT;
-import static android.content.Intent.ACTION_PACKAGE_ADDED;
import static android.content.Intent.ACTION_PACKAGE_REMOVED;
import static android.content.Intent.EXTRA_REPLACING;
import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS;
@@ -363,8 +362,6 @@ public class AppOpsService extends IAppOpsService.Stub {
@GuardedBy("this")
@VisibleForTesting
final SparseArray<UidState> mUidStates = new SparseArray<>();
- @GuardedBy("this")
- private boolean mUidStatesInitialized;
// A rate limiter to prevent excessive Atom pushing. Used by noteOperation.
private static final Duration RATE_LIMITER_WINDOW = Duration.ofMillis(10);
@@ -415,6 +412,9 @@ public class AppOpsService extends IAppOpsService.Stub {
@GuardedBy("this")
private ArraySet<String> mRarelyUsedPackages = new ArraySet<>();
+ @GuardedBy("this")
+ private boolean mRarelyUsedPackagesInitialized;
+
/** Sampling strategy used for current session */
@GuardedBy("this")
@AppOpsManager.SamplingStrategy
@@ -1076,41 +1076,53 @@ public class AppOpsService extends IAppOpsService.Stub {
String pkgName = intent.getData().getEncodedSchemeSpecificPart().intern();
int uid = intent.getIntExtra(Intent.EXTRA_UID, Process.INVALID_UID);
- if (action.equals(ACTION_PACKAGE_ADDED)
- && !intent.getBooleanExtra(EXTRA_REPLACING, false)) {
- PackageInfo pi = getPackageManagerInternal().getPackageInfo(pkgName,
- PackageManager.GET_PERMISSIONS, Process.myUid(),
- UserHandle.getUserId(uid));
- boolean isSamplingTarget = isSamplingTarget(pi);
- synchronized (AppOpsService.this) {
- if (isSamplingTarget) {
- mRarelyUsedPackages.add(pkgName);
- }
- UidState uidState = getUidStateLocked(uid, true);
- if (!uidState.pkgOps.containsKey(pkgName)) {
- uidState.pkgOps.put(pkgName,
- new Ops(pkgName, uidState));
- }
-
- createSandboxUidStateIfNotExistsForAppLocked(uid, null);
- }
- } else if (action.equals(ACTION_PACKAGE_REMOVED) && !intent.hasExtra(EXTRA_REPLACING)) {
- synchronized (AppOpsService.this) {
- packageRemovedLocked(uid, pkgName);
- }
+ if (action.equals(ACTION_PACKAGE_REMOVED) && !intent.hasExtra(EXTRA_REPLACING)) {
+ onPackageRemoved(pkgName, uid);
} else if (action.equals(Intent.ACTION_PACKAGE_REPLACED)) {
- AndroidPackage pkg = getPackageManagerInternal().getPackage(pkgName);
- if (pkg == null) {
- return;
- }
-
- synchronized (AppOpsService.this) {
- refreshAttributionsLocked(pkg, uid);
- }
+ onPackageReplaced(pkgName, uid);
}
}
};
+ private void onPackageAdded(String pkgName, int uid) {
+ PackageInfo pi = getPackageManagerInternal().getPackageInfo(pkgName,
+ PackageManager.GET_PERMISSIONS, Process.myUid(),
+ UserHandle.getUserId(uid));
+ synchronized (AppOpsService.this) {
+ boolean isSamplingTarget = false;
+ if (mRarelyUsedPackagesInitialized) {
+ isSamplingTarget = isSamplingTarget(pi);
+ }
+ if (isSamplingTarget) {
+ mRarelyUsedPackages.add(pkgName);
+ }
+ UidState uidState = getUidStateLocked(uid, true);
+ if (!uidState.pkgOps.containsKey(pkgName)) {
+ uidState.pkgOps.put(pkgName,
+ new Ops(pkgName, uidState));
+ }
+
+ createSandboxUidStateIfNotExistsForAppLocked(uid, null);
+ }
+ }
+
+ private void onPackageRemoved(String pkgName, int uid) {
+ synchronized (AppOpsService.this) {
+ packageRemovedLocked(uid, pkgName);
+ }
+ }
+
+ private void onPackageReplaced(String pkgName, int uid) {
+ AndroidPackage pkg = getPackageManagerInternal().getPackage(pkgName);
+ if (pkg == null) {
+ return;
+ }
+
+ synchronized (AppOpsService.this) {
+ refreshAttributionsLocked(pkg, uid);
+ }
+ }
+
public void systemReady() {
mVirtualDeviceManagerInternal = LocalServices.getService(
VirtualDeviceManagerInternal.class);
@@ -1121,7 +1133,6 @@ public class AppOpsService extends IAppOpsService.Stub {
mHistoricalRegistry.systemReady(mContext.getContentResolver());
IntentFilter packageUpdateFilter = new IntentFilter();
- packageUpdateFilter.addAction(ACTION_PACKAGE_ADDED);
packageUpdateFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
packageUpdateFilter.addAction(ACTION_PACKAGE_REMOVED);
packageUpdateFilter.addDataScheme("package");
@@ -1236,7 +1247,6 @@ public class AppOpsService extends IAppOpsService.Stub {
}
trimUidStatesLocked(knownUids, packageStates);
- mUidStatesInitialized = true;
}
}
}
@@ -7182,12 +7192,13 @@ public class AppOpsService extends IAppOpsService.Stub {
}
}
}
- synchronized (this) {
+ synchronized (AppOpsService.this) {
int numPkgs = mRarelyUsedPackages.size();
for (int i = 0; i < numPkgs; i++) {
candidates.add(mRarelyUsedPackages.valueAt(i));
}
mRarelyUsedPackages = candidates;
+ mRarelyUsedPackagesInitialized = true;
}
}
});
@@ -7495,6 +7506,15 @@ public class AppOpsService extends IAppOpsService.Stub {
return number;
}
+
+ @Override
+ public void onPackageAdded(String pkgName, int appId) {
+ int[] userIds = AppOpsService.this.getUserManagerInternal().getUserIds();
+ for (int i = 0; i < userIds.length; i++) {
+ int userId = userIds[i];
+ AppOpsService.this.onPackageAdded(pkgName, UserHandle.getUid(userId, appId));
+ }
+ }
}
/**
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index d800503c658e..4e84733d540f 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -848,23 +848,6 @@ public class AudioService extends IAudioService.Stub
"media_audio.value_audio_playback_hardening_partial_restriction";
static final String METRIC_COUNTERS_PLAYBACK_STRICT =
"media_audio.value_audio_playback_hardening_strict_would_restrict";
-
- String getPackNameForUid(int uid) {
- final long token = Binder.clearCallingIdentity();
- try {
- final String[] names = AudioService.this.mContext.
- getPackageManager().getPackagesForUid(uid);
- if (names == null
- || names.length == 0
- || TextUtils.isEmpty(names[0])) {
- return "[" + uid + "]";
- }
- return names[0];
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
-
// oneway
@Override
public void playbackHardeningEvent(int uid, byte type, boolean bypassed) {
@@ -882,7 +865,7 @@ public class AudioService extends IAudioService.Stub
String msg = "AudioHardening background playback "
+ (bypassed ? "would be " : "")
+ "muted for "
- + getPackNameForUid(uid) + " (" + uid + "), "
+ + getPackageNameForUid(uid) + " (" + uid + "), "
+ "level: " + (type == HardeningType.PARTIAL ? "partial" : "full");
AudioService.this.mHardeningLogger.enqueueAndSlog(msg,
@@ -954,7 +937,8 @@ public class AudioService extends IAudioService.Stub
/**
* Stores information about a device using absolute volume behavior.
*/
- private static final class AbsoluteVolumeDeviceInfo {
+ private static final class AbsoluteVolumeDeviceInfo implements IBinder.DeathRecipient {
+ private final AudioService mParent;
private final AudioDeviceAttributes mDevice;
private final List<VolumeInfo> mVolumeInfos;
private final IAudioDeviceVolumeDispatcher mCallback;
@@ -962,16 +946,26 @@ public class AudioService extends IAudioService.Stub
private @AudioManager.AbsoluteDeviceVolumeBehavior int mDeviceVolumeBehavior;
private AbsoluteVolumeDeviceInfo(
+ AudioService parent,
AudioDeviceAttributes device,
List<VolumeInfo> volumeInfos,
IAudioDeviceVolumeDispatcher callback,
boolean handlesVolumeAdjustment,
@AudioManager.AbsoluteDeviceVolumeBehavior int behavior) {
+ this.mParent = parent;
this.mDevice = device;
this.mVolumeInfos = volumeInfos;
this.mCallback = callback;
this.mHandlesVolumeAdjustment = handlesVolumeAdjustment;
this.mDeviceVolumeBehavior = behavior;
+
+ try {
+ this.mCallback.asBinder().linkToDeath(this, 0);
+ } catch (RemoteException | NullPointerException e) {
+ // NPE can be raised when mocking the callback object
+ Slog.w(TAG, "Exception: " + e
+ + "\nCannot listen to callback binder death for device " + mDevice);
+ }
}
/**
@@ -991,6 +985,25 @@ public class AudioService extends IAudioService.Stub
}
return null;
}
+
+ @Override
+ public void binderDied() {
+ if (mParent.removeAudioSystemDeviceOutFromAbsVolumeDevices(mDevice.getInternalType())
+ != null) {
+ mParent.dispatchDeviceVolumeBehavior(mDevice,
+ AudioManager.DEVICE_VOLUME_BEHAVIOR_VARIABLE);
+ }
+ }
+
+ public void unlinkToDeath() {
+ try {
+ mCallback.asBinder().unlinkToDeath(this, 0);
+ } catch (NullPointerException e) {
+ // NPE can be raised when mocking the callback object
+ Slog.w(TAG, "Exception: " + e
+ + "\nCannot unlink to death, null binder object for device " + mDevice);
+ }
+ }
}
// Devices for the which use the "absolute volume" concept (framework sends audio signal
@@ -1256,8 +1269,7 @@ public class AudioService extends IAudioService.Stub
}
};
- @GuardedBy("mSettingsLock")
- private boolean mRttEnabled = false;
+ private AtomicBoolean mRttEnabled = new AtomicBoolean(false);
private AtomicBoolean mMasterMute = new AtomicBoolean(false);
@@ -1608,7 +1620,9 @@ public class AudioService extends IAudioService.Stub
mMusicFxHelper = new MusicFxHelper(mContext, mAudioHandler);
- mHardeningEnforcer = new HardeningEnforcer(mContext, isPlatformAutomotive(), mAppOps,
+ mHardeningEnforcer = new HardeningEnforcer(mContext, isPlatformAutomotive(),
+ mShouldEnableAllHardening,
+ mAppOps,
context.getPackageManager(),
mHardeningLogger);
}
@@ -1634,13 +1648,13 @@ public class AudioService extends IAudioService.Stub
* Called by handling of MSG_INIT_STREAMS_VOLUMES
*/
private void onInitStreamsAndVolumes() {
- synchronized (mSettingsLock) {
- mCameraSoundForced = readCameraSoundForced();
+ synchronized (this) {
+ mCameraSoundForced.set(readCameraSoundForced());
sendMsg(mAudioHandler,
MSG_SET_FORCE_USE,
SENDMSG_QUEUE,
AudioSystem.FOR_SYSTEM,
- mCameraSoundForced
+ mCameraSoundForced.get()
? AudioSystem.FORCE_SYSTEM_ENFORCED : AudioSystem.FORCE_NONE,
new String("AudioService ctor"),
0);
@@ -2047,11 +2061,9 @@ public class AudioService extends IAudioService.Stub
onUpdateAudioMode(AudioSystem.MODE_CURRENT, android.os.Process.myPid(),
mContext.getPackageName(), true /*force*/, false /*signal*/);
}
- final int forSys;
- synchronized (mSettingsLock) {
- forSys = mCameraSoundForced ?
- AudioSystem.FORCE_SYSTEM_ENFORCED : AudioSystem.FORCE_NONE;
- }
+
+ final int forSys = mCameraSoundForced.get()
+ ? AudioSystem.FORCE_SYSTEM_ENFORCED : AudioSystem.FORCE_NONE;
mDeviceBroker.setForceUse_Async(AudioSystem.FOR_SYSTEM, forSys, "onAudioServerDied");
@@ -2078,13 +2090,13 @@ public class AudioService extends IAudioService.Stub
// Restore setParameters and other queued setters.
mRestorableParameters.restoreAll();
+ final int forDock = mDockAudioMediaEnabled ?
+ AudioSystem.FORCE_DIGITAL_DOCK : AudioSystem.FORCE_NONE;
+ mDeviceBroker.setForceUse_Async(AudioSystem.FOR_DOCK, forDock, "onAudioServerDied");
+ sendEncodedSurroundMode(mContentResolver, "onAudioServerDied");
+ sendEnabledSurroundFormats(mContentResolver, true);
+ AudioSystem.setRttEnabled(mRttEnabled.get());
synchronized (mSettingsLock) {
- final int forDock = mDockAudioMediaEnabled ?
- AudioSystem.FORCE_DIGITAL_DOCK : AudioSystem.FORCE_NONE;
- mDeviceBroker.setForceUse_Async(AudioSystem.FOR_DOCK, forDock, "onAudioServerDied");
- sendEncodedSurroundMode(mContentResolver, "onAudioServerDied");
- sendEnabledSurroundFormats(mContentResolver, true);
- AudioSystem.setRttEnabled(mRttEnabled);
resetAssistantServicesUidsLocked();
}
@@ -3221,9 +3233,10 @@ public class AudioService extends IAudioService.Stub
sendEnabledSurroundFormats(cr, true);
updateAssistantUIdLocked(/* forceUpdate= */ true);
resetActiveAssistantUidsLocked();
- AudioSystem.setRttEnabled(mRttEnabled);
}
+ AudioSystem.setRttEnabled(mRttEnabled.get());
+
mMuteAffectedStreams = mSettings.getSystemIntForUser(cr,
System.MUTE_STREAMS_AFFECTED, AudioSystem.DEFAULT_MUTE_STREAMS_AFFECTED,
UserHandle.USER_CURRENT);
@@ -3904,7 +3917,9 @@ public class AudioService extends IAudioService.Stub
public void adjustStreamVolumeWithAttribution(int streamType, int direction, int flags,
String callingPackage, String attributionTag) {
if (mHardeningEnforcer.blockVolumeMethod(
- HardeningEnforcer.METHOD_AUDIO_MANAGER_ADJUST_STREAM_VOLUME)) {
+ HardeningEnforcer.METHOD_AUDIO_MANAGER_ADJUST_STREAM_VOLUME,
+ callingPackage,
+ Binder.getCallingUid())) {
return;
}
if ((streamType == AudioManager.STREAM_ACCESSIBILITY) && !canChangeAccessibilityVolume()) {
@@ -4247,7 +4262,7 @@ public class AudioService extends IAudioService.Stub
final VolumeStreamState vss = mStreamStates.valueAt(streamIdx);
if (vss != null && streamAlias == sStreamVolumeAlias.get(vss.getStreamType())
&& vss.isMutable()) {
- if (!(mCameraSoundForced && (vss.getStreamType()
+ if (!(mCameraSoundForced.get() && (vss.getStreamType()
== AudioSystem.STREAM_SYSTEM_ENFORCED))) {
boolean changed = vss.mute(state, /* apply= */ false,
"muteAliasStreams");
@@ -4665,7 +4680,9 @@ public class AudioService extends IAudioService.Stub
public void setStreamVolumeWithAttribution(int streamType, int index, int flags,
String callingPackage, String attributionTag) {
if (mHardeningEnforcer.blockVolumeMethod(
- HardeningEnforcer.METHOD_AUDIO_MANAGER_SET_STREAM_VOLUME)) {
+ HardeningEnforcer.METHOD_AUDIO_MANAGER_SET_STREAM_VOLUME,
+ callingPackage,
+ Binder.getCallingUid())) {
return;
}
setStreamVolumeWithAttributionInt(streamType, index, flags, /*device*/ null,
@@ -6114,7 +6131,9 @@ public class AudioService extends IAudioService.Stub
public void setRingerModeExternal(int ringerMode, String caller) {
if (mHardeningEnforcer.blockVolumeMethod(
- HardeningEnforcer.METHOD_AUDIO_MANAGER_SET_RINGER_MODE)) {
+ HardeningEnforcer.METHOD_AUDIO_MANAGER_SET_RINGER_MODE,
+ getPackageNameForUid(Binder.getCallingUid()),
+ Binder.getCallingUid())) {
return;
}
if (isAndroidNPlus(caller) && wouldToggleZenMode(ringerMode)
@@ -6817,7 +6836,7 @@ public class AudioService extends IAudioService.Stub
return false;
}
- /** @see AudioManager#setRttEnabled() */
+ /** @see AudioManager#setRttEnabled(boolean) */
@Override
public void setRttEnabled(boolean rttEnabled) {
if (mContext.checkCallingOrSelfPermission(
@@ -6827,8 +6846,8 @@ public class AudioService extends IAudioService.Stub
+ Binder.getCallingPid() + ", uid=" + Binder.getCallingUid());
return;
}
- synchronized (mSettingsLock) {
- mRttEnabled = rttEnabled;
+ synchronized (this) {
+ mRttEnabled.set(rttEnabled);
final long identity = Binder.clearCallingIdentity();
try {
AudioSystem.setRttEnabled(rttEnabled);
@@ -6838,6 +6857,11 @@ public class AudioService extends IAudioService.Stub
}
}
+ @VisibleForTesting(visibility = PACKAGE)
+ protected boolean isRttEnabled() {
+ return mRttEnabled.get();
+ }
+
/** @see AudioManager#adjustSuggestedStreamVolumeForUid(int, int, int, String, int, int, int) */
@Override
public void adjustSuggestedStreamVolumeForUid(int streamType, int direction, int flags,
@@ -6883,7 +6907,9 @@ public class AudioService extends IAudioService.Stub
@Override
public void adjustVolume(int direction, int flags) {
if (mHardeningEnforcer.blockVolumeMethod(
- HardeningEnforcer.METHOD_AUDIO_MANAGER_ADJUST_VOLUME)) {
+ HardeningEnforcer.METHOD_AUDIO_MANAGER_ADJUST_VOLUME,
+ getPackageNameForUid(Binder.getCallingUid()),
+ Binder.getCallingUid())) {
return;
}
getMediaSessionManager().dispatchAdjustVolume(AudioManager.USE_DEFAULT_STREAM_TYPE,
@@ -6898,7 +6924,9 @@ public class AudioService extends IAudioService.Stub
@Override
public void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags) {
if (mHardeningEnforcer.blockVolumeMethod(
- HardeningEnforcer.METHOD_AUDIO_MANAGER_ADJUST_SUGGESTED_STREAM_VOLUME)) {
+ HardeningEnforcer.METHOD_AUDIO_MANAGER_ADJUST_SUGGESTED_STREAM_VOLUME,
+ getPackageNameForUid(Binder.getCallingUid()),
+ Binder.getCallingUid())) {
return;
}
getMediaSessionManager().dispatchAdjustVolume(suggestedStreamType, direction, flags);
@@ -7619,7 +7647,7 @@ public class AudioService extends IAudioService.Stub
ringerModeAffectedStreams = mRingerModeDelegate
.getRingerModeAffectedStreams(ringerModeAffectedStreams);
}
- if (mCameraSoundForced) {
+ if (mCameraSoundForced.get()) {
ringerModeAffectedStreams &= ~(1 << AudioSystem.STREAM_SYSTEM_ENFORCED);
} else {
ringerModeAffectedStreams |= (1 << AudioSystem.STREAM_SYSTEM_ENFORCED);
@@ -8142,16 +8170,16 @@ public class AudioService extends IAudioService.Stub
int deviceOut = device.getInternalType();
if (register) {
- AbsoluteVolumeDeviceInfo info = new AbsoluteVolumeDeviceInfo(
+ AbsoluteVolumeDeviceInfo info = new AbsoluteVolumeDeviceInfo(this,
device, volumes, cb, handlesVolumeAdjustment, deviceVolumeBehavior);
final AbsoluteVolumeDeviceInfo oldInfo = getAbsoluteVolumeDeviceInfo(deviceOut);
+ addAudioSystemDeviceOutToAbsVolumeDevices(deviceOut, info);
boolean volumeBehaviorChanged = (oldInfo == null)
|| (oldInfo.mDeviceVolumeBehavior != deviceVolumeBehavior);
if (volumeBehaviorChanged) {
removeAudioSystemDeviceOutFromFullVolumeDevices(deviceOut);
removeAudioSystemDeviceOutFromFixedVolumeDevices(deviceOut);
- addAudioSystemDeviceOutToAbsVolumeDevices(deviceOut, info);
dispatchDeviceVolumeBehavior(device, deviceVolumeBehavior);
}
@@ -8177,8 +8205,10 @@ public class AudioService extends IAudioService.Stub
}
}
} else {
- boolean wasAbsVol = removeAudioSystemDeviceOutFromAbsVolumeDevices(deviceOut) != null;
- if (wasAbsVol) {
+ AbsoluteVolumeDeviceInfo deviceInfo = removeAudioSystemDeviceOutFromAbsVolumeDevices(
+ deviceOut);
+ if (deviceInfo != null) {
+ deviceInfo.unlinkToDeath();
dispatchDeviceVolumeBehavior(device, AudioManager.DEVICE_VOLUME_BEHAVIOR_VARIABLE);
}
}
@@ -9141,7 +9171,7 @@ public class AudioService extends IAudioService.Stub
continue;
}
if (mPublicStreamType == AudioSystem.STREAM_SYSTEM_ENFORCED
- && mCameraSoundForced) {
+ && mCameraSoundForced.get()) {
index = mIndexMax;
}
if (DEBUG_VOL) {
@@ -9504,28 +9534,25 @@ public class AudioService extends IAudioService.Stub
}
public void readSettings() {
- synchronized (mSettingsLock) {
- synchronized (mVolumeStateLock) {
- // force maximum volume on all streams if fixed volume property is set
- if (mUseFixedVolume) {
- mIndexMap.put(AudioSystem.DEVICE_OUT_DEFAULT, mIndexMax);
- return;
- }
- // do not read system stream volume from settings: this stream is always aliased
- // to another stream type and its volume is never persisted. Values in settings can
- // only be stale values
- if ((mStreamType == AudioSystem.STREAM_SYSTEM) ||
- (mStreamType == AudioSystem.STREAM_SYSTEM_ENFORCED)) {
- int index = 10 * AudioSystem.DEFAULT_STREAM_VOLUME[mStreamType];
- if (mCameraSoundForced) {
- index = mIndexMax;
- }
- mIndexMap.put(AudioSystem.DEVICE_OUT_DEFAULT, index);
- return;
+ synchronized (mVolumeStateLock) {
+ // force maximum volume on all streams if fixed volume property is set
+ if (mUseFixedVolume) {
+ mIndexMap.put(AudioSystem.DEVICE_OUT_DEFAULT, mIndexMax);
+ return;
+ }
+ // do not read system stream volume from settings: this stream is always aliased
+ // to another stream type and its volume is never persisted. Values in settings can
+ // only be stale values
+ if ((mStreamType == AudioSystem.STREAM_SYSTEM)
+ || (mStreamType == AudioSystem.STREAM_SYSTEM_ENFORCED)) {
+ int index = 10 * AudioSystem.DEFAULT_STREAM_VOLUME[mStreamType];
+ if (mCameraSoundForced.get()) {
+ index = mIndexMax;
}
+ mIndexMap.put(AudioSystem.DEVICE_OUT_DEFAULT, index);
+ return;
}
- }
- synchronized (mVolumeStateLock) {
+
for (int device : AudioSystem.DEVICE_OUT_ALL_SET) {
// retrieve current volume for device
@@ -9674,7 +9701,8 @@ public class AudioService extends IAudioService.Stub
index = getValidIndex(index, hasModifyAudioSettings);
// for STREAM_SYSTEM_ENFORCED, do not sync aliased streams on the enforced index
int aliasIndex = index;
- if ((mStreamType == AudioSystem.STREAM_SYSTEM_ENFORCED) && mCameraSoundForced) {
+ if ((mStreamType == AudioSystem.STREAM_SYSTEM_ENFORCED)
+ && mCameraSoundForced.get()) {
index = mIndexMax;
}
mIndexMap.put(device, index);
@@ -12200,10 +12228,10 @@ public class AudioService extends IAudioService.Stub
Configuration config = mContext.getResources().getConfiguration();
mSoundDoseHelper.configureSafeMedia(/*forced*/false, TAG);
- boolean cameraSoundForced = readCameraSoundForced();
+ final boolean cameraSoundForced = readCameraSoundForced();
+ final boolean cameraSoundForcedChanged =
+ (mCameraSoundForced.getAndSet(cameraSoundForced) != cameraSoundForced);
synchronized (mSettingsLock) {
- final boolean cameraSoundForcedChanged = (cameraSoundForced != mCameraSoundForced);
- mCameraSoundForced = cameraSoundForced;
if (cameraSoundForcedChanged) {
if (!mIsSingleVolume) {
synchronized (mVolumeStateLock) {
@@ -12233,7 +12261,6 @@ public class AudioService extends IAudioService.Stub
0,
0,
getVssForStreamOrDefault(AudioSystem.STREAM_SYSTEM_ENFORCED), 0);
-
}
}
mVolumeController.setLayoutDirection(config.getLayoutDirection());
@@ -12598,14 +12625,11 @@ public class AudioService extends IAudioService.Stub
//==========================================================================================
// cached value of com.android.internal.R.bool.config_camera_sound_forced
- @GuardedBy("mSettingsLock")
- private boolean mCameraSoundForced;
+ private AtomicBoolean mCameraSoundForced = new AtomicBoolean(false);
// called by android.hardware.Camera to populate CameraInfo.canDisableShutterSound
public boolean isCameraSoundForced() {
- synchronized (mSettingsLock) {
- return mCameraSoundForced;
- }
+ return mCameraSoundForced.get();
}
//==========================================================================================
@@ -15457,4 +15481,22 @@ public class AudioService extends IAudioService.Stub
}
return true;
}
+
+ private String getPackageNameForUid(int uid) {
+ final long token = Binder.clearCallingIdentity();
+ try {
+ final String[] names = AudioService.this.mContext.
+ getPackageManager().getPackagesForUid(uid);
+ if (names == null
+ || names.length == 0
+ || TextUtils.isEmpty(names[0])) {
+ return "[" + uid + "]";
+ }
+ return names[0];
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+
}
diff --git a/services/core/java/com/android/server/audio/HardeningEnforcer.java b/services/core/java/com/android/server/audio/HardeningEnforcer.java
index f69a810b314f..9bb5160f108a 100644
--- a/services/core/java/com/android/server/audio/HardeningEnforcer.java
+++ b/services/core/java/com/android/server/audio/HardeningEnforcer.java
@@ -37,6 +37,7 @@ import com.android.modules.expresslog.Counter;
import com.android.server.utils.EventLogger;
import java.io.PrintWriter;
+import java.util.concurrent.atomic.AtomicBoolean;
/**
* Class to encapsulate all audio API hardening operations
@@ -49,6 +50,7 @@ public class HardeningEnforcer {
final Context mContext;
final AppOpsManager mAppOps;
+ final AtomicBoolean mShouldEnableAllHardening;
final boolean mIsAutomotive;
final ActivityManager mActivityManager;
@@ -106,10 +108,16 @@ public class HardeningEnforcer {
*/
public static final int METHOD_AUDIO_MANAGER_REQUEST_AUDIO_FOCUS = 300;
- public HardeningEnforcer(Context ctxt, boolean isAutomotive, AppOpsManager appOps,
- PackageManager pm, EventLogger logger) {
+ private static final int ALLOWED = 0;
+ private static final int DENIED_IF_PARTIAL = 1;
+ private static final int DENIED_IF_FULL = 2;
+
+ public HardeningEnforcer(Context ctxt, boolean isAutomotive,
+ AtomicBoolean shouldEnableHardening, AppOpsManager appOps, PackageManager pm,
+ EventLogger logger) {
mContext = ctxt;
mIsAutomotive = isAutomotive;
+ mShouldEnableAllHardening = shouldEnableHardening;
mAppOps = appOps;
mActivityManager = ctxt.getSystemService(ActivityManager.class);
mPackageManager = pm;
@@ -121,29 +129,59 @@ public class HardeningEnforcer {
* @param volumeMethod name of the method to check, for logging purposes
* @return false if the method call is allowed, true if it should be a no-op
*/
- protected boolean blockVolumeMethod(int volumeMethod) {
+ protected boolean blockVolumeMethod(int volumeMethod, String packageName, int uid) {
+ // Regardless of flag state, always permit callers with MODIFY_AUDIO_SETTINGS_PRIVILEGED
+ // Prevent them from showing up in metrics as well
+ if (mContext.checkCallingOrSelfPermission(
+ Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED)
+ == PackageManager.PERMISSION_GRANTED) {
+ return false;
+ }
// for Auto, volume methods require MODIFY_AUDIO_SETTINGS_PRIVILEGED
if (mIsAutomotive) {
if (!autoPublicVolumeApiHardening()) {
// automotive hardening flag disabled, no blocking on auto
return false;
}
- if (mContext.checkCallingOrSelfPermission(
- Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED)
- == PackageManager.PERMISSION_GRANTED) {
- return false;
- }
- if (Binder.getCallingUid() < UserHandle.AID_APP_START) {
+ if (uid < UserHandle.AID_APP_START) {
return false;
}
// TODO metrics?
// TODO log for audio dumpsys?
Slog.e(TAG, "Preventing volume method " + volumeMethod + " for "
- + getPackNameForUid(Binder.getCallingUid()));
+ + packageName);
return true;
+ } else {
+ int allowed;
+ // No flags controlling restriction yet
+ boolean enforced = mShouldEnableAllHardening.get();
+ if (!noteOp(AppOpsManager.OP_CONTROL_AUDIO_PARTIAL, uid, packageName, null)) {
+ // blocked by partial
+ Counter.logIncrementWithUid(
+ "media_audio.value_audio_volume_hardening_partial_restriction", uid);
+ allowed = DENIED_IF_PARTIAL;
+ } else if (!noteOp(AppOpsManager.OP_CONTROL_AUDIO, uid, packageName, null)) {
+ // blocked by full, permitted by partial
+ Counter.logIncrementWithUid(
+ "media_audio.value_audio_volume_hardening_strict_restriction", uid);
+ allowed = DENIED_IF_FULL;
+ } else {
+ // permitted with strict hardening, log anyway for API metrics
+ Counter.logIncrementWithUid(
+ "media_audio.value_audio_volume_hardening_allowed", uid);
+ allowed = ALLOWED;
+ }
+ if (allowed != ALLOWED) {
+ String msg = "AudioHardening volume control for api "
+ + volumeMethod
+ + (!enforced ? " would be " : " ")
+ + "ignored for "
+ + getPackNameForUid(uid) + " (" + uid + "), "
+ + "level: " + (allowed == DENIED_IF_PARTIAL ? "partial" : "full");
+ mEventLogger.enqueueAndSlog(msg, EventLogger.Event.ALOGW, TAG);
+ }
+ return enforced && allowed != ALLOWED;
}
- // not blocking
- return false;
}
/**
diff --git a/services/core/java/com/android/server/biometrics/BiometricService.java b/services/core/java/com/android/server/biometrics/BiometricService.java
index a5058dd51a33..cf5fa9699ca9 100644
--- a/services/core/java/com/android/server/biometrics/BiometricService.java
+++ b/services/core/java/com/android/server/biometrics/BiometricService.java
@@ -540,9 +540,23 @@ public class BiometricService extends SystemService {
DEFAULT_MANDATORY_BIOMETRICS_STATUS)
&& mMandatoryBiometricsRequirementsSatisfied.getOrDefault(userId,
DEFAULT_MANDATORY_BIOMETRICS_REQUIREMENTS_SATISFIED_STATUS)
- && getEnabledForApps(userId, TYPE_ANY_BIOMETRIC)
- && (mFingerprintEnrolledForUser.getOrDefault(userId, false /* default */)
- || mFaceEnrolledForUser.getOrDefault(userId, false /* default */));
+ && getBiometricStatusForIdentityCheck(userId);
+ }
+
+ private boolean getBiometricStatusForIdentityCheck(int userId) {
+ if (com.android.settings.flags.Flags.biometricsOnboardingEducation()) {
+ if (mFingerprintEnrolledForUser.getOrDefault(userId, false /* default */)
+ && getEnabledForApps(userId, TYPE_FINGERPRINT)) {
+ return true;
+ } else {
+ return mFaceEnrolledForUser.getOrDefault(userId, false /* default */)
+ && getEnabledForApps(userId, TYPE_FACE);
+ }
+ } else {
+ return (mFingerprintEnrolledForUser.getOrDefault(userId, false /* default */)
+ || mFaceEnrolledForUser.getOrDefault(userId, false /* default */))
+ && getEnabledForApps(userId, TYPE_ANY_BIOMETRIC);
+ }
}
void notifyEnabledOnKeyguardCallbacks(int userId, int modality) {
diff --git a/services/core/java/com/android/server/content/ContentService.java b/services/core/java/com/android/server/content/ContentService.java
index c393e921d957..79af6ed9d60b 100644
--- a/services/core/java/com/android/server/content/ContentService.java
+++ b/services/core/java/com/android/server/content/ContentService.java
@@ -24,6 +24,8 @@ import android.accounts.AccountManagerInternal;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
+import android.annotation.SpecialUsers.CanBeALL;
+import android.annotation.SpecialUsers.CanBeCURRENT;
import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.ActivityManager.RestrictionLevel;
@@ -361,7 +363,8 @@ public final class ContentService extends IContentService.Stub {
*/
@Override
public void registerContentObserver(Uri uri, boolean notifyForDescendants,
- IContentObserver observer, int userHandle, int targetSdkVersion) {
+ IContentObserver observer, @CanBeALL @CanBeCURRENT @UserIdInt int userHandle,
+ int targetSdkVersion) {
if (observer == null || uri == null) {
throw new IllegalArgumentException("You must pass a valid uri and observer");
}
@@ -1398,8 +1401,8 @@ public final class ContentService extends IContentService.Stub {
}
}
- private int handleIncomingUser(Uri uri, int pid, int uid, int modeFlags, boolean allowNonFull,
- int userId) {
+ private @CanBeALL @UserIdInt int handleIncomingUser(Uri uri, int pid, int uid, int modeFlags,
+ boolean allowNonFull, @CanBeALL @CanBeCURRENT @UserIdInt int userId) {
if (userId == UserHandle.USER_CURRENT) {
userId = ActivityManager.getCurrentUser();
}
diff --git a/services/core/java/com/android/server/inputmethod/ClientController.java b/services/core/java/com/android/server/inputmethod/ClientController.java
index 0381a317de5f..d03c0862b3eb 100644
--- a/services/core/java/com/android/server/inputmethod/ClientController.java
+++ b/services/core/java/com/android/server/inputmethod/ClientController.java
@@ -43,21 +43,23 @@ final class ClientController {
@GuardedBy("ImfLock.class")
private final List<ClientControllerCallback> mCallbacks = new ArrayList<>();
+ @NonNull
private final PackageManagerInternal mPackageManagerInternal;
interface ClientControllerCallback {
- void onClientRemoved(ClientState client);
+ void onClientRemoved(@NonNull ClientState client);
}
- ClientController(PackageManagerInternal packageManagerInternal) {
+ ClientController(@NonNull PackageManagerInternal packageManagerInternal) {
mPackageManagerInternal = packageManagerInternal;
}
@GuardedBy("ImfLock.class")
- ClientState addClient(IInputMethodClientInvoker clientInvoker,
- IRemoteInputConnection inputConnection, int selfReportedDisplayId, int callerUid,
- int callerPid) {
+ @NonNull
+ ClientState addClient(@NonNull IInputMethodClientInvoker clientInvoker,
+ @NonNull IRemoteInputConnection fallbackInputConnection, int selfReportedDisplayId,
+ int callerUid, int callerPid) {
final IBinder.DeathRecipient deathRecipient = () -> {
// Exceptionally holding ImfLock here since this is a internal lambda expression.
synchronized (ImfLock.class) {
@@ -90,15 +92,15 @@ final class ClientController {
// have the client crash. Thus we do not verify the display ID at all here. Instead we
// later check the display ID every time the client needs to interact with the specified
// display.
- final ClientState cs = new ClientState(clientInvoker, inputConnection,
- callerUid, callerPid, selfReportedDisplayId, deathRecipient);
+ final var cs = new ClientState(clientInvoker, fallbackInputConnection, callerUid, callerPid,
+ selfReportedDisplayId, deathRecipient);
mClients.put(clientInvoker.asBinder(), cs);
return cs;
}
@VisibleForTesting
@GuardedBy("ImfLock.class")
- boolean removeClient(IInputMethodClient client) {
+ boolean removeClient(@NonNull IInputMethodClient client) {
return removeClientAsBinder(client.asBinder());
}
@@ -116,7 +118,7 @@ final class ClientController {
}
@GuardedBy("ImfLock.class")
- void addClientControllerCallback(ClientControllerCallback callback) {
+ void addClientControllerCallback(@NonNull ClientControllerCallback callback) {
mCallbacks.add(callback);
}
@@ -127,15 +129,15 @@ final class ClientController {
}
@GuardedBy("ImfLock.class")
- void forAllClients(Consumer<ClientState> consumer) {
+ void forAllClients(@NonNull Consumer<ClientState> consumer) {
for (int i = 0; i < mClients.size(); i++) {
consumer.accept(mClients.valueAt(i));
}
}
@GuardedBy("ImfLock.class")
- boolean verifyClientAndPackageMatch(
- @NonNull IInputMethodClient client, @NonNull String packageName) {
+ boolean verifyClientAndPackageMatch(@NonNull IInputMethodClient client,
+ @NonNull String packageName) {
final ClientState cs = mClients.get(client.asBinder());
if (cs == null) {
throw new IllegalArgumentException("unknown client " + client.asBinder());
diff --git a/services/core/java/com/android/server/inputmethod/ClientState.java b/services/core/java/com/android/server/inputmethod/ClientState.java
index e98a5a73ab90..ea8099584627 100644
--- a/services/core/java/com/android/server/inputmethod/ClientState.java
+++ b/services/core/java/com/android/server/inputmethod/ClientState.java
@@ -16,6 +16,8 @@
package com.android.server.inputmethod;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.os.IBinder;
import android.util.SparseArray;
import android.view.inputmethod.InputBinding;
@@ -24,12 +26,17 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.inputmethod.IRemoteInputConnection;
final class ClientState {
+
+ @NonNull
final IInputMethodClientInvoker mClient;
+ @NonNull
final IRemoteInputConnection mFallbackInputConnection;
final int mUid;
final int mPid;
final int mSelfReportedDisplayId;
+ @NonNull
final InputBinding mBinding;
+ @NonNull
final IBinder.DeathRecipient mClientDeathRecipient;
@GuardedBy("ImfLock.class")
@@ -39,30 +46,31 @@ final class ClientState {
boolean mSessionRequestedForAccessibility;
@GuardedBy("ImfLock.class")
+ @Nullable
InputMethodManagerService.SessionState mCurSession;
@GuardedBy("ImfLock.class")
- SparseArray<InputMethodManagerService.AccessibilitySessionState> mAccessibilitySessions =
+ @NonNull
+ final SparseArray<InputMethodManagerService.AccessibilitySessionState> mAccessibilitySessions =
new SparseArray<>();
- @Override
- public String toString() {
- return "ClientState{" + Integer.toHexString(
- System.identityHashCode(this)) + " mUid=" + mUid
- + " mPid=" + mPid + " mSelfReportedDisplayId=" + mSelfReportedDisplayId + "}";
- }
-
- ClientState(IInputMethodClientInvoker client,
- IRemoteInputConnection fallbackInputConnection,
- int uid, int pid, int selfReportedDisplayId,
- IBinder.DeathRecipient clientDeathRecipient) {
+ ClientState(@NonNull IInputMethodClientInvoker client,
+ @NonNull IRemoteInputConnection fallbackInputConnection, int uid, int pid,
+ int selfReportedDisplayId, @NonNull IBinder.DeathRecipient clientDeathRecipient) {
mClient = client;
mFallbackInputConnection = fallbackInputConnection;
mUid = uid;
mPid = pid;
mSelfReportedDisplayId = selfReportedDisplayId;
- mBinding = new InputBinding(null /*conn*/, mFallbackInputConnection.asBinder(), mUid,
+ mBinding = new InputBinding(null /* conn */, fallbackInputConnection.asBinder(), mUid,
mPid);
mClientDeathRecipient = clientDeathRecipient;
}
+
+ @Override
+ public String toString() {
+ return "ClientState{" + Integer.toHexString(System.identityHashCode(this))
+ + " mUid=" + mUid + " mPid=" + mPid
+ + " mSelfReportedDisplayId=" + mSelfReportedDisplayId + "}";
+ }
}
diff --git a/services/core/java/com/android/server/inputmethod/IInputMethodClientInvoker.java b/services/core/java/com/android/server/inputmethod/IInputMethodClientInvoker.java
index 650ea605d391..9d889839879b 100644
--- a/services/core/java/com/android/server/inputmethod/IInputMethodClientInvoker.java
+++ b/services/core/java/com/android/server/inputmethod/IInputMethodClientInvoker.java
@@ -58,23 +58,17 @@ final class IInputMethodClientInvoker {
private final Handler mHandler;
@AnyThread
- @Nullable
- static IInputMethodClientInvoker create(@Nullable IInputMethodClient inputMethodClient,
+ @NonNull
+ static IInputMethodClientInvoker create(@NonNull IInputMethodClient inputMethodClient,
@NonNull Handler handler) {
- if (inputMethodClient == null) {
- return null;
- }
final boolean isProxy = Binder.isProxy(inputMethodClient);
return new IInputMethodClientInvoker(inputMethodClient, isProxy, isProxy ? null : handler);
}
@AnyThread
- @Nullable
- static IInputMethodClientInvoker create$ravenwood(
- @Nullable IInputMethodClient inputMethodClient, @NonNull Handler handler) {
- if (inputMethodClient == null) {
- return null;
- }
+ @NonNull
+ static IInputMethodClientInvoker create$ravenwood(@NonNull IInputMethodClient inputMethodClient,
+ @NonNull Handler handler) {
return new IInputMethodClientInvoker(inputMethodClient, true, null);
}
diff --git a/services/core/java/com/android/server/inputmethod/IInputMethodManagerImpl.java b/services/core/java/com/android/server/inputmethod/IInputMethodManagerImpl.java
index a8b61af61cf2..02987a98417f 100644
--- a/services/core/java/com/android/server/inputmethod/IInputMethodManagerImpl.java
+++ b/services/core/java/com/android/server/inputmethod/IInputMethodManagerImpl.java
@@ -89,8 +89,8 @@ final class IInputMethodManagerImpl extends IInputMethodManager.Stub {
@BinderThread
interface Callback {
- void addClient(IInputMethodClient client, IRemoteInputConnection inputConnection,
- int selfReportedDisplayId);
+ void addClient(@NonNull IInputMethodClient client,
+ @NonNull IRemoteInputConnection inputConnection, int selfReportedDisplayId);
InputMethodInfo getCurrentInputMethodInfoAsUser(@UserIdInt int userId);
@@ -242,9 +242,9 @@ final class IInputMethodManagerImpl extends IInputMethodManager.Stub {
}
@Override
- public void addClient(IInputMethodClient client, IRemoteInputConnection inputmethod,
- int untrustedDisplayId) {
- mCallback.addClient(client, inputmethod, untrustedDisplayId);
+ public void addClient(@NonNull IInputMethodClient client,
+ @NonNull IRemoteInputConnection fallbackInputConnection, int untrustedDisplayId) {
+ mCallback.addClient(client, fallbackInputConnection, untrustedDisplayId);
}
@Override
@@ -414,7 +414,7 @@ final class IInputMethodManagerImpl extends IInputMethodManager.Stub {
}
@Override
- public void reportPerceptibleAsync(IBinder windowToken, boolean perceptible) {
+ public void reportPerceptibleAsync(@NonNull IBinder windowToken, boolean perceptible) {
mCallback.reportPerceptibleAsync(windowToken, perceptible);
}
diff --git a/services/core/java/com/android/server/inputmethod/ImeBindingState.java b/services/core/java/com/android/server/inputmethod/ImeBindingState.java
index 5deed39a2dce..adfd991b3fbc 100644
--- a/services/core/java/com/android/server/inputmethod/ImeBindingState.java
+++ b/services/core/java/com/android/server/inputmethod/ImeBindingState.java
@@ -43,9 +43,9 @@ final class ImeBindingState {
final int mUserId;
/**
- * The last window token that we confirmed to be focused. This is always updated upon
- * reports from the input method client. If the window state is already changed before the
- * report is handled, this field just keeps the last value.
+ * The last window token that we confirmed to be focused. This is always updated upon reports
+ * from the input method client. If the window state is already changed before the report is
+ * handled, this field just keeps the last value.
*/
@Nullable
final IBinder mFocusedWindow;
@@ -59,11 +59,9 @@ final class ImeBindingState {
final int mFocusedWindowSoftInputMode;
/**
- * The client by which {@link #mFocusedWindow} was reported. This gets updated whenever
- * an
- * IME-focusable window gained focus (without necessarily starting an input connection),
- * while {@link InputMethodManagerService#mClient} only gets updated when we actually start an
- * input connection.
+ * The client by which {@link #mFocusedWindow} was reported. This gets updated whenever an
+ * IME-focusable window gained focus (without necessarily starting an input connection), while
+ * {@link UserData#mCurClient} only gets updated when we actually start an input connection.
*
* @see #mFocusedWindow
*/
@@ -72,15 +70,16 @@ final class ImeBindingState {
/**
* The editor info by which {@link #mFocusedWindow} was reported. This differs from
- * {@link InputMethodManagerService#mCurEditorInfo} the same way {@link #mFocusedWindowClient}
- * differs from {@link InputMethodManagerService#mCurClient}.
+ * {@link UserData#mCurEditorInfo} the same way {@link #mFocusedWindowClient} differs from
+ * {@link UserData#mCurClient}.
*
* @see #mFocusedWindow
*/
@Nullable
final EditorInfo mFocusedWindowEditorInfo;
- void dumpDebug(ProtoOutputStream proto, WindowManagerInternal windowManagerInternal) {
+ void dumpDebug(@NonNull ProtoOutputStream proto,
+ @NonNull WindowManagerInternal windowManagerInternal) {
proto.write(CUR_FOCUSED_WINDOW_NAME,
windowManagerInternal.getWindowName(mFocusedWindow));
proto.write(CUR_FOCUSED_WINDOW_SOFT_INPUT_MODE,
@@ -94,18 +93,14 @@ final class ImeBindingState {
p.println(prefix + "mFocusedWindowClient=" + mFocusedWindowClient);
}
+ @NonNull
static ImeBindingState newEmptyState() {
- return new ImeBindingState(
- /*userId=*/ UserHandle.USER_NULL,
- /*focusedWindow=*/ null,
- /*focusedWindowSoftInputMode=*/ SOFT_INPUT_STATE_UNSPECIFIED,
- /*focusedWindowClient=*/ null,
- /*focusedWindowEditorInfo=*/ null
- );
+ return new ImeBindingState(UserHandle.USER_NULL /* userId */, null /* focusedWindow */,
+ SOFT_INPUT_STATE_UNSPECIFIED /* focusedWindowSoftInputMode */,
+ null /* focusedWindowClient */, null /* focusedWindowEditorInfo */);
}
- ImeBindingState(@UserIdInt int userId,
- @Nullable IBinder focusedWindow,
+ ImeBindingState(@UserIdInt int userId, @Nullable IBinder focusedWindow,
@SoftInputModeFlags int focusedWindowSoftInputMode,
@Nullable ClientState focusedWindowClient,
@Nullable EditorInfo focusedWindowEditorInfo) {
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index dfdd9e54fe2e..af726bd28718 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -482,10 +482,15 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
};
static class SessionState {
+
+ @NonNull
final ClientState mClient;
+ @NonNull
final IInputMethodInvoker mMethod;
+ @Nullable
IInputMethodSession mSession;
+ @Nullable
InputChannel mChannel;
@UserIdInt
@@ -496,14 +501,13 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
return "SessionState{uid=" + mClient.mUid + " pid=" + mClient.mPid
+ " method=" + Integer.toHexString(
IInputMethodInvoker.getBinderIdentityHashCode(mMethod))
- + " session=" + Integer.toHexString(
- System.identityHashCode(mSession))
+ + " session=" + Integer.toHexString(System.identityHashCode(mSession))
+ " channel=" + mChannel
+ " userId=" + mUserId
+ "}";
}
- SessionState(ClientState client, IInputMethodInvoker method,
+ SessionState(@NonNull ClientState client, @NonNull IInputMethodInvoker method,
IInputMethodSession session, InputChannel channel, @UserIdInt int userId) {
mClient = client;
mMethod = method;
@@ -517,22 +521,24 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
* Record session state for an accessibility service.
*/
static class AccessibilitySessionState {
+
+ @NonNull
final ClientState mClient;
// Id of the accessibility service.
final int mId;
- public IAccessibilityInputMethodSession mSession;
+ @Nullable
+ IAccessibilityInputMethodSession mSession;
@Override
public String toString() {
return "AccessibilitySessionState{uid=" + mClient.mUid + " pid=" + mClient.mPid
+ " id=" + Integer.toHexString(mId)
- + " session=" + Integer.toHexString(
- System.identityHashCode(mSession))
+ + " session=" + Integer.toHexString(System.identityHashCode(mSession))
+ "}";
}
- AccessibilitySessionState(ClientState client, int id,
+ AccessibilitySessionState(@NonNull ClientState client, int id,
IAccessibilityInputMethodSession session) {
mClient = client;
mId = id;
@@ -544,6 +550,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
* Manages the IME clients.
*/
@SharedByAllUsersField
+ @NonNull
private final ClientController mClientController;
/**
@@ -1770,19 +1777,21 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
* <p>As a general principle, IPCs from the application process that take
* {@link IInputMethodClient} will be rejected without this step.</p>
*
- * @param client {@link android.os.Binder} proxy that is associated with the
- * singleton instance of
- * {@link android.view.inputmethod.InputMethodManager} that runs
- * on the client process
- * @param inputConnection communication channel for the fallback {@link InputConnection}
- * @param selfReportedDisplayId self-reported display ID to which the client is associated.
- * Whether the client is still allowed to access to this display
- * or not needs to be evaluated every time the client interacts
- * with the display
+ * @param client {@link android.os.Binder} proxy that is associated with the
+ * singleton instance of
+ * {@link android.view.inputmethod.InputMethodManager} that runs
+ * on the client process
+ * @param fallbackInputConnection communication channel for the fallback {@link InputConnection}
+ * @param selfReportedDisplayId self-reported display ID to which the client is associated.
+ * Whether the client is still allowed to access to this display
+ * or not needs to be evaluated every time the client interacts
+ * with the display
*/
@Override
- public void addClient(IInputMethodClient client, IRemoteInputConnection inputConnection,
- int selfReportedDisplayId) {
+ public void addClient(@NonNull IInputMethodClient client,
+ @NonNull IRemoteInputConnection fallbackInputConnection, int selfReportedDisplayId) {
+ Objects.requireNonNull(client, "client must not be null");
+ Objects.requireNonNull(fallbackInputConnection, "fallbackInputConnection must not be null");
// Here there are two scenarios where this method is called:
// A. IMM is being instantiated in a different process and this is an IPC from that process
// B. IMM is being instantiated in the same process but Binder.clearCallingIdentity() is
@@ -1791,16 +1800,15 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
// actually running.
final int callerUid = Binder.getCallingUid();
final int callerPid = Binder.getCallingPid();
- final IInputMethodClientInvoker clientInvoker =
- IInputMethodClientInvoker.create(client, mHandler);
+ final var clientInvoker = IInputMethodClientInvoker.create(client, mHandler);
synchronized (ImfLock.class) {
- mClientController.addClient(clientInvoker, inputConnection, selfReportedDisplayId,
- callerUid, callerPid);
+ mClientController.addClient(clientInvoker, fallbackInputConnection,
+ selfReportedDisplayId, callerUid, callerPid);
}
}
@GuardedBy("ImfLock.class")
- private void onClientRemoved(ClientState client) {
+ private void onClientRemoved(@NonNull ClientState client) {
clearClientSessionLocked(client);
clearClientSessionForAccessibilityLocked(client);
// TODO(b/324907325): Remove the suppress warnings once b/324907325 is fixed.
@@ -1814,7 +1822,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
*/
// TODO(b/325515685): Move this method to InputMethodBindingController
@GuardedBy("ImfLock.class")
- private void onClientRemovedInternalLocked(ClientState client, @NonNull UserData userData) {
+ private void onClientRemovedInternalLocked(@NonNull ClientState client,
+ @NonNull UserData userData) {
final int userId = userData.mUserId;
if (userData.mCurClient == client) {
hideCurrentInputLocked(userData.mImeBindingState.mFocusedWindow, 0 /* flags */,
@@ -1962,7 +1971,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
session.mMethod.startInput(startInputToken, userData.mCurInputConnection,
userData.mCurEditorInfo, restarting, navButtonFlags, userData.mCurImeDispatcher);
if (Flags.refactorInsetsController()) {
- if (isShowRequestedForCurrentWindow(userId) && userData.mImeBindingState != null
+ if (isShowRequestedForCurrentWindow(userId)
&& userData.mImeBindingState.mFocusedWindow != null) {
// Re-use current statsToken, if it exists.
final var statsToken = userData.mCurStatsToken != null ? userData.mCurStatsToken
@@ -2028,15 +2037,14 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
}
}
+ @NonNull
private SparseArray<IAccessibilityInputMethodSession> createAccessibilityInputMethodSessions(
- SparseArray<AccessibilitySessionState> accessibilitySessions) {
- final SparseArray<IAccessibilityInputMethodSession> accessibilityInputMethodSessions =
- new SparseArray<>();
- if (accessibilitySessions != null) {
- for (int i = 0; i < accessibilitySessions.size(); i++) {
- accessibilityInputMethodSessions.append(accessibilitySessions.keyAt(i),
- accessibilitySessions.valueAt(i).mSession);
- }
+ @NonNull SparseArray<AccessibilitySessionState> accessibilitySessions) {
+ final var accessibilityInputMethodSessions =
+ new SparseArray<IAccessibilityInputMethodSession>();
+ for (int i = 0; i < accessibilitySessions.size(); i++) {
+ accessibilityInputMethodSessions.append(accessibilitySessions.keyAt(i),
+ accessibilitySessions.valueAt(i).mSession);
}
return accessibilityInputMethodSessions;
}
@@ -2547,14 +2555,14 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
}
@GuardedBy("ImfLock.class")
- void clearClientSessionLocked(ClientState cs) {
+ void clearClientSessionLocked(@NonNull ClientState cs) {
finishSessionLocked(cs.mCurSession);
cs.mCurSession = null;
cs.mSessionRequested = false;
}
@GuardedBy("ImfLock.class")
- void clearClientSessionForAccessibilityLocked(ClientState cs) {
+ void clearClientSessionForAccessibilityLocked(@NonNull ClientState cs) {
for (int i = 0; i < cs.mAccessibilitySessions.size(); i++) {
finishSessionForAccessibilityLocked(cs.mAccessibilitySessions.valueAt(i));
}
@@ -2563,7 +2571,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
}
@GuardedBy("ImfLock.class")
- void clearClientSessionForAccessibilityLocked(ClientState cs, int id) {
+ void clearClientSessionForAccessibilityLocked(@NonNull ClientState cs, int id) {
AccessibilitySessionState session = cs.mAccessibilitySessions.get(id);
if (session != null) {
finishSessionForAccessibilityLocked(session);
@@ -2572,7 +2580,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
}
@GuardedBy("ImfLock.class")
- private void finishSessionLocked(SessionState sessionState) {
+ private void finishSessionLocked(@Nullable SessionState sessionState) {
if (sessionState != null) {
if (sessionState.mSession != null) {
try {
@@ -2885,8 +2893,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
ProtoLog.v(IMMS_DEBUG, "IME window vis: %s active: %s visible: %s displayId: %s", vis,
(vis & InputMethodService.IME_ACTIVE), (vis & InputMethodService.IME_VISIBLE),
curTokenDisplayId);
- final IBinder focusedWindowToken = userData.mImeBindingState != null
- ? userData.mImeBindingState.mFocusedWindow : null;
+ final IBinder focusedWindowToken = userData.mImeBindingState.mFocusedWindow;
final Boolean windowPerceptible = focusedWindowToken != null
? mFocusedWindowPerceptible.get(focusedWindowToken) : null;
@@ -3474,7 +3481,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
@BinderThread
@Override
- public void reportPerceptibleAsync(IBinder windowToken, boolean perceptible) {
+ public void reportPerceptibleAsync(@NonNull IBinder windowToken, boolean perceptible) {
Binder.withCleanCallingIdentity(() -> {
Objects.requireNonNull(windowToken, "windowToken must not be null");
synchronized (ImfLock.class) {
@@ -4868,7 +4875,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
@GuardedBy("ImfLock.class")
void setEnabledSessionForAccessibilityLocked(
- SparseArray<AccessibilitySessionState> accessibilitySessions,
+ @NonNull SparseArray<AccessibilitySessionState> accessibilitySessions,
@NonNull UserData userData) {
// mEnabledAccessibilitySessions could the same object as accessibilitySessions.
SparseArray<IAccessibilityInputMethodSession> disabledSessions = new SparseArray<>();
@@ -4964,8 +4971,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
}
}
- mMenuControllerNew.show(imList, lastInputMethodId, selectedSubtypeIndex, displayId,
- userId);
+ mMenuControllerNew.show(imList, lastInputMethodId, selectedSubtypeIndex, isScreenLocked,
+ displayId, userId);
} else {
mMenuController.showInputMethodMenuLocked(showAuxSubtypes, displayId,
lastInputMethodId, lastInputMethodSubtypeIndex, imList, userId);
@@ -5156,7 +5163,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
interactive ? bindingController.getImeWindowVis() : 0,
bindingController.getBackDisposition(), userId);
// Inform the current client of the change in active status
- if (userData.mCurClient == null || userData.mCurClient.mClient == null) {
+ if (userData.mCurClient == null) {
return;
}
if (mImePlatformCompatUtils.shouldUseSetInteractiveProtocol(
@@ -5920,9 +5927,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
// from all clients.
if (bindingController.getCurMethod() != null) {
// TODO(b/324907325): Remove the suppress warnings once b/324907325 is fixed.
- @SuppressWarnings("GuardedBy") Consumer<ClientState> clearClientSession =
- c -> clearClientSessionForAccessibilityLocked(c,
- accessibilityConnectionId);
+ @SuppressWarnings("GuardedBy") Consumer<ClientState> clearClientSession = c ->
+ clearClientSessionForAccessibilityLocked(c, accessibilityConnectionId);
mClientController.forAllClients(clearClientSession);
AccessibilitySessionState session = userData.mEnabledAccessibilitySessions.get(
@@ -5998,7 +6004,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
@BinderThread
@GuardedBy("ImfLock.class")
private void reportFullscreenModeLocked(boolean fullscreen, @NonNull UserData userData) {
- if (userData.mCurClient != null && userData.mCurClient.mClient != null) {
+ if (userData.mCurClient != null) {
userData.mInFullscreenMode = fullscreen;
userData.mCurClient.mClient.reportFullscreenMode(fullscreen);
}
@@ -6732,9 +6738,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
boolean setImeVisibilityOnFocusedWindowClient(boolean visible, UserData userData,
@NonNull ImeTracker.Token statsToken) {
if (Flags.refactorInsetsController()) {
- if (userData.mImeBindingState != null
- && userData.mImeBindingState.mFocusedWindowClient != null
- && userData.mImeBindingState.mFocusedWindowClient.mClient != null) {
+ if (userData.mImeBindingState.mFocusedWindowClient != null) {
userData.mImeBindingState.mFocusedWindowClient.mClient.setImeVisibility(visible,
statsToken);
return true;
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodMenuControllerNew.java b/services/core/java/com/android/server/inputmethod/InputMethodMenuControllerNew.java
index 9f94905686fe..ea8aabc3f605 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodMenuControllerNew.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodMenuControllerNew.java
@@ -87,12 +87,14 @@ final class InputMethodMenuControllerNew {
* @param selectedSubtypeIndex the index of the selected subtype in the input method's array of
* subtypes, or {@link InputMethodUtils#NOT_A_SUBTYPE_INDEX} if no
* subtype is selected.
+ * @param isScreenLocked whether the screen is current locked.
* @param displayId the ID of the display where the menu was requested.
* @param userId the ID of the user that requested the menu.
*/
@RequiresPermission(allOf = {INTERACT_ACROSS_USERS, HIDE_OVERLAY_WINDOWS})
void show(@NonNull List<ImeSubtypeListItem> items, @Nullable String selectedImeId,
- int selectedSubtypeIndex, int displayId, @UserIdInt int userId) {
+ int selectedSubtypeIndex, boolean isScreenLocked, int displayId,
+ @UserIdInt int userId) {
// Hide the menu in case it was already showing.
hide(displayId, userId);
@@ -133,7 +135,7 @@ final class InputMethodMenuControllerNew {
recyclerView.requestFocus();
final var selectedItem = selectedIndex > -1 ? menuItems.get(selectedIndex) : null;
- updateLanguageSettingsButton(selectedItem, contentView, displayId, userId);
+ updateLanguageSettingsButton(selectedItem, contentView, isScreenLocked, displayId, userId);
builder.setOnCancelListener(dialog -> hide(displayId, userId));
mMenuItems = menuItems;
@@ -280,23 +282,24 @@ final class InputMethodMenuControllerNew {
/**
* Updates the visibility of the Language Settings button to visible if the currently selected
- * item specifies a (language) settings activity and the device is provisioned. Otherwise,
- * the button won't be shown.
+ * item specifies a (language) settings activity, the screen is not locked and the device is
+ * provisioned. Otherwise, the button won't be shown.
*
- * @param selectedItem the currently selected item, or {@code null} if no item is selected.
- * @param view the menu dialog view.
- * @param displayId the ID of the display where the menu was requested.
- * @param userId the ID of the user that requested the menu.
+ * @param selectedItem the currently selected item, or {@code null} if no item is selected.
+ * @param view the menu dialog view.
+ * @param isScreenLocked whether the screen is currently locked.
+ * @param displayId the ID of the display where the menu was requested.
+ * @param userId the ID of the user that requested the menu.
*/
@RequiresPermission(allOf = {INTERACT_ACROSS_USERS})
private void updateLanguageSettingsButton(@Nullable MenuItem selectedItem, @NonNull View view,
- int displayId, @UserIdInt int userId) {
+ boolean isScreenLocked, int displayId, @UserIdInt int userId) {
final var settingsIntent = (selectedItem instanceof SubtypeItem selectedSubtypeItem)
? selectedSubtypeItem.mImi.createImeLanguageSettingsActivityIntent() : null;
final boolean isDeviceProvisioned = Settings.Global.getInt(
view.getContext().getContentResolver(), Settings.Global.DEVICE_PROVISIONED,
0) != 0;
- final boolean hasButton = settingsIntent != null && isDeviceProvisioned;
+ final boolean hasButton = settingsIntent != null && !isScreenLocked && isDeviceProvisioned;
final View buttonBar = view.requireViewById(com.android.internal.R.id.button_bar);
final Button button = view.requireViewById(com.android.internal.R.id.button1);
final RecyclerView recyclerView = view.requireViewById(com.android.internal.R.id.list);
diff --git a/services/core/java/com/android/server/inputmethod/UserData.java b/services/core/java/com/android/server/inputmethod/UserData.java
index 96da17e434e1..7377908ac103 100644
--- a/services/core/java/com/android/server/inputmethod/UserData.java
+++ b/services/core/java/com/android/server/inputmethod/UserData.java
@@ -140,9 +140,9 @@ final class UserData {
InputMethodManagerService.SessionState mEnabledSession;
@GuardedBy("ImfLock.class")
- @Nullable
- SparseArray<InputMethodManagerService.AccessibilitySessionState>
- mEnabledAccessibilitySessions = new SparseArray<>();
+ @NonNull
+ SparseArray<InputMethodManagerService.AccessibilitySessionState> mEnabledAccessibilitySessions =
+ new SparseArray<>();
/**
* A per-user cache of {@link InputMethodSettings#getEnabledInputMethodsStr()}.
diff --git a/services/core/java/com/android/server/inputmethod/ZeroJankProxy.java b/services/core/java/com/android/server/inputmethod/ZeroJankProxy.java
index b863c96facee..72529254545e 100644
--- a/services/core/java/com/android/server/inputmethod/ZeroJankProxy.java
+++ b/services/core/java/com/android/server/inputmethod/ZeroJankProxy.java
@@ -128,9 +128,9 @@ final class ZeroJankProxy implements IInputMethodManagerImpl.Callback {
}
@Override
- public void addClient(IInputMethodClient client, IRemoteInputConnection inputConnection,
- int selfReportedDisplayId) {
- offload(() -> mInner.addClient(client, inputConnection, selfReportedDisplayId));
+ public void addClient(@NonNull IInputMethodClient client,
+ @NonNull IRemoteInputConnection fallbackInputConnection, int selfReportedDisplayId) {
+ offload(() -> mInner.addClient(client, fallbackInputConnection, selfReportedDisplayId));
}
@Override
@@ -331,7 +331,7 @@ final class ZeroJankProxy implements IInputMethodManagerImpl.Callback {
}
@Override
- public void reportPerceptibleAsync(IBinder windowToken, boolean perceptible) {
+ public void reportPerceptibleAsync(@NonNull IBinder windowToken, boolean perceptible) {
// Already async TODO(b/293640003): ordering issues?
mInner.reportPerceptibleAsync(windowToken, perceptible);
}
@@ -468,7 +468,7 @@ final class ZeroJankProxy implements IInputMethodManagerImpl.Callback {
IInputMethodClient client, InputBindResult res, int startInputSeq) {
synchronized (ImfLock.class) {
final ClientState cs = mInner.getClientStateLocked(client);
- if (cs != null && cs.mClient != null) {
+ if (cs != null) {
cs.mClient.onStartInputResult(res, startInputSeq);
} else {
// client is unbound.
diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubEndpointBroker.java b/services/core/java/com/android/server/location/contexthub/ContextHubEndpointBroker.java
index 1a29150cd40c..940bcb4c6ba1 100644
--- a/services/core/java/com/android/server/location/contexthub/ContextHubEndpointBroker.java
+++ b/services/core/java/com/android/server/location/contexthub/ContextHubEndpointBroker.java
@@ -16,6 +16,7 @@
package com.android.server.location.contexthub;
+import android.annotation.NonNull;
import android.app.AppOpsManager;
import android.content.Context;
import android.hardware.contexthub.EndpointInfo;
@@ -64,7 +65,7 @@ public class ContextHubEndpointBroker extends IContextHubEndpoint.Stub
* Internal interface used to invoke client callbacks.
*/
interface CallbackConsumer {
- void accept(IContextHubEndpointCallback callback) throws RemoteException;
+ void accept(@NonNull IContextHubEndpointCallback callback) throws RemoteException;
}
/** The context of the service. */
@@ -86,7 +87,7 @@ public class ContextHubEndpointBroker extends IContextHubEndpoint.Stub
private final EndpointInfo mHalEndpointInfo;
/** The remote callback interface for this endpoint. */
- private final IContextHubEndpointCallback mContextHubEndpointCallback;
+ @NonNull private final IContextHubEndpointCallback mContextHubEndpointCallback;
/** True if this endpoint is registered with the service/HAL. */
@GuardedBy("mRegistrationLock")
@@ -158,7 +159,7 @@ public class ContextHubEndpointBroker extends IContextHubEndpoint.Stub
IEndpointCommunication hubInterface,
ContextHubEndpointManager endpointManager,
EndpointInfo halEndpointInfo,
- IContextHubEndpointCallback callback,
+ @NonNull IContextHubEndpointCallback callback,
String packageName,
String attributionTag,
ContextHubTransactionManager transactionManager) {
@@ -419,9 +420,7 @@ public class ContextHubEndpointBroker extends IContextHubEndpoint.Stub
}
/* package */ void attachDeathRecipient() throws RemoteException {
- if (mContextHubEndpointCallback != null) {
- mContextHubEndpointCallback.asBinder().linkToDeath(this, 0 /* flags */);
- }
+ mContextHubEndpointCallback.asBinder().linkToDeath(this, 0 /* flags */);
}
/* package */ void onEndpointSessionOpenRequest(
@@ -664,15 +663,13 @@ public class ContextHubEndpointBroker extends IContextHubEndpoint.Stub
* @return false if the callback threw a RemoteException
*/
private boolean invokeCallback(CallbackConsumer consumer) {
- if (mContextHubEndpointCallback != null) {
- acquireWakeLock();
- try {
- consumer.accept(mContextHubEndpointCallback);
- } catch (RemoteException e) {
- Log.e(TAG, "RemoteException while calling endpoint callback", e);
- releaseWakeLock();
- return false;
- }
+ acquireWakeLock();
+ try {
+ consumer.accept(mContextHubEndpointCallback);
+ } catch (RemoteException e) {
+ Log.e(TAG, "RemoteException while calling endpoint callback", e);
+ releaseWakeLock();
+ return false;
}
return true;
}
diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubEndpointManager.java b/services/core/java/com/android/server/location/contexthub/ContextHubEndpointManager.java
index 30bb8f3fa188..8ab581e1fb7a 100644
--- a/services/core/java/com/android/server/location/contexthub/ContextHubEndpointManager.java
+++ b/services/core/java/com/android/server/location/contexthub/ContextHubEndpointManager.java
@@ -17,6 +17,7 @@
package com.android.server.location.contexthub;
import android.annotation.IntDef;
+import android.annotation.NonNull;
import android.content.Context;
import android.hardware.contexthub.ContextHubInfo;
import android.hardware.contexthub.EndpointInfo;
@@ -240,7 +241,7 @@ import java.util.function.Consumer;
*/
/* package */ IContextHubEndpoint registerEndpoint(
HubEndpointInfo pendingEndpointInfo,
- IContextHubEndpointCallback callback,
+ @NonNull IContextHubEndpointCallback callback,
String packageName,
String attributionTag)
throws RemoteException {
diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubService.java b/services/core/java/com/android/server/location/contexthub/ContextHubService.java
index bf7351cb11db..2c0c55bd8df4 100644
--- a/services/core/java/com/android/server/location/contexthub/ContextHubService.java
+++ b/services/core/java/com/android/server/location/contexthub/ContextHubService.java
@@ -792,6 +792,10 @@ public class ContextHubService extends IContextHubService.Stub {
Log.e(TAG, "Endpoint manager failed to initialize");
throw new UnsupportedOperationException("Endpoint registration is not supported");
}
+ if (callback == null) {
+ Log.e(TAG, "Endpoint callback is invalid");
+ throw new IllegalArgumentException("registerEndpoint must have a non-null callback");
+ }
return mEndpointManager.registerEndpoint(
pendingHubEndpointInfo, callback, packageName, attributionTag);
}
diff --git a/services/core/java/com/android/server/location/injector/SystemEmergencyHelper.java b/services/core/java/com/android/server/location/injector/SystemEmergencyHelper.java
index 177eefb2ef2a..3f75b11befc2 100644
--- a/services/core/java/com/android/server/location/injector/SystemEmergencyHelper.java
+++ b/services/core/java/com/android/server/location/injector/SystemEmergencyHelper.java
@@ -29,7 +29,6 @@ import android.telephony.TelephonyManager;
import android.util.Log;
import com.android.internal.telephony.TelephonyIntents;
-import com.android.internal.telephony.flags.Flags;
import com.android.server.FgThread;
import java.util.Objects;
@@ -107,26 +106,19 @@ public class SystemEmergencyHelper extends EmergencyHelper {
boolean isInExtensionTime = mEmergencyCallEndRealtimeMs != Long.MIN_VALUE
&& (SystemClock.elapsedRealtime() - mEmergencyCallEndRealtimeMs) < extensionTimeMs;
- if (!Flags.enforceTelephonyFeatureMapping()) {
- return mIsInEmergencyCall
- || isInExtensionTime
- || mTelephonyManager.getEmergencyCallbackMode()
- || mTelephonyManager.isInEmergencySmsMode();
- } else {
- boolean emergencyCallbackMode = false;
- boolean emergencySmsMode = false;
- PackageManager pm = mContext.getPackageManager();
- if (pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_CALLING)) {
- emergencyCallbackMode = mTelephonyManager.getEmergencyCallbackMode();
- }
- if (pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_MESSAGING)) {
- emergencySmsMode = mTelephonyManager.isInEmergencySmsMode();
- }
- return mIsInEmergencyCall
- || isInExtensionTime
- || emergencyCallbackMode
- || emergencySmsMode;
+ boolean emergencyCallbackMode = false;
+ boolean emergencySmsMode = false;
+ PackageManager pm = mContext.getPackageManager();
+ if (pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_CALLING)) {
+ emergencyCallbackMode = mTelephonyManager.getEmergencyCallbackMode();
+ }
+ if (pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY_MESSAGING)) {
+ emergencySmsMode = mTelephonyManager.isInEmergencySmsMode();
}
+ return mIsInEmergencyCall
+ || isInExtensionTime
+ || emergencyCallbackMode
+ || emergencySmsMode;
}
private class EmergencyCallTelephonyCallback extends TelephonyCallback implements
diff --git a/services/core/java/com/android/server/om/OverlayManagerSettings.java b/services/core/java/com/android/server/om/OverlayManagerSettings.java
index cb01727524da..1ac971104486 100644
--- a/services/core/java/com/android/server/om/OverlayManagerSettings.java
+++ b/services/core/java/com/android/server/om/OverlayManagerSettings.java
@@ -544,6 +544,7 @@ final class OverlayManagerSettings {
// and overwritten.
throw new XmlPullParserException("old version " + oldVersion + "; ignoring");
case 3:
+ case 4:
// Upgrading from version 3 to 5 is not a breaking change so do not ignore the
// overlay file.
return;
diff --git a/services/core/java/com/android/server/pm/AppDataHelper.java b/services/core/java/com/android/server/pm/AppDataHelper.java
index 29f8243cfe60..ae415196f15e 100644
--- a/services/core/java/com/android/server/pm/AppDataHelper.java
+++ b/services/core/java/com/android/server/pm/AppDataHelper.java
@@ -24,6 +24,7 @@ import static com.android.server.pm.PackageManagerServiceUtils.logCriticalInfo;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.UserIdInt;
import android.content.pm.PackageManager;
import android.os.CreateAppDataArgs;
@@ -548,7 +549,7 @@ public class AppDataHelper {
return prepareAppDataFuture;
}
- void clearAppDataLIF(AndroidPackage pkg, int userId, int flags) {
+ void clearAppDataLIF(AndroidPackage pkg, @CanBeALL @UserIdInt int userId, int flags) {
if (pkg == null) {
return;
}
@@ -559,7 +560,8 @@ public class AppDataHelper {
}
}
- void clearAppDataLeafLIF(String packageName, String volumeUuid, int userId, int flags) {
+ void clearAppDataLeafLIF(String packageName, String volumeUuid, @CanBeALL @UserIdInt int userId,
+ int flags) {
final Computer snapshot = mPm.snapshotComputer();
final PackageStateInternal packageStateInternal =
snapshot.getPackageStateInternal(packageName);
diff --git a/services/core/java/com/android/server/pm/BackgroundInstallControlService.java b/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
index c3af578de369..463989adc98f 100644
--- a/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
+++ b/services/core/java/com/android/server/pm/BackgroundInstallControlService.java
@@ -332,7 +332,8 @@ public class BackgroundInstallControlService extends SystemService {
userId)
!= PERMISSION_GRANTED) {
if(Build.IS_DEBUGGABLE) {
- Slog.d(TAG, "handlePackageAdd " + packageName + ": installer doesn't "
+ Slog.d(TAG, "handlePackageAdd " + packageName + ": installer ("
+ + installerPackageName + ") doesn't "
+ "have INSTALL_PACKAGES permission, skipping");
}
return;
diff --git a/services/core/java/com/android/server/pm/DeletePackageHelper.java b/services/core/java/com/android/server/pm/DeletePackageHelper.java
index 90adb6683496..38aa57f785e5 100644
--- a/services/core/java/com/android/server/pm/DeletePackageHelper.java
+++ b/services/core/java/com/android/server/pm/DeletePackageHelper.java
@@ -24,6 +24,7 @@ import static android.content.pm.PackageManager.DELETE_KEEP_DATA;
import static android.content.pm.PackageManager.DELETE_SUCCEEDED;
import static android.content.pm.PackageManager.MATCH_KNOWN_PACKAGES;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+import static android.os.UserHandle.USER_ALL;
import static com.android.server.pm.InstructionSets.getAppDexInstructionSets;
import static com.android.server.pm.PackageManagerService.DEBUG_COMPRESSION;
@@ -35,6 +36,8 @@ import static com.android.server.pm.PackageManagerService.TAG;
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SpecialUsers.CanBeALL;
+import android.annotation.UserIdInt;
import android.app.ApplicationExitInfo;
import android.app.ApplicationPackageManager;
import android.content.Intent;
@@ -120,7 +123,7 @@ final class DeletePackageHelper {
final boolean res;
final int removeUser = (deleteFlags & PackageManager.DELETE_ALL_USERS) != 0
- ? UserHandle.USER_ALL : userId;
+ ? USER_ALL : userId;
final PackageSetting uninstalledPs;
final PackageSetting disabledSystemPs;
@@ -181,7 +184,7 @@ final class DeletePackageHelper {
if (libraryInfo != null) {
boolean flagSdkLibIndependence = Flags.sdkLibIndependence();
for (int currUserId : allUsers) {
- if (removeUser != UserHandle.USER_ALL && removeUser != currUserId) {
+ if (removeUser != USER_ALL && removeUser != currUserId) {
continue;
}
var libClientPackagesPair = computer.getPackagesUsingSharedLibrary(
@@ -225,7 +228,7 @@ final class DeletePackageHelper {
&& ((deleteFlags & PackageManager.DELETE_SYSTEM_APP) == 0)) {
// We're downgrading a system app, which will apply to all users, so
// freeze them all during the downgrade
- freezeUser = UserHandle.USER_ALL;
+ freezeUser = USER_ALL;
priorUserStates = new SparseArray<>();
for (int i = 0; i < allUsers.length; i++) {
PackageUserState userState = uninstalledPs.readUserState(allUsers[i]);
@@ -419,7 +422,7 @@ final class DeletePackageHelper {
if (PackageManagerServiceUtils.isSystemApp(ps)) {
final boolean deleteSystem = (flags & PackageManager.DELETE_SYSTEM_APP) != 0;
final boolean deleteAllUsers =
- user == null || user.getIdentifier() == UserHandle.USER_ALL;
+ user == null || user.getIdentifier() == USER_ALL;
if ((!deleteSystem || deleteAllUsers) && disabledPs == null) {
Slog.w(TAG, "Attempt to delete unknown system package "
+ ps.getPkg().getPackageName());
@@ -462,9 +465,9 @@ final class DeletePackageHelper {
Manifest.permission.SUSPEND_APPS, packageName, userId) == PERMISSION_GRANTED);
}
- final int userId = user == null ? UserHandle.USER_ALL : user.getIdentifier();
+ final int userId = user == null ? USER_ALL : user.getIdentifier();
// Remember which users are affected, before the installed states are modified
- outInfo.mRemovedUsers = userId == UserHandle.USER_ALL
+ outInfo.mRemovedUsers = userId == USER_ALL
? ps.queryUsersInstalledOrHasData(allUserHandles)
: new int[]{userId};
outInfo.populateBroadcastUsers(ps);
@@ -477,7 +480,7 @@ final class DeletePackageHelper {
outInfo.mRemovedPackageVersionCode = ps.getVersionCode();
if ((!systemApp || (flags & PackageManager.DELETE_SYSTEM_APP) != 0)
- && userId != UserHandle.USER_ALL) {
+ && userId != USER_ALL) {
// The caller is asking that the package only be deleted for a single
// user. To do this, we just mark its uninstalled state and delete
// its data. If this is a system app, we only allow this to happen if
@@ -550,7 +553,7 @@ final class DeletePackageHelper {
for (final int affectedUserId : outInfo.mRemovedUsers) {
if (hadSuspendAppsPermission.get(affectedUserId)) {
mPm.unsuspendForSuspendingPackage(snapshot, packageName,
- affectedUserId /*suspendingUserId*/, true /*inAllUsers*/);
+ affectedUserId /*suspendingUserId*/, USER_ALL);
mPm.removeAllDistractingPackageRestrictions(snapshot, affectedUserId);
}
}
@@ -562,7 +565,7 @@ final class DeletePackageHelper {
}
@GuardedBy("mPm.mInstallLock")
- private void deleteInstalledPackageLIF(PackageSetting ps, int userId,
+ private void deleteInstalledPackageLIF(PackageSetting ps, @CanBeALL @UserIdInt int userId,
boolean deleteCodeAndResources, int flags, @NonNull int[] allUserHandles,
@NonNull PackageRemovedInfo outInfo, boolean writeSettings) {
synchronized (mPm.mLock) {
@@ -588,7 +591,7 @@ final class DeletePackageHelper {
@GuardedBy("mPm.mLock")
private void markPackageUninstalledForUserLPw(PackageSetting ps, UserHandle user, int flags) {
- final int[] userIds = (user == null || user.getIdentifier() == UserHandle.USER_ALL)
+ final int[] userIds = (user == null || user.getIdentifier() == USER_ALL)
? mUserManagerInternal.getUserIds()
: new int[] {user.getIdentifier()};
for (int nextUserId : userIds) {
@@ -685,7 +688,7 @@ final class DeletePackageHelper {
flags |= PackageManager.DELETE_KEEP_DATA;
}
try (PackageManagerTracedLock installLock = mPm.mInstallLock.acquireLock()) {
- deleteInstalledPackageLIF(deletedPs, UserHandle.USER_ALL, true, flags, allUserHandles,
+ deleteInstalledPackageLIF(deletedPs, USER_ALL, true, flags, allUserHandles,
outInfo, writeSettings);
}
}
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java
index 28117470e7a3..f96846cdb2f4 100644
--- a/services/core/java/com/android/server/pm/InstallPackageHelper.java
+++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java
@@ -1398,6 +1398,8 @@ final class InstallPackageHelper {
Map<String, Boolean> createdAppId, boolean success) {
if (success) {
for (InstallRequest request : requests) {
+ mInjector.getAppOpsManagerInternal().onPackageAdded(
+ request.getName(), request.getAppId());
if (request.getDataLoaderType() != DataLoaderType.INCREMENTAL) {
continue;
}
diff --git a/services/core/java/com/android/server/pm/PackageFreezer.java b/services/core/java/com/android/server/pm/PackageFreezer.java
index 11f2059c4267..d66eb814ef66 100644
--- a/services/core/java/com/android/server/pm/PackageFreezer.java
+++ b/services/core/java/com/android/server/pm/PackageFreezer.java
@@ -18,6 +18,8 @@ package com.android.server.pm;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SpecialUsers.CanBeALL;
+import android.annotation.UserIdInt;
import android.content.pm.Flags;
import android.content.pm.PackageManager;
@@ -60,12 +62,12 @@ final class PackageFreezer implements AutoCloseable {
}
}
- PackageFreezer(String packageName, int userId, String killReason,
+ PackageFreezer(String packageName, @CanBeALL @UserIdInt int userId, String killReason,
PackageManagerService pm, int exitInfoReason, @Nullable InstallRequest request) {
this(packageName, userId, killReason, pm, exitInfoReason, request, false);
}
- PackageFreezer(String packageName, int userId, String killReason,
+ PackageFreezer(String packageName, @CanBeALL @UserIdInt int userId, String killReason,
PackageManagerService pm, int exitInfoReason, @Nullable InstallRequest request,
boolean waitAppKilled) {
mPm = pm;
diff --git a/services/core/java/com/android/server/pm/PackageManagerInternalBase.java b/services/core/java/com/android/server/pm/PackageManagerInternalBase.java
index ed568b823159..f5230c57c597 100644
--- a/services/core/java/com/android/server/pm/PackageManagerInternalBase.java
+++ b/services/core/java/com/android/server/pm/PackageManagerInternalBase.java
@@ -689,7 +689,7 @@ abstract class PackageManagerInternalBase extends PackageManagerInternal {
final int suspendingUserId =
crossUserSuspensionEnabledRo() ? UserHandle.USER_SYSTEM : affectedUser;
mService.unsuspendForSuspendingPackage(
- snapshot(), PLATFORM_PACKAGE_NAME, suspendingUserId, /* inAllUsers= */ false);
+ snapshot(), PLATFORM_PACKAGE_NAME, suspendingUserId, affectedUser);
}
@Override
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 2464a291b4dd..b60812c1bb53 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -34,6 +34,7 @@ import static android.content.pm.PackageManager.USER_MIN_ASPECT_RATIO_UNSET;
import static android.crashrecovery.flags.Flags.refactorCrashrecovery;
import static android.os.Process.INVALID_UID;
import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
+import static android.os.UserHandle.USER_ALL;
import static android.os.storage.StorageManager.FLAG_STORAGE_CE;
import static android.os.storage.StorageManager.FLAG_STORAGE_DE;
import static android.os.storage.StorageManager.FLAG_STORAGE_EXTERNAL;
@@ -50,12 +51,14 @@ import android.annotation.AppIdInt;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.StringRes;
import android.annotation.UserIdInt;
import android.annotation.WorkerThread;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.AppOpsManager;
+import android.app.AppOpsManagerInternal;
import android.app.ApplicationExitInfo;
import android.app.ApplicationPackageManager;
import android.app.BroadcastOptions;
@@ -1586,13 +1589,13 @@ public class PackageManagerService implements PackageSender, TestUtilityService
}
void scheduleWritePackageRestrictions(UserHandle user) {
- final int userId = user == null ? UserHandle.USER_ALL : user.getIdentifier();
+ final int userId = user == null ? USER_ALL : user.getIdentifier();
scheduleWritePackageRestrictions(userId);
}
- void scheduleWritePackageRestrictions(int userId) {
+ void scheduleWritePackageRestrictions(@CanBeALL @UserIdInt int userId) {
invalidatePackageInfoCache();
- if (userId == UserHandle.USER_ALL) {
+ if (userId == USER_ALL) {
synchronized (mDirtyUsers) {
for (int aUserId : mUserManager.getUserIds()) {
mDirtyUsers.add(aUserId);
@@ -1690,6 +1693,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
(i, pm) -> new ComponentResolver(i.getUserManagerService(), pm.mUserNeedsBadging),
(i, pm) -> PermissionManagerService.create(context,
i.getSystemConfig().getAvailableFeatures()),
+ (i, pm) -> LocalServices.getService(AppOpsManagerInternal.class),
(i, pm) -> new UserManagerService(context, pm,
new UserDataPreparer(installer, installLock, context), lock),
(i, pm) -> new Settings(Environment.getDataDirectory(),
@@ -1805,7 +1809,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
private void installAllowlistedSystemPackages() {
if (mUserManager.installWhitelistedSystemPackages(isFirstBoot(), isDeviceUpgrading(),
mExistingPackages)) {
- scheduleWritePackageRestrictions(UserHandle.USER_ALL);
+ scheduleWritePackageRestrictions(USER_ALL);
scheduleWriteSettings();
}
}
@@ -2392,7 +2396,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
final PackageSetting ps = packageSettings.valueAt(i);
if (Objects.equals(StorageManager.UUID_PRIVATE_INTERNAL, ps.getVolumeUuid())) {
// No apps are running this early, so no need to freeze
- mAppDataHelper.clearAppDataLIF(ps.getPkg(), UserHandle.USER_ALL,
+ mAppDataHelper.clearAppDataLIF(ps.getPkg(), USER_ALL,
FLAG_STORAGE_DE | FLAG_STORAGE_CE | FLAG_STORAGE_EXTERNAL
| Installer.FLAG_CLEAR_CODE_CACHE_ONLY
| Installer.FLAG_CLEAR_APP_DATA_KEEP_ART_PROFILES);
@@ -3074,8 +3078,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
}
@NonNull
- int[] resolveUserIds(int userId) {
- return (userId == UserHandle.USER_ALL) ? mUserManager.getUserIds() : new int[] { userId };
+ int[] resolveUserIds(@CanBeALL @UserIdInt int userId) {
+ return (userId == USER_ALL) ? mUserManager.getUserIds() : new int[]{userId};
}
private void setUpInstantAppInstallerActivityLP(ActivityInfo installerActivity) {
@@ -3108,11 +3112,11 @@ public class PackageManagerService implements PackageSender, TestUtilityService
}
void killApplication(String pkgName, @AppIdInt int appId, String reason, int exitInfoReason) {
- killApplication(pkgName, appId, UserHandle.USER_ALL, reason, exitInfoReason);
+ killApplication(pkgName, appId, USER_ALL, reason, exitInfoReason);
}
void killApplication(String pkgName, @AppIdInt int appId,
- @UserIdInt int userId, String reason, int exitInfoReason) {
+ @CanBeALL @UserIdInt int userId, String reason, int exitInfoReason) {
// Request the ActivityManager to kill the process(only for existing packages)
// so that we do not end up in a confused state while the user is still using the older
// version of the application while the new one gets installed.
@@ -3131,7 +3135,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
}
void killApplicationSync(String pkgName, @AppIdInt int appId,
- @UserIdInt int userId, String reason, int exitInfoReason) {
+ @CanBeALL @UserIdInt int userId, String reason, int exitInfoReason) {
ActivityManagerInternal mAmi = LocalServices.getService(ActivityManagerInternal.class);
if (Thread.holdsLock(mLock) || mAmi == null) {
// holds PM's lock, go back killApplication to avoid it run into watchdog reset.
@@ -3228,23 +3232,24 @@ public class PackageManagerService implements PackageSender, TestUtilityService
}
/**
- * @param inAllUsers Whether to unsuspend packages suspended by the given package in other
- * users. This flag is only used when cross-user suspension is enabled.
+ * @param suspendingUserId The user that has suspended apps using the suspending package.
+ * @param targetUserId The user whose apps should be unsuspended. Pass {@code USER_ALL} to
+ * unsuspend for all users.
*/
void unsuspendForSuspendingPackage(@NonNull Computer computer, String suspendingPackage,
- @UserIdInt int suspendingUserId, boolean inAllUsers) {
+ @UserIdInt int suspendingUserId, @CanBeALL @UserIdInt int targetUserId) {
// TODO: This can be replaced by a special parameter to iterate all packages, rather than
// this weird pre-collect of all packages.
final String[] allPackages = computer.getPackageStates().keySet().toArray(new String[0]);
final Predicate<UserPackage> suspenderPredicate =
UserPackage.of(suspendingUserId, suspendingPackage)::equals;
- if (!crossUserSuspensionEnabledRo() || !inAllUsers) {
+ if (!crossUserSuspensionEnabledRo() || targetUserId != USER_ALL) {
mSuspendPackageHelper.removeSuspensionsBySuspendingPackage(computer,
- allPackages, suspenderPredicate, suspendingUserId);
+ allPackages, suspenderPredicate, targetUserId);
} else {
- for (int targetUserId: mUserManager.getUserIds()) {
+ for (int user : mUserManager.getUserIds()) {
mSuspendPackageHelper.removeSuspensionsBySuspendingPackage(
- computer, allPackages, suspenderPredicate, targetUserId);
+ computer, allPackages, suspenderPredicate, user);
}
}
}
@@ -3381,11 +3386,11 @@ public class PackageManagerService implements PackageSender, TestUtilityService
&& !snapshot.isCallerSameApp(packageName, callingUid)) {
return false;
}
- return isPackageDeviceAdmin(packageName, UserHandle.USER_ALL);
+ return isPackageDeviceAdmin(packageName, USER_ALL);
}
// TODO(b/261957226): centralise this logic in DPM
- boolean isPackageDeviceAdmin(String packageName, int userId) {
+ boolean isPackageDeviceAdmin(String packageName, @CanBeALL @UserIdInt int userId) {
final IDevicePolicyManager dpm = getDevicePolicyManager();
final DevicePolicyManagerInternal dpmi =
mInjector.getLocalService(DevicePolicyManagerInternal.class);
@@ -3405,7 +3410,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
// Does it contain a device admin for any user?
int[] allUsers = mUserManager.getUserIds();
int[] targetUsers;
- if (userId == UserHandle.USER_ALL) {
+ if (userId == USER_ALL) {
targetUsers = allUsers;
} else {
targetUsers = new int[]{userId};
@@ -3555,7 +3560,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
/** This method takes a specific user id as well as UserHandle.USER_ALL. */
@GuardedBy("mLock")
void clearPackagePreferredActivitiesLPw(String packageName,
- @NonNull SparseBooleanArray outUserChanged, int userId) {
+ @NonNull SparseBooleanArray outUserChanged, @CanBeALL @UserIdInt int userId) {
mSettings.clearPackagePreferredActivities(packageName, outUserChanged, userId);
}
@@ -4152,7 +4157,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
// This app should not generally be allowed to get disabled by the UI, but
// if it ever does, we don't want to end up with some of the user's apps
// permanently suspended.
- unsuspendForSuspendingPackage(computer, packageName, userId, true /* inAllUsers */);
+ unsuspendForSuspendingPackage(computer, packageName, userId, USER_ALL);
removeAllDistractingPackageRestrictions(computer, userId);
}
success = true;
@@ -4243,9 +4248,9 @@ public class PackageManagerService implements PackageSender, TestUtilityService
};
mContext.getContentResolver().registerContentObserver(android.provider.Settings.Global
.getUriFor(Global.ENABLE_EPHEMERAL_FEATURE),
- false, co, UserHandle.USER_ALL);
+ false, co, USER_ALL);
mContext.getContentResolver().registerContentObserver(android.provider.Settings.Secure
- .getUriFor(Secure.INSTANT_APPS_ENABLED), false, co, UserHandle.USER_ALL);
+ .getUriFor(Secure.INSTANT_APPS_ENABLED), false, co, USER_ALL);
co.onChange(true);
mAppsFilter.onSystemReady(LocalServices.getService(PackageManagerInternal.class));
@@ -4388,14 +4393,14 @@ public class PackageManagerService implements PackageSender, TestUtilityService
}
}
- public PackageFreezer freezePackage(String packageName, int userId, String killReason,
- int exitInfoReason, InstallRequest request) {
+ public PackageFreezer freezePackage(String packageName, @CanBeALL @UserIdInt int userId,
+ String killReason, int exitInfoReason, InstallRequest request) {
return freezePackage(packageName, userId, killReason, exitInfoReason, request,
/* waitAppKilled= */ false);
}
- private PackageFreezer freezePackage(String packageName, int userId, String killReason,
- int exitInfoReason, InstallRequest request, boolean waitAppKilled) {
+ private PackageFreezer freezePackage(String packageName, @CanBeALL @UserIdInt int userId,
+ String killReason, int exitInfoReason, InstallRequest request, boolean waitAppKilled) {
return new PackageFreezer(packageName, userId, killReason, this, exitInfoReason, request,
waitAppKilled);
}
@@ -4773,7 +4778,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
final Computer snapshot = snapshotComputer();
final AndroidPackage pkg = snapshot.getPackage(packageName);
try (PackageFreezer ignored =
- freezePackage(packageName, UserHandle.USER_ALL,
+ freezePackage(packageName, USER_ALL,
"clearApplicationProfileData",
ApplicationExitInfo.REASON_OTHER, null /* request */)) {
try (PackageManagerTracedLock installLock = mInstallLock.acquireLock()) {
@@ -4819,7 +4824,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
public void run() {
mHandler.removeCallbacks(this);
final boolean succeeded;
- try (PackageFreezer freezer = freezePackage(packageName, UserHandle.USER_ALL,
+ try (PackageFreezer freezer = freezePackage(packageName, USER_ALL,
"clearApplicationUserData",
ApplicationExitInfo.REASON_USER_REQUESTED, null /* request */,
/* waitAppKilled= */ true)) {
@@ -4846,7 +4851,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
== PERMISSION_GRANTED) {
final Computer snapshot = snapshotComputer();
unsuspendForSuspendingPackage(
- snapshot, packageName, userId, true /* inAllUsers */);
+ snapshot, packageName, userId, USER_ALL);
removeAllDistractingPackageRestrictions(snapshot, userId);
synchronized (mLock) {
flushPackageRestrictionsAsUserInternalLocked(userId);
@@ -6371,13 +6376,13 @@ public class PackageManagerService implements PackageSender, TestUtilityService
if (mComponentResolver.updateMimeGroup(snapshotComputer(), packageName, mimeGroup)) {
Binder.withCleanCallingIdentity(() -> {
mPreferredActivityHelper.clearPackagePreferredActivities(packageName,
- UserHandle.USER_ALL);
+ USER_ALL);
// Send the ACTION_PACKAGE_CHANGED when the mimeGroup has changes
final Computer snapShot = snapshotComputer();
final ArrayList<String> components = new ArrayList<>(
Collections.singletonList(packageName));
final int appId = packageState.getAppId();
- final int[] userIds = resolveUserIds(UserHandle.USER_ALL);
+ final int[] userIds = resolveUserIds(USER_ALL);
final String reason = "The mimeGroup is changed";
for (int i = 0; i < userIds.length; i++) {
final PackageUserStateInternal pkgUserState =
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceInjector.java b/services/core/java/com/android/server/pm/PackageManagerServiceInjector.java
index ae2eaeb31f81..a9d367e570a0 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceInjector.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceInjector.java
@@ -17,6 +17,7 @@
package com.android.server.pm;
import android.app.ActivityManagerInternal;
+import android.app.AppOpsManagerInternal;
import android.app.backup.IBackupManager;
import android.content.ComponentName;
import android.content.Context;
@@ -96,6 +97,7 @@ public class PackageManagerServiceInjector {
mComponentResolverProducer;
private final Singleton<PermissionManagerServiceInternal>
mPermissionManagerServiceProducer;
+ private final Singleton<AppOpsManagerInternal> mAppOpsManagerInternalProducer;
private final Singleton<UserManagerService>
mUserManagerProducer;
private final Singleton<Settings> mSettingsProducer;
@@ -149,6 +151,7 @@ public class PackageManagerServiceInjector {
List<ScanPartition> systemPartitions,
Producer<ComponentResolver> componentResolverProducer,
Producer<PermissionManagerServiceInternal> permissionManagerServiceProducer,
+ Producer<AppOpsManagerInternal> appOpsManagerInternalProducer,
Producer<UserManagerService> userManagerProducer,
Producer<Settings> settingsProducer,
Producer<AppsFilterImpl> appsFilterProducer,
@@ -194,6 +197,7 @@ public class PackageManagerServiceInjector {
componentResolverProducer);
mPermissionManagerServiceProducer = new Singleton<>(
permissionManagerServiceProducer);
+ mAppOpsManagerInternalProducer = new Singleton<>(appOpsManagerInternalProducer);
mUserManagerProducer = new Singleton<>(userManagerProducer);
mSettingsProducer = new Singleton<>(settingsProducer);
mAppsFilterProducer = new Singleton<>(appsFilterProducer);
@@ -290,6 +294,10 @@ public class PackageManagerServiceInjector {
return mPermissionManagerServiceProducer.get(this, mPackageManager);
}
+ public AppOpsManagerInternal getAppOpsManagerInternal() {
+ return mAppOpsManagerInternalProducer.get(this, mPackageManager);
+ }
+
public Context getContext() {
return mContext;
}
diff --git a/services/core/java/com/android/server/pm/PreferredActivityHelper.java b/services/core/java/com/android/server/pm/PreferredActivityHelper.java
index 41d2aeb9b168..fa56596bf62d 100644
--- a/services/core/java/com/android/server/pm/PreferredActivityHelper.java
+++ b/services/core/java/com/android/server/pm/PreferredActivityHelper.java
@@ -25,6 +25,7 @@ import static com.android.server.pm.PackageManagerService.DEBUG_PREFERRED;
import static com.android.server.pm.PackageManagerService.TAG;
import android.annotation.NonNull;
+import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.UserIdInt;
import android.content.ComponentName;
import android.content.Intent;
@@ -115,7 +116,8 @@ final class PreferredActivityHelper {
}
/** This method takes a specific user id as well as UserHandle.USER_ALL. */
- public void clearPackagePreferredActivities(String packageName, int userId) {
+ public void clearPackagePreferredActivities(String packageName,
+ @CanBeALL @UserIdInt int userId) {
final SparseBooleanArray changedUsers = new SparseBooleanArray();
synchronized (mPm.mLock) {
mPm.clearPackagePreferredActivitiesLPw(packageName, changedUsers, userId);
diff --git a/services/core/java/com/android/server/pm/RemovePackageHelper.java b/services/core/java/com/android/server/pm/RemovePackageHelper.java
index f01a74e8d60d..22b4ec7b51b6 100644
--- a/services/core/java/com/android/server/pm/RemovePackageHelper.java
+++ b/services/core/java/com/android/server/pm/RemovePackageHelper.java
@@ -30,6 +30,8 @@ import static com.android.server.pm.PackageManagerService.TAG;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SpecialUsers.CanBeALL;
+import android.annotation.UserIdInt;
import android.content.pm.PackageManager;
import android.content.pm.parsing.ApkLiteParseUtils;
import android.content.pm.parsing.PackageLite;
@@ -256,7 +258,8 @@ final class RemovePackageHelper {
* Make sure this flag is set for partially installed apps. If not it's meaningless to
* delete a partially installed application.
*/
- public void clearPackageStateForUserLIF(PackageSetting ps, int userId, int flags) {
+ public void clearPackageStateForUserLIF(PackageSetting ps, @CanBeALL @UserIdInt int userId,
+ int flags) {
final String packageName = ps.getPackageName();
// Step 1: always destroy app profiles except when explicitly preserved
if ((flags & Installer.FLAG_CLEAR_APP_DATA_KEEP_ART_PROFILES) == 0) {
@@ -370,13 +373,13 @@ final class RemovePackageHelper {
* This method deletes the package from internal data structures such as mPackages / mSettings.
*
* @param targetUserId indicates the target user of the deletion. It equals to
- * {@link UserHandle.USER_ALL} if the deletion was initiated for all users,
+ * {@link UserHandle#USER_ALL} if the deletion was initiated for all users,
* otherwise it equals to the specific user id that the deletion was meant
* for.
*/
@GuardedBy("mPm.mInstallLock")
- public void removePackageDataLIF(final PackageSetting deletedPs, int targetUserId,
- @NonNull int[] allUserHandles,
+ public void removePackageDataLIF(final PackageSetting deletedPs,
+ @CanBeALL @UserIdInt int targetUserId, @NonNull int[] allUserHandles,
@NonNull PackageRemovedInfo outInfo, int flags, boolean writeSettings) {
String packageName = deletedPs.getPackageName();
if (DEBUG_REMOVE) Slog.d(TAG, "removePackageDataLI: " + deletedPs);
@@ -482,7 +485,8 @@ final class RemovePackageHelper {
}
}
- private static boolean shouldDeletePackageSetting(PackageSetting deletedPs, int userId,
+ private static boolean shouldDeletePackageSetting(PackageSetting deletedPs,
+ @CanBeALL @UserIdInt int userId,
int[] allUserHandles, int flags) {
if ((flags & PackageManager.DELETE_KEEP_DATA) != 0) {
return false;
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 485a28070bc5..92257f1ee2dd 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -35,6 +35,7 @@ import static com.android.server.pm.SharedUidMigration.BEST_EFFORT;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.UserIdInt;
import android.app.compat.ChangeIdStateCache;
import android.content.ComponentName;
@@ -6639,7 +6640,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
/** This method takes a specific user id as well as UserHandle.USER_ALL. */
void clearPackagePreferredActivities(String packageName,
- @NonNull SparseBooleanArray outUserChanged, int userId) {
+ @NonNull SparseBooleanArray outUserChanged, @CanBeALL @UserIdInt int userId) {
boolean changed = false;
ArrayList<PreferredActivity> removed = null;
for (int i = 0; i < mPreferredActivities.size(); i++) {
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index 5c5a9c1b6c05..ac19ea12c6a4 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -37,6 +37,7 @@ import android.Manifest;
import android.annotation.AppIdInt;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.AppOpsManager;
@@ -765,7 +766,7 @@ public class PermissionManagerService extends IPermissionManager.Stub {
@Override
public void onPackageUninstalled(@NonNull String packageName, int appId,
@NonNull PackageState packageState, @Nullable AndroidPackage pkg,
- @NonNull List<AndroidPackage> sharedUserPkgs, @UserIdInt int userId) {
+ @NonNull List<AndroidPackage> sharedUserPkgs, @CanBeALL @UserIdInt int userId) {
if (userId != UserHandle.USER_ALL) {
final int[] userIds = getAllUserIds();
if (!ArrayUtils.contains(userIds, userId)) {
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
index e51ec04e60fe..33d57d5cc2b9 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
@@ -65,6 +65,7 @@ import android.annotation.AppIdInt;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.AppOpsManager;
@@ -5284,7 +5285,7 @@ public class PermissionManagerServiceImpl implements PermissionManagerServiceInt
@Override
public void onPackageUninstalled(@NonNull String packageName, int appId,
@NonNull PackageState packageState, @Nullable AndroidPackage pkg,
- @NonNull List<AndroidPackage> sharedUserPkgs, @UserIdInt int userId) {
+ @NonNull List<AndroidPackage> sharedUserPkgs, @CanBeALL @UserIdInt int userId) {
Objects.requireNonNull(packageState, "packageState");
Objects.requireNonNull(packageName, "packageName");
Objects.requireNonNull(sharedUserPkgs, "sharedUserPkgs");
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java
index 3d295f773805..f2491d949e6b 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInterface.java
@@ -19,6 +19,7 @@ package com.android.server.pm.permission;
import android.annotation.AppIdInt;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.UserIdInt;
import android.content.Context;
import android.content.pm.PackageManager;
@@ -662,5 +663,5 @@ public interface PermissionManagerServiceInterface extends PermissionManagerInte
*/
void onPackageUninstalled(@NonNull String packageName, int appId,
@NonNull PackageState packageState, @Nullable AndroidPackage pkg,
- @NonNull List<AndroidPackage> sharedUserPkgs, @UserIdInt int userId);
+ @NonNull List<AndroidPackage> sharedUserPkgs, @CanBeALL @UserIdInt int userId);
}
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
index a5c12840a645..ad765c8a0d54 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceInternal.java
@@ -18,6 +18,7 @@ package com.android.server.pm.permission;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.UserIdInt;
import android.app.AppOpsManager;
import android.content.pm.PackageInstaller.SessionParams;
@@ -325,7 +326,7 @@ public interface PermissionManagerServiceInternal extends PermissionManagerInter
//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER)
void onPackageUninstalled(@NonNull String packageName, int appId,
@Nullable PackageState packageState, @Nullable AndroidPackage pkg,
- @NonNull List<AndroidPackage> sharedUserPkgs, @UserIdInt int userId);
+ @NonNull List<AndroidPackage> sharedUserPkgs, @CanBeALL @UserIdInt int userId);
/**
* The permission-related parameters passed in for package installation.
diff --git a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
index 1d62087428d8..2cf6b7efcb48 100644
--- a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
+++ b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
@@ -2911,19 +2911,7 @@ public class BatteryStatsImpl extends BatteryStats {
return false;
}
- mCounter.getCounts(counts, procState);
-
- // Return counts only if at least one of the elements is non-zero.
- for (int i = counts.length - 1; i >= 0; --i) {
- if (counts[i] != 0) {
- return true;
- }
- }
- return false;
- }
-
- public void logState(Printer pw, String prefix) {
- pw.println(prefix + "mCounter=" + mCounter);
+ return mCounter.getCounts(counts, procState);
}
/**
diff --git a/services/core/java/com/android/server/power/stats/processor/AmbientDisplayPowerStatsProcessor.java b/services/core/java/com/android/server/power/stats/processor/AmbientDisplayPowerStatsProcessor.java
index 5f93bdf07f47..a550f2d820a9 100644
--- a/services/core/java/com/android/server/power/stats/processor/AmbientDisplayPowerStatsProcessor.java
+++ b/services/core/java/com/android/server/power/stats/processor/AmbientDisplayPowerStatsProcessor.java
@@ -68,11 +68,15 @@ class AmbientDisplayPowerStatsProcessor extends PowerStatsProcessor {
// processor. All that remains to be done is copy the estimates over.
MultiStateStats.States.forEachTrackedStateCombination(deviceStateConfig,
states -> {
- screenStats.getDeviceStats(mTmpScreenStats, states);
+ if (!screenStats.getDeviceStats(mTmpScreenStats, states)) {
+ return;
+ }
double power =
mScreenPowerStatsLayout.getScreenDozePowerEstimate(mTmpScreenStats);
- mStatsLayout.setDevicePowerEstimate(mTmpDeviceStats, power);
- stats.setDeviceStats(states, mTmpDeviceStats);
+ if (power != 0) {
+ mStatsLayout.setDevicePowerEstimate(mTmpDeviceStats, power);
+ stats.setDeviceStats(states, mTmpDeviceStats);
+ }
});
}
}
diff --git a/services/core/java/com/android/server/power/stats/processor/CpuPowerStatsProcessor.java b/services/core/java/com/android/server/power/stats/processor/CpuPowerStatsProcessor.java
index ab2489c81449..98280beced9f 100644
--- a/services/core/java/com/android/server/power/stats/processor/CpuPowerStatsProcessor.java
+++ b/services/core/java/com/android/server/power/stats/processor/CpuPowerStatsProcessor.java
@@ -407,7 +407,10 @@ class CpuPowerStatsProcessor extends PowerStatsProcessor {
deviceStatsIntermediates.timeByBracket = new long[powerBracketCount];
deviceStatsIntermediates.powerByBracket = new double[powerBracketCount];
- stats.getDeviceStats(mTmpDeviceStatsArray, deviceStateEstimation.stateValues);
+ if (!stats.getDeviceStats(mTmpDeviceStatsArray, deviceStateEstimation.stateValues)) {
+ continue;
+ }
+
for (int step = 0; step < cpuScalingStepCount; step++) {
if (intermediates.timeByScalingStep[step] == 0) {
continue;
@@ -432,16 +435,19 @@ class CpuPowerStatsProcessor extends PowerStatsProcessor {
}
if (wakelockStats != null) {
- wakelockStats.getDeviceStats(mTmpWakelockDeviceStats,
- deviceStateEstimation.stateValues);
- double wakelockPowerEstimate = mWakelockPowerStatsLayout.getDevicePowerEstimate(
- mTmpWakelockDeviceStats);
- power = Math.max(0, power - wakelockPowerEstimate);
+ if (wakelockStats.getDeviceStats(mTmpWakelockDeviceStats,
+ deviceStateEstimation.stateValues)) {
+ double wakelockPowerEstimate = mWakelockPowerStatsLayout.getDevicePowerEstimate(
+ mTmpWakelockDeviceStats);
+ power = Math.max(0, power - wakelockPowerEstimate);
+ }
}
- deviceStatsIntermediates.power = power;
- mStatsLayout.setDevicePowerEstimate(mTmpDeviceStatsArray, power);
- stats.setDeviceStats(deviceStateEstimation.stateValues, mTmpDeviceStatsArray);
+ if (power != 0) {
+ deviceStatsIntermediates.power = power;
+ mStatsLayout.setDevicePowerEstimate(mTmpDeviceStatsArray, power);
+ stats.setDeviceStats(deviceStateEstimation.stateValues, mTmpDeviceStatsArray);
+ }
}
}
@@ -541,11 +547,12 @@ class CpuPowerStatsProcessor extends PowerStatsProcessor {
}
if (wakelockStats != null) {
- wakelockStats.getUidStats(mTmpWakelockUidStats, uid,
- proportionalEstimate.stateValues);
- double wakelockPowerEstimate = mWakelockPowerStatsLayout.getUidPowerEstimate(
- mTmpWakelockUidStats);
- power = Math.max(0, power - wakelockPowerEstimate);
+ if (wakelockStats.getUidStats(mTmpWakelockUidStats, uid,
+ proportionalEstimate.stateValues)) {
+ double wakelockPowerEstimate = mWakelockPowerStatsLayout.getUidPowerEstimate(
+ mTmpWakelockUidStats);
+ power = Math.max(0, power - wakelockPowerEstimate);
+ }
}
if (power != 0) {
diff --git a/services/core/java/com/android/server/power/stats/processor/MobileRadioPowerStatsProcessor.java b/services/core/java/com/android/server/power/stats/processor/MobileRadioPowerStatsProcessor.java
index a544daad82f1..5883505326ad 100644
--- a/services/core/java/com/android/server/power/stats/processor/MobileRadioPowerStatsProcessor.java
+++ b/services/core/java/com/android/server/power/stats/processor/MobileRadioPowerStatsProcessor.java
@@ -259,7 +259,9 @@ class MobileRadioPowerStatsProcessor extends PowerStatsProcessor {
stats.forEachStateStatsKey(key -> {
RxTxPowerEstimators estimators = mRxTxPowerEstimators.get(key);
- stats.getStateStats(mTmpStateStatsArray, key, deviceStates);
+ if (!stats.getStateStats(mTmpStateStatsArray, key, deviceStates)) {
+ return;
+ }
long rxTime = mStatsLayout.getStateRxTime(mTmpStateStatsArray);
intermediates.rxPower += estimators.mRxPowerEstimator.calculatePower(rxTime);
for (int txLevel = 0; txLevel < ModemActivityInfo.getNumTxPowerLevels(); txLevel++) {
diff --git a/services/core/java/com/android/server/power/stats/processor/MultiStateStats.java b/services/core/java/com/android/server/power/stats/processor/MultiStateStats.java
index 69325757c79d..0038943d7cf8 100644
--- a/services/core/java/com/android/server/power/stats/processor/MultiStateStats.java
+++ b/services/core/java/com/android/server/power/stats/processor/MultiStateStats.java
@@ -16,6 +16,7 @@
package com.android.server.power.stats.processor;
+import android.annotation.CheckResult;
import android.annotation.Nullable;
import android.util.Slog;
@@ -342,10 +343,12 @@ class MultiStateStats {
}
/**
- * Returns accumulated stats for the specified composite state.
+ * Returns accumulated stats for the specified composite state or false if the results are
+ * all zeros.
*/
- void getStats(long[] outValues, int[] states) {
- mCounter.getCounts(outValues, mFactory.getSerialState(states));
+ @CheckResult
+ boolean getStats(long[] outValues, int[] states) {
+ return mCounter.getCounts(outValues, mFactory.getSerialState(states));
}
/**
@@ -389,15 +392,7 @@ class MultiStateStats {
private void writeXmlForStates(TypedXmlSerializer serializer, int[] states, long[] values)
throws IOException {
- mCounter.getCounts(values, mFactory.getSerialState(states));
- boolean nonZero = false;
- for (long value : values) {
- if (value != 0) {
- nonZero = true;
- break;
- }
- }
- if (!nonZero) {
+ if (!mCounter.getCounts(values, mFactory.getSerialState(states))) {
return;
}
@@ -470,15 +465,7 @@ class MultiStateStats {
StringBuilder sb = new StringBuilder();
long[] values = new long[mCounter.getArrayLength()];
States.forEachTrackedStateCombination(mFactory.mStates, states -> {
- mCounter.getCounts(values, mFactory.getSerialState(states));
- boolean nonZero = false;
- for (long value : values) {
- if (value != 0) {
- nonZero = true;
- break;
- }
- }
- if (!nonZero) {
+ if (!mCounter.getCounts(values, mFactory.getSerialState(states))) {
return;
}
diff --git a/services/core/java/com/android/server/power/stats/processor/PhoneCallPowerStatsProcessor.java b/services/core/java/com/android/server/power/stats/processor/PhoneCallPowerStatsProcessor.java
index 3957ae0862dc..ad628e4632e1 100644
--- a/services/core/java/com/android/server/power/stats/processor/PhoneCallPowerStatsProcessor.java
+++ b/services/core/java/com/android/server/power/stats/processor/PhoneCallPowerStatsProcessor.java
@@ -69,12 +69,15 @@ class PhoneCallPowerStatsProcessor extends PowerStatsProcessor {
// processor. All that remains to be done is copy the estimates over.
MultiStateStats.States.forEachTrackedStateCombination(deviceStateConfig,
states -> {
- mobileRadioStats.getDeviceStats(mTmpMobileRadioDeviceStats, states);
- double callPowerEstimate =
- mMobileRadioStatsLayout.getDeviceCallPowerEstimate(
- mTmpMobileRadioDeviceStats);
- mStatsLayout.setDevicePowerEstimate(mTmpDeviceStats, callPowerEstimate);
- stats.setDeviceStats(states, mTmpDeviceStats);
+ if (!mobileRadioStats.getDeviceStats(mTmpMobileRadioDeviceStats, states)) {
+ return;
+ }
+ double callPowerEstimate = mMobileRadioStatsLayout.getDeviceCallPowerEstimate(
+ mTmpMobileRadioDeviceStats);
+ if (callPowerEstimate != 0) {
+ mStatsLayout.setDevicePowerEstimate(mTmpDeviceStats, callPowerEstimate);
+ stats.setDeviceStats(states, mTmpDeviceStats);
+ }
});
}
}
diff --git a/services/core/java/com/android/server/power/stats/processor/PowerComponentAggregatedPowerStats.java b/services/core/java/com/android/server/power/stats/processor/PowerComponentAggregatedPowerStats.java
index f9b9da9171cb..d285a5987710 100644
--- a/services/core/java/com/android/server/power/stats/processor/PowerComponentAggregatedPowerStats.java
+++ b/services/core/java/com/android/server/power/stats/processor/PowerComponentAggregatedPowerStats.java
@@ -16,6 +16,7 @@
package com.android.server.power.stats.processor;
+import android.annotation.CheckResult;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.BatteryStats;
@@ -312,6 +313,11 @@ class PowerComponentAggregatedPowerStats {
return uids;
}
+ /**
+ * Populates outValues with the stats for the specified states. If the stats are all 0,
+ * returns false, leaving outValues unchanged.
+ */
+ @CheckResult
boolean getDeviceStats(long[] outValues, int[] deviceStates) {
if (deviceStates.length != mDeviceStateConfig.length) {
throw new IllegalArgumentException(
@@ -319,12 +325,16 @@ class PowerComponentAggregatedPowerStats {
+ " expected: " + mDeviceStateConfig.length);
}
if (mDeviceStats != null) {
- mDeviceStats.getStats(outValues, deviceStates);
- return true;
+ return mDeviceStats.getStats(outValues, deviceStates);
}
return false;
}
+ /**
+ * Populates outValues with the stats for the specified key and device states. If the stats
+ * are all 0, returns false, leaving outValues unchanged.
+ */
+ @CheckResult
boolean getStateStats(long[] outValues, int key, int[] deviceStates) {
if (deviceStates.length != mDeviceStateConfig.length) {
throw new IllegalArgumentException(
@@ -333,8 +343,7 @@ class PowerComponentAggregatedPowerStats {
}
MultiStateStats stateStats = mStateStats.get(key);
if (stateStats != null) {
- stateStats.getStats(outValues, deviceStates);
- return true;
+ return stateStats.getStats(outValues, deviceStates);
}
return false;
}
@@ -345,6 +354,11 @@ class PowerComponentAggregatedPowerStats {
}
}
+ /**
+ * Populates outValues with the stats for the specified UID and UID states. If the stats are
+ * all 0, returns false, leaving outValues unchanged.
+ */
+ @CheckResult
boolean getUidStats(long[] outValues, int uid, int[] uidStates) {
if (uidStates.length != mUidStateConfig.length) {
throw new IllegalArgumentException(
@@ -353,8 +367,7 @@ class PowerComponentAggregatedPowerStats {
}
UidStats uidStats = mUidStats.get(uid);
if (uidStats != null && uidStats.stats != null) {
- uidStats.stats.getStats(outValues, uidStates);
- return true;
+ return uidStats.stats.getStats(outValues, uidStates);
}
return false;
}
@@ -578,15 +591,7 @@ class PowerComponentAggregatedPowerStats {
long[] values = new long[stats.getDimensionCount()];
MultiStateStats.States[] stateInfo = stats.getStates();
MultiStateStats.States.forEachTrackedStateCombination(stateInfo, states -> {
- stats.getStats(values, states);
- boolean nonZero = false;
- for (long value : values) {
- if (value != 0) {
- nonZero = true;
- break;
- }
- }
- if (!nonZero) {
+ if (!stats.getStats(values, states)) {
return;
}
diff --git a/services/core/java/com/android/server/power/stats/processor/SensorPowerStatsProcessor.java b/services/core/java/com/android/server/power/stats/processor/SensorPowerStatsProcessor.java
index ba728d36d561..284e6a9fce89 100644
--- a/services/core/java/com/android/server/power/stats/processor/SensorPowerStatsProcessor.java
+++ b/services/core/java/com/android/server/power/stats/processor/SensorPowerStatsProcessor.java
@@ -298,12 +298,16 @@ class SensorPowerStatsProcessor extends PowerStatsProcessor {
continue;
}
- if (!stats.getDeviceStats(mTmpDeviceStatsArray, estimation.stateValues)) {
+ double power = ((Intermediates) estimation.intermediates).power;
+ if (power == 0) {
continue;
}
- mStatsLayout.setDevicePowerEstimate(mTmpDeviceStatsArray,
- ((Intermediates) estimation.intermediates).power);
+ if (!stats.getDeviceStats(mTmpDeviceStatsArray, estimation.stateValues)) {
+ Arrays.fill(mTmpDeviceStatsArray, 0);
+ }
+
+ mStatsLayout.setDevicePowerEstimate(mTmpDeviceStatsArray, power);
stats.setDeviceStats(estimation.stateValues, mTmpDeviceStatsArray);
}
}
diff --git a/services/core/java/com/android/server/security/CertificateRevocationStatusManager.java b/services/core/java/com/android/server/security/CertificateRevocationStatusManager.java
index 4cd4b3b84910..799157520ca5 100644
--- a/services/core/java/com/android/server/security/CertificateRevocationStatusManager.java
+++ b/services/core/java/com/android/server/security/CertificateRevocationStatusManager.java
@@ -24,7 +24,7 @@ import android.content.Context;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.os.Environment;
-import android.os.PersistableBundle;
+import android.util.AtomicFile;
import android.util.Slog;
import com.android.internal.R;
@@ -35,6 +35,7 @@ import org.json.JSONObject;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -42,52 +43,27 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.security.cert.CertPathValidatorException;
import java.security.cert.X509Certificate;
-import java.time.Duration;
-import java.time.LocalDate;
import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.format.DateTimeParseException;
+import java.time.OffsetDateTime;
import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
-import java.util.Map;
-import java.util.Set;
/** Manages the revocation status of certificates used in remote attestation. */
class CertificateRevocationStatusManager {
private static final String TAG = "AVF_CRL";
// Must be unique within system server
private static final int JOB_ID = 1737671340;
- private static final String REVOCATION_STATUS_FILE_NAME = "certificate_revocation_status.txt";
- private static final String REVOCATION_STATUS_FILE_FIELD_DELIMITER = ",";
+ private static final String REVOCATION_LIST_FILE_NAME = "certificate_revocation_list.json";
+ @VisibleForTesting static final int MAX_OFFLINE_REVOCATION_LIST_AGE_DAYS = 30;
- /**
- * The number of days since last update for which a stored revocation status can be accepted.
- */
- @VisibleForTesting static final int MAX_DAYS_SINCE_LAST_CHECK = 30;
-
- @VisibleForTesting static final int NUM_HOURS_BEFORE_NEXT_CHECK = 24;
-
- /**
- * The number of days since issue date for an intermediary certificate to be considered fresh
- * and not require a revocation list check.
- */
- private static final int FRESH_INTERMEDIARY_CERT_DAYS = 70;
-
- /**
- * The expected number of days between a certificate's issue date and notBefore date. Used to
- * infer a certificate's issue date from its notBefore date.
- */
- private static final int DAYS_BETWEEN_ISSUE_AND_NOT_BEFORE_DATES = 2;
+ @VisibleForTesting static final int NUM_HOURS_BEFORE_NEXT_FETCH = 24;
private static final String TOP_LEVEL_JSON_PROPERTY_KEY = "entries";
private static final Object sFileLock = new Object();
private final Context mContext;
private final String mTestRemoteRevocationListUrl;
- private final File mTestRevocationStatusFile;
+ private final File mTestStoredRevocationListFile;
private final boolean mShouldScheduleJob;
CertificateRevocationStatusManager(Context context) {
@@ -98,29 +74,22 @@ class CertificateRevocationStatusManager {
CertificateRevocationStatusManager(
Context context,
String testRemoteRevocationListUrl,
- File testRevocationStatusFile,
+ File testStoredRevocationListFile,
boolean shouldScheduleJob) {
mContext = context;
mTestRemoteRevocationListUrl = testRemoteRevocationListUrl;
- mTestRevocationStatusFile = testRevocationStatusFile;
+ mTestStoredRevocationListFile = testStoredRevocationListFile;
mShouldScheduleJob = shouldScheduleJob;
}
/**
* Check the revocation status of the provided {@link X509Certificate}s.
*
- * <p>The provided certificates should have been validated and ordered from leaf to a
- * certificate issued by the trust anchor, per the convention specified in the javadoc of {@link
- * java.security.cert.CertPath}.
- *
* @param certificates List of certificates to be checked
* @throws CertPathValidatorException if the check failed
*/
void checkRevocationStatus(List<X509Certificate> certificates)
throws CertPathValidatorException {
- if (!needToCheckRevocationStatus(certificates)) {
- return;
- }
List<String> serialNumbers = new ArrayList<>();
for (X509Certificate certificate : certificates) {
String serialNumber = certificate.getSerialNumber().toString(16);
@@ -129,217 +98,124 @@ class CertificateRevocationStatusManager {
}
serialNumbers.add(serialNumber);
}
+ LocalDateTime now = LocalDateTime.now();
+ JSONObject revocationList;
try {
- if (isLastCheckedWithin(Duration.ofHours(NUM_HOURS_BEFORE_NEXT_CHECK), serialNumbers)) {
- Slog.d(
- TAG,
- "All certificates have been checked for revocation recently. No need to"
- + " check this time.");
+ if (getLastModifiedDateTime(getRevocationListFile())
+ .isAfter(now.minusHours(NUM_HOURS_BEFORE_NEXT_FETCH))) {
+ Slog.d(TAG, "CRL is fetched recently, do not fetch again.");
+ revocationList = getStoredRevocationList();
+ checkRevocationStatus(revocationList, serialNumbers);
return;
}
- } catch (IOException ignored) {
- // Proceed to check the revocation status
+ } catch (IOException | JSONException ignored) {
+ // Proceed to fetch the remote revocation list
}
try {
- JSONObject revocationList = fetchRemoteRevocationList();
- Map<String, Boolean> areCertificatesRevoked = new HashMap<>();
- for (String serialNumber : serialNumbers) {
- areCertificatesRevoked.put(serialNumber, revocationList.has(serialNumber));
- }
- updateLastRevocationCheckData(areCertificatesRevoked);
- for (Map.Entry<String, Boolean> entry : areCertificatesRevoked.entrySet()) {
- if (entry.getValue()) {
- throw new CertPathValidatorException(
- "Certificate " + entry.getKey() + " has been revoked.");
- }
- }
+ byte[] revocationListBytes = fetchRemoteRevocationListBytes();
+ silentlyStoreRevocationList(revocationListBytes);
+ revocationList = parseRevocationList(revocationListBytes);
+ checkRevocationStatus(revocationList, serialNumbers);
} catch (IOException | JSONException ex) {
Slog.d(TAG, "Fallback to check stored revocation status", ex);
if (ex instanceof IOException && mShouldScheduleJob) {
- scheduleJobToUpdateStoredDataWithRemoteRevocationList(serialNumbers);
- }
- for (X509Certificate certificate : certificates) {
- // Assume recently issued certificates are not revoked.
- if (isIssuedWithinDays(certificate, MAX_DAYS_SINCE_LAST_CHECK)) {
- String serialNumber = certificate.getSerialNumber().toString(16);
- serialNumbers.remove(serialNumber);
- }
+ scheduleJobToFetchRemoteRevocationJob();
}
try {
- if (!isLastCheckedWithin(
- Duration.ofDays(MAX_DAYS_SINCE_LAST_CHECK), serialNumbers)) {
- throw new CertPathValidatorException(
- "Unable to verify the revocation status of one of the certificates "
- + serialNumbers);
- }
- } catch (IOException ex2) {
+ revocationList = getStoredRevocationList();
+ checkRevocationStatus(revocationList, serialNumbers);
+ } catch (IOException | JSONException ex2) {
throw new CertPathValidatorException(
- "Unable to load stored revocation status", ex2);
+ "Unable to load or parse stored revocation status", ex2);
}
}
}
- private boolean isLastCheckedWithin(Duration lastCheckedWithin, List<String> serialNumbers)
- throws IOException {
- Map<String, LocalDateTime> lastRevocationCheckData = getLastRevocationCheckData();
+ private static void checkRevocationStatus(JSONObject revocationList, List<String> serialNumbers)
+ throws CertPathValidatorException {
for (String serialNumber : serialNumbers) {
- if (!lastRevocationCheckData.containsKey(serialNumber)
- || lastRevocationCheckData
- .get(serialNumber)
- .isBefore(LocalDateTime.now().minus(lastCheckedWithin))) {
- return false;
+ if (revocationList.has(serialNumber)) {
+ throw new CertPathValidatorException(
+ "Certificate has been revoked: " + serialNumber);
}
}
- return true;
}
- private static boolean needToCheckRevocationStatus(
- List<X509Certificate> certificatesOrderedLeafFirst) {
- if (certificatesOrderedLeafFirst.isEmpty()) {
- return false;
- }
- // A certificate isn't revoked when it is first issued, so we treat it as checked on its
- // issue date.
- if (!isIssuedWithinDays(certificatesOrderedLeafFirst.get(0), MAX_DAYS_SINCE_LAST_CHECK)) {
- return true;
+ private JSONObject getStoredRevocationList() throws IOException, JSONException {
+ File offlineRevocationListFile = getRevocationListFile();
+ if (!offlineRevocationListFile.exists()
+ || isRevocationListExpired(offlineRevocationListFile)) {
+ throw new FileNotFoundException("Offline copy does not exist or has expired.");
}
- for (int i = 1; i < certificatesOrderedLeafFirst.size(); i++) {
- if (!isIssuedWithinDays(
- certificatesOrderedLeafFirst.get(i), FRESH_INTERMEDIARY_CERT_DAYS)) {
- return true;
+ synchronized (sFileLock) {
+ try (FileInputStream inputStream = new FileInputStream(offlineRevocationListFile)) {
+ return parseRevocationList(inputStream.readAllBytes());
}
}
- return false;
}
- private static boolean isIssuedWithinDays(X509Certificate certificate, int days) {
- LocalDate notBeforeDate =
- LocalDate.ofInstant(certificate.getNotBefore().toInstant(), ZoneId.systemDefault());
- LocalDate expectedIssueData =
- notBeforeDate.plusDays(DAYS_BETWEEN_ISSUE_AND_NOT_BEFORE_DATES);
- return LocalDate.now().minusDays(days + 1).isBefore(expectedIssueData);
+ private boolean isRevocationListExpired(File offlineRevocationListFile) {
+ LocalDateTime acceptableLastModifiedDate =
+ LocalDateTime.now().minusDays(MAX_OFFLINE_REVOCATION_LIST_AGE_DAYS);
+ LocalDateTime lastModifiedDate = getLastModifiedDateTime(offlineRevocationListFile);
+ return lastModifiedDate.isBefore(acceptableLastModifiedDate);
}
- void updateLastRevocationCheckDataForAllPreviouslySeenCertificates(
- JSONObject revocationList, Collection<String> otherCertificatesToCheck) {
- Set<String> allCertificatesToCheck = new HashSet<>(otherCertificatesToCheck);
- try {
- allCertificatesToCheck.addAll(getLastRevocationCheckData().keySet());
- } catch (IOException ex) {
- Slog.e(TAG, "Unable to update last check date of stored data.", ex);
- }
- Map<String, Boolean> areCertificatesRevoked = new HashMap<>();
- for (String serialNumber : allCertificatesToCheck) {
- areCertificatesRevoked.put(serialNumber, revocationList.has(serialNumber));
- }
- updateLastRevocationCheckData(areCertificatesRevoked);
+ private static LocalDateTime getLastModifiedDateTime(File file) {
+ // if the file does not exist, file.lastModified() returns 0, so this method returns the
+ // epoch time
+ return LocalDateTime.ofEpochSecond(
+ file.lastModified() / 1000, 0, OffsetDateTime.now().getOffset());
}
/**
- * Update the last revocation check data stored on this device.
+ * Store the provided bytes to the local revocation list file.
+ *
+ * <p>This method does not throw an exception even if it fails to store the bytes.
*
- * @param areCertificatesRevoked A Map whose keys are certificate serial numbers and values are
- * whether that certificate has been revoked
+ * <p>This method internally synchronize file access with other methods in this class.
+ *
+ * @param revocationListBytes The bytes to store to the local revocation list file.
*/
- void updateLastRevocationCheckData(Map<String, Boolean> areCertificatesRevoked) {
- LocalDateTime now = LocalDateTime.now();
+ void silentlyStoreRevocationList(byte[] revocationListBytes) {
synchronized (sFileLock) {
- Map<String, LocalDateTime> lastRevocationCheckData;
+ AtomicFile atomicRevocationListFile = new AtomicFile(getRevocationListFile());
+ FileOutputStream fileOutputStream = null;
try {
- lastRevocationCheckData = getLastRevocationCheckData();
+ fileOutputStream = atomicRevocationListFile.startWrite();
+ fileOutputStream.write(revocationListBytes);
+ atomicRevocationListFile.finishWrite(fileOutputStream);
+ Slog.d(TAG, "Successfully stored revocation list.");
} catch (IOException ex) {
- Slog.e(TAG, "Unable to updateLastRevocationCheckData", ex);
- return;
- }
- for (Map.Entry<String, Boolean> entry : areCertificatesRevoked.entrySet()) {
- if (entry.getValue()) {
- lastRevocationCheckData.remove(entry.getKey());
- } else {
- lastRevocationCheckData.put(entry.getKey(), now);
+ Slog.e(TAG, "Failed to store the certificate revocation list.", ex);
+ // this happens when fileOutputStream.write fails
+ if (fileOutputStream != null) {
+ atomicRevocationListFile.failWrite(fileOutputStream);
}
}
- storeLastRevocationCheckData(lastRevocationCheckData);
}
}
- Map<String, LocalDateTime> getLastRevocationCheckData() throws IOException {
- Map<String, LocalDateTime> data = new HashMap<>();
- File dataFile = getLastRevocationCheckDataFile();
- synchronized (sFileLock) {
- if (!dataFile.exists()) {
- return data;
- }
- String dataString;
- try (FileInputStream in = new FileInputStream(dataFile)) {
- dataString = new String(in.readAllBytes(), UTF_8);
- }
- for (String line : dataString.split(System.lineSeparator())) {
- String[] elements = line.split(REVOCATION_STATUS_FILE_FIELD_DELIMITER);
- if (elements.length != 2) {
- continue;
- }
- try {
- data.put(elements[0], LocalDateTime.parse(elements[1]));
- } catch (DateTimeParseException ex) {
- Slog.e(
- TAG,
- "Unable to parse last checked LocalDateTime from file. Deleting the"
- + " potentially corrupted file.",
- ex);
- dataFile.delete();
- return data;
- }
- }
+ private File getRevocationListFile() {
+ if (mTestStoredRevocationListFile != null) {
+ return mTestStoredRevocationListFile;
}
- return data;
+ return new File(Environment.getDataSystemDirectory(), REVOCATION_LIST_FILE_NAME);
}
- @VisibleForTesting
- void storeLastRevocationCheckData(Map<String, LocalDateTime> lastRevocationCheckData) {
- StringBuilder dataStringBuilder = new StringBuilder();
- for (Map.Entry<String, LocalDateTime> entry : lastRevocationCheckData.entrySet()) {
- dataStringBuilder
- .append(entry.getKey())
- .append(REVOCATION_STATUS_FILE_FIELD_DELIMITER)
- .append(entry.getValue())
- .append(System.lineSeparator());
- }
- synchronized (sFileLock) {
- try (FileOutputStream fileOutputStream =
- new FileOutputStream(getLastRevocationCheckDataFile())) {
- fileOutputStream.write(dataStringBuilder.toString().getBytes(UTF_8));
- Slog.d(TAG, "Successfully stored revocation status data.");
- } catch (IOException ex) {
- Slog.e(TAG, "Failed to store revocation status data.", ex);
- }
- }
- }
-
- private File getLastRevocationCheckDataFile() {
- if (mTestRevocationStatusFile != null) {
- return mTestRevocationStatusFile;
- }
- return new File(Environment.getDataSystemDirectory(), REVOCATION_STATUS_FILE_NAME);
- }
-
- private void scheduleJobToUpdateStoredDataWithRemoteRevocationList(List<String> serialNumbers) {
+ private void scheduleJobToFetchRemoteRevocationJob() {
JobScheduler jobScheduler = mContext.getSystemService(JobScheduler.class);
if (jobScheduler == null) {
Slog.e(TAG, "Unable to get job scheduler.");
return;
}
Slog.d(TAG, "Scheduling job to fetch remote CRL.");
- PersistableBundle extras = new PersistableBundle();
- extras.putStringArray(
- UpdateCertificateRevocationStatusJobService.EXTRA_KEY_CERTIFICATES_TO_CHECK,
- serialNumbers.toArray(new String[0]));
jobScheduler.schedule(
new JobInfo.Builder(
JOB_ID,
new ComponentName(
mContext,
UpdateCertificateRevocationStatusJobService.class))
- .setExtras(extras)
.setRequiredNetwork(
new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
@@ -351,13 +227,11 @@ class CertificateRevocationStatusManager {
* Fetches the revocation list from the URL specified in
* R.string.vendor_required_attestation_revocation_list_url
*
- * @return The remote revocation list entries in a JSONObject
+ * @return The remote revocation list entries in a byte[].
* @throws CertPathValidatorException if the URL is not defined or is malformed.
* @throws IOException if the URL is valid but the fetch failed.
- * @throws JSONException if the revocation list content cannot be parsed
*/
- JSONObject fetchRemoteRevocationList()
- throws CertPathValidatorException, IOException, JSONException {
+ byte[] fetchRemoteRevocationListBytes() throws CertPathValidatorException, IOException {
String urlString = getRemoteRevocationListUrl();
if (urlString == null || urlString.isEmpty()) {
throw new CertPathValidatorException(
@@ -369,10 +243,13 @@ class CertificateRevocationStatusManager {
} catch (MalformedURLException ex) {
throw new CertPathValidatorException("Unable to parse the URL " + urlString, ex);
}
- byte[] revocationListBytes;
try (InputStream inputStream = url.openStream()) {
- revocationListBytes = inputStream.readAllBytes();
+ return inputStream.readAllBytes();
}
+ }
+
+ private JSONObject parseRevocationList(byte[] revocationListBytes)
+ throws IOException, JSONException {
JSONObject revocationListJson = new JSONObject(new String(revocationListBytes, UTF_8));
return revocationListJson.getJSONObject(TOP_LEVEL_JSON_PROPERTY_KEY);
}
diff --git a/services/core/java/com/android/server/security/UpdateCertificateRevocationStatusJobService.java b/services/core/java/com/android/server/security/UpdateCertificateRevocationStatusJobService.java
index 768c812f47a3..7d1a70eb4094 100644
--- a/services/core/java/com/android/server/security/UpdateCertificateRevocationStatusJobService.java
+++ b/services/core/java/com/android/server/security/UpdateCertificateRevocationStatusJobService.java
@@ -20,17 +20,15 @@ import android.app.job.JobParameters;
import android.app.job.JobService;
import android.util.Slog;
-import org.json.JSONObject;
-
-import java.util.Arrays;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-/** A {@link JobService} that fetches the certificate revocation list from a remote location. */
+/**
+ * A {@link JobService} that fetches the certificate revocation list from a remote location and
+ * stores it locally.
+ */
public class UpdateCertificateRevocationStatusJobService extends JobService {
- static final String EXTRA_KEY_CERTIFICATES_TO_CHECK =
- "com.android.server.security.extra.CERTIFICATES_TO_CHECK";
private static final String TAG = "AVF_CRL";
private ExecutorService mExecutorService;
@@ -48,20 +46,12 @@ public class UpdateCertificateRevocationStatusJobService extends JobService {
CertificateRevocationStatusManager certificateRevocationStatusManager =
new CertificateRevocationStatusManager(this);
Slog.d(TAG, "Starting to fetch remote CRL from job service.");
- JSONObject revocationList =
- certificateRevocationStatusManager.fetchRemoteRevocationList();
- String[] certificatesToCheckFromJobParams =
- params.getExtras().getStringArray(EXTRA_KEY_CERTIFICATES_TO_CHECK);
- if (certificatesToCheckFromJobParams == null) {
- Slog.e(TAG, "Extras not found: " + EXTRA_KEY_CERTIFICATES_TO_CHECK);
- return;
- }
- certificateRevocationStatusManager
- .updateLastRevocationCheckDataForAllPreviouslySeenCertificates(
- revocationList,
- Arrays.asList(certificatesToCheckFromJobParams));
+ byte[] revocationList =
+ certificateRevocationStatusManager.fetchRemoteRevocationListBytes();
+ certificateRevocationStatusManager.silentlyStoreRevocationList(
+ revocationList);
} catch (Throwable t) {
- Slog.e(TAG, "Unable to update the stored revocation status.", t);
+ Slog.e(TAG, "Unable to update the stored revocation list.", t);
}
jobFinished(params, false);
});
diff --git a/services/core/java/com/android/server/storage/ImmutableVolumeInfo.java b/services/core/java/com/android/server/storage/ImmutableVolumeInfo.java
index 9d60a576d9bc..0f8212e23c20 100644
--- a/services/core/java/com/android/server/storage/ImmutableVolumeInfo.java
+++ b/services/core/java/com/android/server/storage/ImmutableVolumeInfo.java
@@ -136,4 +136,9 @@ public final class ImmutableVolumeInfo {
public boolean isVisibleForWrite(int userId) {
return mVolumeInfo.isVisibleForWrite(userId);
}
+
+ @Override
+ public String toString() {
+ return mVolumeInfo.toString();
+ }
}
diff --git a/services/core/java/com/android/server/storage/WatchedVolumeInfo.java b/services/core/java/com/android/server/storage/WatchedVolumeInfo.java
index 4124cfb4f092..94e52cd1033a 100644
--- a/services/core/java/com/android/server/storage/WatchedVolumeInfo.java
+++ b/services/core/java/com/android/server/storage/WatchedVolumeInfo.java
@@ -203,4 +203,9 @@ public class WatchedVolumeInfo extends WatchableImpl {
public boolean isVisibleForWrite(int userId) {
return mVolumeInfo.isVisibleForWrite(userId);
}
+
+ @Override
+ public String toString() {
+ return mVolumeInfo.toString();
+ }
} \ No newline at end of file
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperCropper.java b/services/core/java/com/android/server/wallpaper/WallpaperCropper.java
index b3e68a35764b..8e8455ad5288 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperCropper.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperCropper.java
@@ -16,6 +16,8 @@
package com.android.server.wallpaper;
+import static android.app.WallpaperManager.ORIENTATION_LANDSCAPE;
+import static android.app.WallpaperManager.ORIENTATION_SQUARE_LANDSCAPE;
import static android.app.WallpaperManager.ORIENTATION_UNKNOWN;
import static android.app.WallpaperManager.getOrientation;
import static android.app.WallpaperManager.getRotatedOrientation;
@@ -28,6 +30,7 @@ import static com.android.server.wallpaper.WallpaperUtils.WALLPAPER;
import static com.android.server.wallpaper.WallpaperUtils.getWallpaperDir;
import static com.android.window.flags.Flags.multiCrop;
+import android.app.WallpaperManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.ImageDecoder;
@@ -821,4 +824,54 @@ public class WallpaperCropper {
}
}
}
+
+ /**
+ * Returns true if a wallpaper is compatible with a given display with ID, {@code displayId}.
+ *
+ * <p>A wallpaper is compatible with a display if any of the following are true
+ * <ol>the display is a default display</o>
+ * <ol>the wallpaper is a stock wallpaper</ol>
+ * <ol>the wallpaper size is at least 3/4 of the display resolution and, in landscape displays,
+ * the wallpaper has an aspect ratio of at least 11:13.</ol>
+ */
+ @VisibleForTesting
+ boolean isWallpaperCompatibleForDisplay(int displayId, WallpaperData wallpaperData) {
+ if (displayId == DEFAULT_DISPLAY) {
+ return true;
+ }
+
+ File wallpaperFile = wallpaperData.getWallpaperFile();
+ if (!wallpaperFile.exists()) {
+ // Assumption: Stock wallpaper is suitable for all display sizes.
+ return true;
+ }
+
+ DisplayInfo displayInfo = mWallpaperDisplayHelper.getDisplayInfo(displayId);
+ Point displaySize = new Point(displayInfo.logicalWidth, displayInfo.logicalHeight);
+ int displayOrientation = WallpaperManager.getOrientation(displaySize);
+
+ Point wallpaperImageSize = new Point(
+ (int) Math.ceil(wallpaperData.cropHint.width() / wallpaperData.mSampleSize),
+ (int) Math.ceil(wallpaperData.cropHint.height() / wallpaperData.mSampleSize));
+ if (wallpaperImageSize.equals(0, 0)) {
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inJustDecodeBounds = true;
+ BitmapFactory.decodeFile(wallpaperFile.getAbsolutePath(), options);
+ wallpaperImageSize.set(options.outWidth, options.outHeight);
+ }
+
+ double maxDisplayToImageRatio = Math.max((double) displaySize.x / wallpaperImageSize.x,
+ (double) displaySize.y / wallpaperImageSize.y);
+ if (maxDisplayToImageRatio > 1.5) {
+ return false;
+ }
+
+ // For displays in landscape, we only support images with an aspect ratio >= 11:13
+ if (displayOrientation == ORIENTATION_LANDSCAPE) {
+ return ((double) wallpaperImageSize.x / wallpaperImageSize.y) >= 11.0 / 13;
+ }
+
+ // For other orientations, we don't enforce any aspect ratio.
+ return true;
+ }
}
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index 69b2b9b326ba..d620e98d3437 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -118,7 +118,6 @@ import android.service.wallpaper.WallpaperService;
import android.system.ErrnoException;
import android.system.Os;
import android.text.TextUtils;
-import android.util.ArraySet;
import android.util.EventLog;
import android.util.IntArray;
import android.util.Slog;
@@ -161,7 +160,6 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
-import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -743,10 +741,8 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
final WallpaperDisplayHelper mWallpaperDisplayHelper;
final WallpaperCropper mWallpaperCropper;
- // TODO(b/384519749): Remove this set after we introduce the aspect ratio check.
- private final Set<Integer> mWallpaperCompatibleDisplaysForTest = new ArraySet<>();
-
- private boolean isWallpaperCompatibleForDisplay(int displayId, WallpaperConnection connection) {
+ @VisibleForTesting
+ boolean isWallpaperCompatibleForDisplay(int displayId, WallpaperConnection connection) {
if (connection == null) {
return false;
}
@@ -757,26 +753,14 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
// Image wallpaper
if (isDeviceEligibleForDesktopExperienceWallpaper(mContext)) {
- // TODO(b/384519749): check display's resolution and image wallpaper cropped image
- // aspect ratio.
- return displayId == DEFAULT_DISPLAY
- || mWallpaperCompatibleDisplaysForTest.contains(displayId);
+ return mWallpaperCropper.isWallpaperCompatibleForDisplay(displayId,
+ connection.mWallpaper);
}
// When enableConnectedDisplaysWallpaper is off, we assume the image wallpaper supports all
// usable displays.
return true;
}
- @VisibleForTesting
- void addWallpaperCompatibleDisplayForTest(int displayId) {
- mWallpaperCompatibleDisplaysForTest.add(displayId);
- }
-
- @VisibleForTesting
- void removeWallpaperCompatibleDisplayForTest(int displayId) {
- mWallpaperCompatibleDisplaysForTest.remove(displayId);
- }
-
private void updateFallbackConnection(int clientUid) {
if (mLastWallpaper == null || mFallbackWallpaper == null) return;
final WallpaperConnection systemConnection = mLastWallpaper.connection;
@@ -844,7 +828,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
// `which` flag.
DisplayConnector fallbackConnector =
mFallbackWallpaper.connection.getDisplayConnectorOrCreate(displayId);
- if (fallbackConnector != null && fallbackConnector.mEngine != null) {
+ if (fallbackConnector != null) {
fallbackConnector.mWhich = which;
fallbackConnector.connectLocked(mFallbackWallpaper.connection,
mFallbackWallpaper);
diff --git a/services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java b/services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java
index 15c0789d777e..3535a96d9c45 100644
--- a/services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java
+++ b/services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java
@@ -36,8 +36,7 @@ import android.app.WindowConfiguration;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.Rect;
-
-import com.android.window.flags.Flags;
+import android.window.DesktopModeFlags;
/**
* Encapsulate app compat policy logic related to aspect ratio.
@@ -298,7 +297,8 @@ class AppCompatAspectRatioPolicy {
// Camera compat mode is an exception to this, where the activity is letterboxed
// to an aspect ratio commonly found on phones, e.g. 16:9, to avoid issues like
// stretching of the camera preview.
- || (Flags.ignoreAspectRatioRestrictionsForResizeableFreeformActivities()
+ || (DesktopModeFlags
+ .IGNORE_ASPECT_RATIO_RESTRICTIONS_FOR_RESIZEABLE_FREEFORM_ACTIVITIES.isTrue()
&& task.getWindowingMode() == WINDOWING_MODE_FREEFORM
&& !mActivityRecord.shouldCreateAppCompatDisplayInsets()
&& !AppCompatCameraPolicy.shouldCameraCompatControlAspectRatio(
diff --git a/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java b/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java
index 47d30c98120c..5eed54704f36 100644
--- a/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java
+++ b/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java
@@ -23,6 +23,7 @@ import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_ENABLE_REFR
import static android.content.pm.ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR_CAMERA;
import static android.content.pm.ActivityInfo.OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA;
import static android.view.WindowManager.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION;
+import static android.view.WindowManager.PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION;
import static android.view.WindowManager.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH;
import static android.view.WindowManager.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE;
import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE;
@@ -32,6 +33,7 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLAS
import static com.android.server.wm.AppCompatUtils.isChangeEnabled;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import com.android.server.wm.utils.OptPropFactory;
import com.android.window.flags.Flags;
@@ -60,6 +62,8 @@ class AppCompatCameraOverrides {
private final OptPropFactory.OptProp mCameraCompatEnableRefreshViaPauseOptProp;
@NonNull
private final OptPropFactory.OptProp mCameraCompatAllowForceRotationOptProp;
+ @Nullable
+ private final OptPropFactory.OptProp mCameraCompatAllowOrientationTreatmentOptProp;
AppCompatCameraOverrides(@NonNull ActivityRecord activityRecord,
@NonNull AppCompatConfiguration appCompatConfiguration,
@@ -80,6 +84,10 @@ class AppCompatCameraOverrides {
mCameraCompatAllowForceRotationOptProp = optPropBuilder.create(
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION,
isCameraCompatTreatmentEnabled);
+ mCameraCompatAllowOrientationTreatmentOptProp =
+ Flags.enableCameraCompatForDesktopWindowingOptOut() ? optPropBuilder.create(
+ PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION,
+ isCameraCompatTreatmentEnabled) : null;
}
/**
@@ -168,10 +176,31 @@ class AppCompatCameraOverrides {
* </ul>
*/
boolean shouldApplyFreeformTreatmentForCameraCompat() {
- return Flags.enableCameraCompatForDesktopWindowing() && (isChangeEnabled(mActivityRecord,
- OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT)
- || mActivityRecord.mWmService.mAppCompatConfiguration
- .isCameraCompatFreeformWindowingTreatmentEnabled());
+ return Flags.enableCameraCompatForDesktopWindowing()
+ && (shouldEnableCameraCompatFreeformTreatmentForApp()
+ || shouldEnableCameraCompatFreeformTreatmentForAllApps());
+ }
+
+ private boolean shouldEnableCameraCompatFreeformTreatmentForApp() {
+ if (mCameraCompatAllowOrientationTreatmentOptProp != null) {
+ return mCameraCompatAllowOrientationTreatmentOptProp
+ .shouldEnableWithOptOutOverrideAndProperty(isChangeEnabled(mActivityRecord,
+ OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT));
+ } else {
+ return isChangeEnabled(mActivityRecord,
+ OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT);
+ }
+ }
+
+ /**
+ * Returns whether camera compat treatment should be enabled for all apps targeted for treatment
+ * (usually fixed-orientation apps).
+ *
+ * <p>This can be enabled via adb only.
+ */
+ private boolean shouldEnableCameraCompatFreeformTreatmentForAllApps() {
+ return mActivityRecord.mWmService.mAppCompatConfiguration
+ .isCameraCompatFreeformWindowingTreatmentEnabled();
}
boolean isOverrideOrientationOnlyForCameraEnabled() {
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 9353cede49b2..214a3a15bb44 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -831,20 +831,27 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
return false;
}
- // When switching the app task, we keep the IME window visibility for better
- // transitioning experiences.
- // However, in case IME created a child window or the IME selection dialog without
- // dismissing during the task switching to keep the window focus because IME window has
- // higher window hierarchy, we don't give it focus if the next IME layering target
- // doesn't request IME visible.
- if (w.mIsImWindow && w.isChildWindow() && (mImeLayeringTarget == null
- || !mImeLayeringTarget.isRequestedVisible(ime()))) {
- return false;
- }
- if (w.mAttrs.type == TYPE_INPUT_METHOD_DIALOG && mImeLayeringTarget != null
- && !(mImeLayeringTarget.isRequestedVisible(ime())
- && mImeLayeringTarget.isVisibleRequested())) {
- return false;
+ // IME windows remain visibleRequested while switching apps to maintain a smooth animation.
+ // This persists until the new app is focused, so they can be visibleRequested despite not
+ // being visible to the user (i.e. occluded). These rank higher in the window hierarchy than
+ // app windows, so they will always be considered first. To avoid having the focus stuck,
+ // an IME window (child or not) cannot be focused if the IME parent is not visible. However,
+ // child windows also require the IME to be visible in the current app.
+ if (w.mIsImWindow) {
+ final boolean imeParentVisible = mInputMethodSurfaceParentWindow != null
+ && mInputMethodSurfaceParentWindow.isVisibleRequested();
+ if (!imeParentVisible) {
+ ProtoLog.v(WM_DEBUG_FOCUS, "findFocusedWindow: IME window not focusable as"
+ + " IME parent is not visible");
+ return false;
+ }
+
+ if (w.isChildWindow()
+ && !getInsetsStateController().getImeSourceProvider().isImeShowing()) {
+ ProtoLog.v(WM_DEBUG_FOCUS, "findFocusedWindow: IME child window not focusable as"
+ + " IME is not visible");
+ return false;
+ }
}
final ActivityRecord activity = w.mActivityRecord;
diff --git a/services/core/java/com/android/server/wm/InsetsPolicy.java b/services/core/java/com/android/server/wm/InsetsPolicy.java
index b4d55a160631..5c6695fe22c0 100644
--- a/services/core/java/com/android/server/wm/InsetsPolicy.java
+++ b/services/core/java/com/android/server/wm/InsetsPolicy.java
@@ -113,25 +113,33 @@ class InsetsPolicy {
abortTransient();
}
mFocusedWin = focusedWin;
+ final @InsetsType int[] requestedVisibleTypes =
+ {focusedWin != null ? focusedWin.getRequestedVisibleTypes() : 0};
final WindowState notificationShade = mPolicy.getNotificationShade();
final WindowState topApp = mPolicy.getTopFullscreenOpaqueWindow();
final InsetsControlTarget statusControlTarget =
- getStatusControlTarget(focusedWin, false /* fake */);
+ getStatusControlTarget(focusedWin, false /* fake */, requestedVisibleTypes);
mFakeStatusControlTarget = statusControlTarget == mTransientControlTarget
- ? getStatusControlTarget(focusedWin, true /* fake */)
+ ? getStatusControlTarget(focusedWin, true /* fake */, requestedVisibleTypes)
: statusControlTarget == notificationShade
- ? getStatusControlTarget(topApp, true /* fake */)
+ ? getStatusControlTarget(topApp, true /* fake */, requestedVisibleTypes)
: null;
final InsetsControlTarget navControlTarget =
- getNavControlTarget(focusedWin, false /* fake */);
+ getNavControlTarget(focusedWin, false /* fake */, requestedVisibleTypes);
mFakeNavControlTarget = navControlTarget == mTransientControlTarget
- ? getNavControlTarget(focusedWin, true /* fake */)
+ ? getNavControlTarget(focusedWin, true /* fake */, requestedVisibleTypes)
: navControlTarget == notificationShade
- ? getNavControlTarget(topApp, true /* fake */)
+ ? getNavControlTarget(topApp, true /* fake */, requestedVisibleTypes)
: null;
mStateController.onBarControlTargetChanged(
statusControlTarget, mFakeStatusControlTarget,
navControlTarget, mFakeNavControlTarget);
+
+ if (statusControlTarget == mDisplayContent.mRemoteInsetsControlTarget
+ && navControlTarget == mDisplayContent.mRemoteInsetsControlTarget) {
+ notifyRemoteInsetsController(focusedWin, requestedVisibleTypes[0]);
+ }
+
mStatusBar.updateVisibility(statusControlTarget, Type.statusBars());
mNavBar.updateVisibility(navControlTarget, Type.navigationBars());
}
@@ -182,12 +190,12 @@ class InsetsPolicy {
@VisibleForTesting
InsetsControlTarget getTransientControlTarget() {
- return mTransientControlTarget;
+ return mTransientControlTarget;
}
@VisibleForTesting
InsetsControlTarget getPermanentControlTarget() {
- return mPermanentControlTarget;
+ return mPermanentControlTarget;
}
void hideTransient() {
@@ -259,7 +267,7 @@ class InsetsPolicy {
* modes.
*
* @param target the target on which the policy is applied
- * @param state the input inset state containing all the sources
+ * @param state the input inset state containing all the sources
* @return The state stripped of the necessary information.
*/
InsetsState enforceInsetsPolicyForTarget(WindowState target, InsetsState state) {
@@ -461,7 +469,7 @@ class InsetsPolicy {
mStateController.getFakeControllingTypes(caller);
final @InsetsType int abortTypes =
(fakeControllingTypes & caller.getRequestedVisibleTypes())
- | (isImeVisible ? Type.navigationBars() : 0);
+ | (isImeVisible ? Type.navigationBars() : 0);
mShowingTransientTypes &= ~abortTypes;
if (abortTypes != 0) {
mDisplayContent.setLayoutNeeded();
@@ -496,6 +504,18 @@ class InsetsPolicy {
}
private @Nullable InsetsControlTarget getStatusControlTarget(@Nullable WindowState focusedWin,
+ boolean fake, @InsetsType int[] requestedVisibleTypes) {
+ final InsetsControlTarget target = getStatusControlTargetInner(focusedWin, fake);
+ if (remoteInsetsControllerControlsSystemBars(target)) {
+ requestedVisibleTypes[0] = (requestedVisibleTypes[0] & ~Type.statusBars()) | (
+ target.getRequestedVisibleTypes() & Type.statusBars());
+ return mDisplayContent.mRemoteInsetsControlTarget;
+ }
+ return target;
+ }
+
+ private @Nullable InsetsControlTarget getStatusControlTargetInner(
+ @Nullable WindowState focusedWin,
boolean fake) {
if (!fake && isTransient(Type.statusBars())) {
return mTransientControlTarget;
@@ -521,17 +541,7 @@ class InsetsPolicy {
&& (notificationShade == null || !notificationShade.canReceiveKeys())) {
// Non-fullscreen focused window should not break the state that the top-fullscreen-app
// window hides status bar, unless the notification shade can receive keys.
- if (remoteInsetsControllerControlsSystemBars(
- mPolicy.getTopFullscreenOpaqueWindow())) {
- notifyRemoteInsetsController(mPolicy.getTopFullscreenOpaqueWindow());
- return mDisplayContent.mRemoteInsetsControlTarget;
- } else {
- return mPolicy.getTopFullscreenOpaqueWindow();
- }
- }
- if (remoteInsetsControllerControlsSystemBars(focusedWin)) {
- notifyRemoteInsetsController(focusedWin);
- return mDisplayContent.mRemoteInsetsControlTarget;
+ return mPolicy.getTopFullscreenOpaqueWindow();
}
return focusedWin;
}
@@ -547,6 +557,17 @@ class InsetsPolicy {
}
private @Nullable InsetsControlTarget getNavControlTarget(@Nullable WindowState focusedWin,
+ boolean fake, @InsetsType int[] requestedVisibleTypes) {
+ final InsetsControlTarget target = getNavControlTargetInner(focusedWin, fake);
+ if (remoteInsetsControllerControlsSystemBars(target)) {
+ requestedVisibleTypes[0] = (requestedVisibleTypes[0] & ~Type.navigationBars()) | (
+ target.getRequestedVisibleTypes() & Type.navigationBars());
+ return mDisplayContent.mRemoteInsetsControlTarget;
+ }
+ return target;
+ }
+
+ private @Nullable InsetsControlTarget getNavControlTargetInner(@Nullable WindowState focusedWin,
boolean fake) {
final WindowState imeWin = mDisplayContent.mInputMethodWindow;
if (imeWin != null && imeWin.isVisible() && !mHideNavBarForKeyboard) {
@@ -585,29 +606,21 @@ class InsetsPolicy {
&& (notificationShade == null || !notificationShade.canReceiveKeys())) {
// Non-fullscreen focused window should not break the state that the top-fullscreen-app
// window hides navigation bar, unless the notification shade can receive keys.
- if (remoteInsetsControllerControlsSystemBars(
- mPolicy.getTopFullscreenOpaqueWindow())) {
- notifyRemoteInsetsController(mPolicy.getTopFullscreenOpaqueWindow());
- return mDisplayContent.mRemoteInsetsControlTarget;
- } else {
- return mPolicy.getTopFullscreenOpaqueWindow();
- }
- }
- if (remoteInsetsControllerControlsSystemBars(focusedWin)) {
- notifyRemoteInsetsController(focusedWin);
- return mDisplayContent.mRemoteInsetsControlTarget;
+ return mPolicy.getTopFullscreenOpaqueWindow();
}
return focusedWin;
}
- private void notifyRemoteInsetsController(@Nullable WindowState win) {
+ private void notifyRemoteInsetsController(@Nullable WindowState win,
+ @InsetsType int requestVisibleTypes) {
if (win == null) {
return;
}
ComponentName component = win.mActivityRecord != null
? win.mActivityRecord.mActivityComponent : null;
+
mDisplayContent.mRemoteInsetsControlTarget.topFocusedWindowChanged(
- component, win.getRequestedVisibleTypes());
+ component, requestVisibleTypes);
}
boolean areTypesForciblyShowing(@InsetsType int types) {
@@ -645,8 +658,8 @@ class InsetsPolicy {
* Determines whether the remote insets controller should take control of system bars for all
* windows.
*/
- boolean remoteInsetsControllerControlsSystemBars(@Nullable WindowState focusedWin) {
- if (focusedWin == null) {
+ boolean remoteInsetsControllerControlsSystemBars(@Nullable InsetsControlTarget target) {
+ if (!(target instanceof WindowState win)) {
return false;
}
@@ -660,8 +673,8 @@ class InsetsPolicy {
// If necessary, auto can control application windows when
// config_remoteInsetsControllerControlsSystemBars is set to true. This is useful in cases
// where we want to dictate system bar inset state for applications.
- return focusedWin.getAttrs().type >= WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW
- && focusedWin.getAttrs().type <= WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
+ return win.getAttrs().type >= WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW
+ && win.getAttrs().type <= WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
}
private void dispatchTransientSystemBarsVisibilityChanged(
@@ -708,7 +721,7 @@ class InsetsPolicy {
private class BarWindow {
private final int mId;
- private @StatusBarManager.WindowVisibleState int mState =
+ private @StatusBarManager.WindowVisibleState int mState =
StatusBarManager.WINDOW_STATE_SHOWING;
BarWindow(int id) {
@@ -790,11 +803,13 @@ class InsetsPolicy {
}
@Override
- public void notifyInsetsChanged() { }
+ public void notifyInsetsChanged() {
+ }
@Override
public void dispatchWindowInsetsAnimationPrepare(
- @NonNull WindowInsetsAnimation animation) { }
+ @NonNull WindowInsetsAnimation animation) {
+ }
@Override
public Bounds dispatchWindowInsetsAnimationStart(
@@ -812,7 +827,8 @@ class InsetsPolicy {
@Override
public void dispatchWindowInsetsAnimationEnd(
- @NonNull WindowInsetsAnimation animation) { }
+ @NonNull WindowInsetsAnimation animation) {
+ }
@Override
public void applySurfaceParams(SyncRtSurfaceTransactionApplier.SurfaceParams... p) {
@@ -834,7 +850,8 @@ class InsetsPolicy {
}
@Override
- public void setSystemBarsAppearance(int appearance, int mask) { }
+ public void setSystemBarsAppearance(int appearance, int mask) {
+ }
@Override
public int getSystemBarsAppearance() {
@@ -842,7 +859,8 @@ class InsetsPolicy {
}
@Override
- public void setSystemBarsBehavior(int behavior) { }
+ public void setSystemBarsBehavior(int behavior) {
+ }
@Override
public int getSystemBarsBehavior() {
@@ -855,10 +873,12 @@ class InsetsPolicy {
}
@Override
- public void addOnPreDrawRunnable(Runnable r) { }
+ public void addOnPreDrawRunnable(Runnable r) {
+ }
@Override
- public void postInsetsAnimationCallback(Runnable r) { }
+ public void postInsetsAnimationCallback(Runnable r) {
+ }
@Override
public InputMethodManager getInputMethodManager() {
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index 9d18d6c4cc89..80095b395cc4 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -1889,10 +1889,12 @@ class TaskFragment extends WindowContainer<WindowContainer> {
// Even if the transient activity is occluded, defer pausing (addToStopping will still
// be called) it until the transient transition is done. So the current resuming
// activity won't need to wait for additional pause complete.
+ ProtoLog.d(WM_DEBUG_STATES, "startPausing: Skipping pause for transient "
+ + "resumed activity=%s", mResumedActivity);
return false;
}
- ProtoLog.d(WM_DEBUG_STATES, "startPausing: taskFrag =%s " + "mResumedActivity=%s", this,
+ ProtoLog.d(WM_DEBUG_STATES, "startPausing: taskFrag=%s mResumedActivity=%s", this,
mResumedActivity);
if (mPausingActivity != null) {
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index 5217a759c6ae..fd7d96a646ae 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -1640,6 +1640,12 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
mSyncEngine.setSyncMethod(syncId, BLASTSyncEngine.METHOD_BLAST);
}
mSyncEngine.addToSyncSet(syncId, target);
+ } else {
+ // If there is an existing sync group for the commit-at-end activity,
+ // enforce BLAST sync method for its windows, before resuming config dispatch.
+ target.forAllWindows(windowState -> {
+ windowState.mSyncMethodOverride = BLASTSyncEngine.METHOD_BLAST;
+ }, true /* traverseTopToBottom */);
}
// Reset surface state here (since it was skipped in buildFinishTransaction). Since
// we are resuming config to the "current" state, we have to calculate the matching
@@ -2026,23 +2032,18 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
if (mOverrideOptions == null) {
return;
}
-
- if (!Flags.moveAnimationOptionsToChange()) {
- info.setAnimationOptions(mOverrideOptions);
- } else {
- final List<TransitionInfo.Change> changes = info.getChanges();
- for (int i = changes.size() - 1; i >= 0; --i) {
- final WindowContainer<?> container = mTargets.get(i).mContainer;
- if (container.asActivityRecord() != null
- || shouldApplyAnimOptionsToTask(container.asTask())) {
- changes.get(i).setAnimationOptions(mOverrideOptions);
- // TODO(b/295805497): Extract mBackgroundColor from AnimationOptions.
- changes.get(i).setBackgroundColor(mOverrideOptions.getBackgroundColor());
- } else if (shouldApplyAnimOptionsToEmbeddedTf(container.asTaskFragment())) {
- // We only override AnimationOptions because backgroundColor should be from
- // TaskFragmentAnimationParams.
- changes.get(i).setAnimationOptions(mOverrideOptions);
- }
+ final List<TransitionInfo.Change> changes = info.getChanges();
+ for (int i = changes.size() - 1; i >= 0; --i) {
+ final WindowContainer<?> container = mTargets.get(i).mContainer;
+ if (container.asActivityRecord() != null
+ || shouldApplyAnimOptionsToTask(container.asTask())) {
+ changes.get(i).setAnimationOptions(mOverrideOptions);
+ // TODO(b/295805497): Extract mBackgroundColor from AnimationOptions.
+ changes.get(i).setBackgroundColor(mOverrideOptions.getBackgroundColor());
+ } else if (shouldApplyAnimOptionsToEmbeddedTf(container.asTaskFragment())) {
+ // We only override AnimationOptions because backgroundColor should be from
+ // TaskFragmentAnimationParams.
+ changes.get(i).setAnimationOptions(mOverrideOptions);
}
}
updateActivityTargetForCrossProfileAnimation(info);
@@ -2933,9 +2934,6 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
final AnimationOptions animOptionsForActivityTransition =
calculateAnimationOptionsForActivityTransition(type, sortedTargets);
- if (!Flags.moveAnimationOptionsToChange() && animOptionsForActivityTransition != null) {
- out.setAnimationOptions(animOptionsForActivityTransition);
- }
final ArraySet<WindowContainer> occludedAtEndContainers = new ArraySet<>();
// Convert all the resolved ChangeInfos into TransactionInfo.Change objects in order.
@@ -3059,28 +3057,26 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
}
AnimationOptions animOptions = null;
- if (Flags.moveAnimationOptionsToChange()) {
- if (activityRecord != null && animOptionsForActivityTransition != null) {
- animOptions = animOptionsForActivityTransition;
- } else if (Flags.activityEmbeddingOverlayPresentationFlag()
- && isEmbeddedTaskFragment) {
- final TaskFragmentAnimationParams params = taskFragment.getAnimationParams();
- if (params.hasOverrideAnimation()) {
- // Only set AnimationOptions if there's any animation override.
- // We use separated field for backgroundColor, and
- // AnimationOptions#backgroundColor will be removed in long term.
- animOptions = AnimationOptions.makeCustomAnimOptions(
- taskFragment.getTask().getBasePackageName(),
- params.getOpenAnimationResId(), params.getChangeAnimationResId(),
- params.getCloseAnimationResId(), 0 /* backgroundColor */,
- false /* overrideTaskTransition */);
- animOptions.setUserId(taskFragment.getTask().mUserId);
- }
- }
- if (animOptions != null) {
- change.setAnimationOptions(animOptions);
+ if (activityRecord != null && animOptionsForActivityTransition != null) {
+ animOptions = animOptionsForActivityTransition;
+ } else if (Flags.activityEmbeddingOverlayPresentationFlag()
+ && isEmbeddedTaskFragment) {
+ final TaskFragmentAnimationParams params = taskFragment.getAnimationParams();
+ if (params.hasOverrideAnimation()) {
+ // Only set AnimationOptions if there's any animation override.
+ // We use separated field for backgroundColor, and
+ // AnimationOptions#backgroundColor will be removed in long term.
+ animOptions = AnimationOptions.makeCustomAnimOptions(
+ taskFragment.getTask().getBasePackageName(),
+ params.getOpenAnimationResId(), params.getChangeAnimationResId(),
+ params.getCloseAnimationResId(), 0 /* backgroundColor */,
+ false /* overrideTaskTransition */);
+ animOptions.setUserId(taskFragment.getTask().mUserId);
}
}
+ if (animOptions != null) {
+ change.setAnimationOptions(animOptions);
+ }
if (activityRecord != null) {
change.setActivityComponent(activityRecord.mActivityComponent);
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java
index 5b7e7f17c454..e3b9fdb16d59 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java
@@ -1454,11 +1454,12 @@ final class DevicePolicyEngine {
}
for (int i = 0; i < mLocalPolicies.size(); i++) {
- Set<PolicyKey> localPolicies = new HashSet<>(
- mLocalPolicies.get(mLocalPolicies.keyAt(i)).keySet());
+ // New users are potentially added to mLocalPolicies during the loop body
+ // (see b/374511959).
+ int userId = mLocalPolicies.keyAt(i);
+ Set<PolicyKey> localPolicies = new HashSet<>(mLocalPolicies.get(userId).keySet());
for (PolicyKey policy : localPolicies) {
- PolicyState<?> policyState = mLocalPolicies.get(
- mLocalPolicies.keyAt(i)).get(policy);
+ PolicyState<?> policyState = mLocalPolicies.get(userId).get(policy);
if (policyState.getPoliciesSetByAdmins().containsKey(admin)) {
removeLocalPolicy(
policyState.getPolicyDefinition(), admin, mLocalPolicies.keyAt(i));
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidManifest.xml b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidManifest.xml
index 45523268c966..79dd1292f140 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidManifest.xml
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidManifest.xml
@@ -16,7 +16,7 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.inputmethod.imetests">
+ package="com.android.inputmethodservice">
<!-- Permissions required for granting and logging -->
<uses-permission android:name="android.permission.LOG_COMPAT_CHANGE"/>
@@ -33,7 +33,7 @@
</application>
<!-- The "targetPackage" reference the instruments APK package, which is the SimpleTestIme.apk,
- while the test package is "com.android.inputmethod.imetests" (FrameworksImeTests.apk).-->
+ while the test package is "com.android.inputmethodservice" (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/AndroidTest.xml b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidTest.xml
index 8e6954b474cb..5fe5b237bdef 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidTest.xml
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/AndroidTest.xml
@@ -34,14 +34,15 @@
<option name="test-tag" value="FrameworksImeTests" />
<test class="com.android.tradefed.testtype.AndroidJUnitTest" >
- <option name="package" value="com.android.inputmethod.imetests" />
+ <option name="package" value="com.android.inputmethodservice" />
<option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
<option name="hidden-api-checks" value="false"/>
</test>
- <!-- Collect the files in the dump directory for debugging -->
+ <!-- Collect output of DumpOnFailure -->
<metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
- <option name="directory-keys" value="/sdcard/FrameworksImeTests/" />
+ <option name="directory-keys" value="/data/user/0/com.android.apps.inputmethod.simpleime/files" />
<option name="collect-on-run-ended-only" value="true" />
+ <option name="clean-up" value="true" />
</metrics_collector>
</configuration>
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java
index 856466675a28..6e16d2972c42 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java
@@ -43,6 +43,7 @@ import android.os.RemoteException;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.provider.Settings;
+import android.server.wm.DumpOnFailure;
import android.server.wm.WindowManagerStateHelper;
import android.util.Log;
import android.view.View;
@@ -123,6 +124,9 @@ public class InputMethodServiceTest {
@Rule
public final TestName mName = new TestName();
+ @Rule
+ public final DumpOnFailure mDumpOnFailure = new DumpOnFailure();
+
private Instrumentation mInstrumentation;
private UiDevice mUiDevice;
private InputMethodManager mImm;
@@ -267,8 +271,8 @@ public class InputMethodServiceTest {
final var window = mInputMethodService.getWindow().getWindow();
assertWithMessage("IME window exists").that(window).isNotNull();
- assertWithMessage("IME window showing").that(
- window.getDecorView().getVisibility()).isEqualTo(View.VISIBLE);
+ eventually(() -> assertWithMessage("IME window showing").that(
+ window.getDecorView().getVisibility()).isEqualTo(View.VISIBLE));
mActivity.getWindow().getDecorView().setWindowInsetsAnimationCallback(
new WindowInsetsAnimation.Callback(
@@ -1284,8 +1288,13 @@ public class InputMethodServiceTest {
@NonNull
private UiObject2 getUiObject(@NonNull BySelector bySelector) {
+ final var preScreenshot = mInstrumentation.getUiAutomation().takeScreenshot();
+ mDumpOnFailure.dumpOnFailure("pre-getUiObject", preScreenshot);
final var uiObject = mUiDevice.wait(Until.findObject(bySelector), TIMEOUT_MS);
- assertWithMessage("UiObject with " + bySelector + " was found").that(uiObject).isNotNull();
+ mInstrumentation.waitForIdleSync();
+ final var postScreenshot = mInstrumentation.getUiAutomation().takeScreenshot();
+ mDumpOnFailure.dumpOnFailure("post-getUiObject", postScreenshot);
+ assertWithMessage("UiObject with " + bySelector + " was found").that(uiObject).isNull();
return uiObject;
}
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/ClientControllerTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/ClientControllerTest.java
index 9e3d9ec6b9b6..d98a0d161f9b 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/ClientControllerTest.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/ClientControllerTest.java
@@ -28,6 +28,7 @@ import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.annotation.NonNull;
import android.content.pm.PackageManagerInternal;
import android.os.Handler;
import android.os.IBinder;
@@ -55,8 +56,7 @@ public final class ClientControllerTest {
private static final String SOME_PACKAGE_NAME = "some.package";
@Rule
- public final RavenwoodRule mRavenwood = new RavenwoodRule.Builder()
- .setProvideMainThread(true).build();
+ public final RavenwoodRule mRavenwood = new RavenwoodRule();
@Mock
private PackageManagerInternal mMockPackageManagerInternal;
@@ -65,7 +65,7 @@ public final class ClientControllerTest {
private IInputMethodClient mClient;
@Mock
- private IRemoteInputConnection mConnection;
+ private IRemoteInputConnection mFallbackConnection;
private Handler mHandler;
@@ -81,23 +81,25 @@ public final class ClientControllerTest {
}
// TODO(b/322895594): No need to directly invoke create$ravenwood once b/322895594 is fixed.
- private IInputMethodClientInvoker createInvoker(IInputMethodClient client, Handler handler) {
+ @NonNull
+ private IInputMethodClientInvoker createInvoker(@NonNull IInputMethodClient client,
+ @NonNull Handler handler) {
return RavenwoodRule.isOnRavenwood()
- ? IInputMethodClientInvoker.create$ravenwood(client, handler) :
- IInputMethodClientInvoker.create(client, handler);
+ ? IInputMethodClientInvoker.create$ravenwood(client, handler)
+ : IInputMethodClientInvoker.create(client, handler);
}
@Test
public void testAddClient_cannotAddTheSameClientTwice() {
final var invoker = createInvoker(mClient, mHandler);
synchronized (ImfLock.class) {
- mController.addClient(invoker, mConnection, ANY_DISPLAY_ID, ANY_CALLER_UID,
+ mController.addClient(invoker, mFallbackConnection, ANY_DISPLAY_ID, ANY_CALLER_UID,
ANY_CALLER_PID);
SecurityException thrown = assertThrows(SecurityException.class,
() -> {
synchronized (ImfLock.class) {
- mController.addClient(invoker, mConnection, ANY_DISPLAY_ID,
+ mController.addClient(invoker, mFallbackConnection, ANY_DISPLAY_ID,
ANY_CALLER_UID, ANY_CALLER_PID);
}
});
@@ -111,9 +113,8 @@ public final class ClientControllerTest {
public void testAddClient() throws Exception {
final var invoker = createInvoker(mClient, mHandler);
synchronized (ImfLock.class) {
- final var added = mController.addClient(invoker, mConnection, ANY_DISPLAY_ID,
- ANY_CALLER_UID,
- ANY_CALLER_PID);
+ final var added = mController.addClient(invoker, mFallbackConnection, ANY_DISPLAY_ID,
+ ANY_CALLER_UID, ANY_CALLER_PID);
verify(invoker.asBinder()).linkToDeath(any(IBinder.DeathRecipient.class), eq(0));
assertThat(mController.getClient(invoker.asBinder())).isSameInstanceAs(added);
@@ -127,8 +128,8 @@ public final class ClientControllerTest {
ClientState added;
synchronized (ImfLock.class) {
mController.addClientControllerCallback(callback);
- added = mController.addClient(invoker, mConnection, ANY_DISPLAY_ID, ANY_CALLER_UID,
- ANY_CALLER_PID);
+ added = mController.addClient(invoker, mFallbackConnection, ANY_DISPLAY_ID,
+ ANY_CALLER_UID, ANY_CALLER_PID);
assertThat(mController.getClient(invoker.asBinder())).isSameInstanceAs(added);
assertThat(mController.removeClient(mClient)).isTrue();
}
@@ -141,14 +142,14 @@ public final class ClientControllerTest {
@Test
public void testVerifyClientAndPackageMatch() {
final var invoker = createInvoker(mClient, mHandler);
- when(mMockPackageManagerInternal.isSameApp(eq(SOME_PACKAGE_NAME), /* flags= */
- anyLong(), eq(ANY_CALLER_UID), /* userId= */ anyInt())).thenReturn(true);
+ when(mMockPackageManagerInternal.isSameApp(eq(SOME_PACKAGE_NAME), anyLong() /* flags */,
+ eq(ANY_CALLER_UID), anyInt() /* userId */)).thenReturn(true);
synchronized (ImfLock.class) {
- mController.addClient(invoker, mConnection, ANY_DISPLAY_ID, ANY_CALLER_UID,
+ mController.addClient(invoker, mFallbackConnection, ANY_DISPLAY_ID, ANY_CALLER_UID,
ANY_CALLER_PID);
- assertThat(
- mController.verifyClientAndPackageMatch(mClient, SOME_PACKAGE_NAME)).isTrue();
+ assertThat(mController.verifyClientAndPackageMatch(mClient, SOME_PACKAGE_NAME))
+ .isTrue();
}
}
@@ -171,7 +172,7 @@ public final class ClientControllerTest {
private ClientState mRemoved;
@Override
- public void onClientRemoved(ClientState removed) {
+ public void onClientRemoved(@NonNull ClientState removed) {
mRemoved = removed;
mLatch.countDown();
}
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java
index 3aeab0980b22..05615f68427d 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/DefaultImeVisibilityApplierTest.java
@@ -196,7 +196,7 @@ public class DefaultImeVisibilityApplierTest extends InputMethodManagerServiceTe
@RequiresFlagsDisabled(Flags.FLAG_REFACTOR_INSETS_CONTROLLER)
public void testApplyImeVisibility_hideImeFromTargetOnSecondaryDisplay() {
// Init a IME target client on the secondary display to show IME.
- mInputMethodManagerService.addClient(mMockInputMethodClient, mMockRemoteInputConnection,
+ mInputMethodManagerService.addClient(mMockInputMethodClient, mMockFallbackInputConnection,
10 /* selfReportedDisplayId */);
synchronized (ImfLock.class) {
setAttachedClientLocked(null);
@@ -283,7 +283,7 @@ public class DefaultImeVisibilityApplierTest extends InputMethodManagerServiceTe
softInputMode /* softInputMode */,
0 /* windowFlags */,
mEditorInfo /* editorInfo */,
- mMockRemoteInputConnection /* inputConnection */,
+ mMockFallbackInputConnection /* fallbackInputConnection */,
mMockRemoteAccessibilityInputConnection /* remoteAccessibilityInputConnection */,
mTargetSdkVersion /* unverifiedTargetSdkVersion */,
mUserId /* userId */,
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 6af4064b1288..9ce86ca53630 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceTestBase.java
@@ -116,7 +116,7 @@ public class InputMethodManagerServiceTestBase {
@Mock protected IInputMethodClient mMockInputMethodClient;
@Mock protected IInputMethodSession mMockInputMethodSession;
@Mock protected IBinder mWindowToken;
- @Mock protected IRemoteInputConnection mMockRemoteInputConnection;
+ @Mock protected IRemoteInputConnection mMockFallbackInputConnection;
@Mock protected IRemoteAccessibilityInputConnection mMockRemoteAccessibilityInputConnection;
@Mock protected ImeOnBackInvokedDispatcher mMockImeOnBackInvokedDispatcher;
@Mock protected IInputMethodManager.Stub mMockIInputMethodManager;
@@ -300,7 +300,8 @@ public class InputMethodManagerServiceTestBase {
lifecycle.onBootPhase(SystemService.PHASE_ACTIVITY_MANAGER_READY);
// Call InputMethodManagerService#addClient() as a preparation to start interacting with it.
- mInputMethodManagerService.addClient(mMockInputMethodClient, mMockRemoteInputConnection, 0);
+ mInputMethodManagerService.addClient(mMockInputMethodClient, mMockFallbackInputConnection,
+ 0 /* selfReportedDisplayId */);
createSessionForClient(mMockInputMethodClient);
}
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceWindowGainedFocusTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceWindowGainedFocusTest.java
index c958bd339267..11abc9469c82 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceWindowGainedFocusTest.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/server/inputmethod/InputMethodManagerServiceWindowGainedFocusTest.java
@@ -316,7 +316,7 @@ public class InputMethodManagerServiceWindowGainedFocusTest
softInputMode /* softInputMode */,
0 /* windowFlags */,
mEditorInfo /* editorInfo */,
- mMockRemoteInputConnection /* inputConnection */,
+ mMockFallbackInputConnection /* fallbackInputConnection */,
mMockRemoteAccessibilityInputConnection /* remoteAccessibilityInputConnection */,
mTargetSdkVersion /* unverifiedTargetSdkVersion */,
mUserId /* userId */,
diff --git a/services/tests/mockingservicestests/res/xml/expectedUserWakeupList_1.xml b/services/tests/mockingservicestests/res/xml/expectedUserWakeupList_1.xml
new file mode 100644
index 000000000000..21e6dab518fc
--- /dev/null
+++ b/services/tests/mockingservicestests/res/xml/expectedUserWakeupList_1.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 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.
+ -->
+<users version="1">
+ <user user_id="10" />
+ <user user_id="11" />
+</users> \ No newline at end of file
diff --git a/services/tests/mockingservicestests/res/xml/expectedUserWakeupList_2.xml b/services/tests/mockingservicestests/res/xml/expectedUserWakeupList_2.xml
new file mode 100644
index 000000000000..d0b371f060da
--- /dev/null
+++ b/services/tests/mockingservicestests/res/xml/expectedUserWakeupList_2.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 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.
+ -->
+<users version="1">
+ <user user_id="10" />
+</users> \ No newline at end of file
diff --git a/services/tests/mockingservicestests/src/com/android/server/alarm/UserWakeupStoreTest.java b/services/tests/mockingservicestests/src/com/android/server/alarm/UserWakeupStoreTest.java
index 72883e269a65..240284a42406 100644
--- a/services/tests/mockingservicestests/src/com/android/server/alarm/UserWakeupStoreTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/alarm/UserWakeupStoreTest.java
@@ -23,15 +23,21 @@ import static com.android.server.alarm.UserWakeupStore.USER_START_TIME_DEVIATION
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import android.content.res.AssetManager;
+import android.content.res.XmlResourceParser;
import android.os.Environment;
import android.os.FileUtils;
import android.os.SystemClock;
+import android.util.Xml;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
import com.android.internal.os.BackgroundThread;
+import com.android.internal.util.XmlUtils;
+import com.android.modules.utils.TypedXmlPullParser;
import com.android.modules.utils.testing.ExtendedMockitoRule;
import org.junit.After;
@@ -40,8 +46,11 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
+import org.xmlpull.v1.XmlPullParserException;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.concurrent.ExecutorService;
@@ -55,6 +64,7 @@ public class UserWakeupStoreTest {
private static final File TEST_SYSTEM_DIR = new File(InstrumentationRegistry
.getInstrumentation().getContext().getDataDir(), "alarmsTestDir");
private static final File ROOT_DIR = new File(TEST_SYSTEM_DIR, UserWakeupStore.ROOT_DIR_NAME);
+ private static final String USERS_FILE_NAME = "usersWithAlarmClocks.xml";
private ExecutorService mMockExecutorService = null;
UserWakeupStore mUserWakeupStore;
@@ -105,7 +115,7 @@ public class UserWakeupStoreTest {
Collections.sort(userWakeups);
assertEquals(userIds, userWakeups);
- final File file = new File(ROOT_DIR , "usersWithAlarmClocks.xml");
+ final File file = new File(ROOT_DIR, USERS_FILE_NAME);
assertTrue(file.exists());
}
@@ -178,5 +188,47 @@ public class UserWakeupStoreTest {
assertTrue(mUserWakeupStore.getWakeupTimeForUser(USER_ID_2) - realtime
< 3 * BUFFER_TIME_MS + USER_START_TIME_DEVIATION_LIMIT_MS);
}
- //TODO: b/330264023 - Add tests for I/O in usersWithAlarmClocks.xml.
+
+ @Test
+ public void testWriteWakeups_xmlIsOrdered() {
+ mUserWakeupStore.addUserWakeup(USER_ID_1, TEST_TIMESTAMP - 19_000);
+ mUserWakeupStore.addUserWakeup(USER_ID_2, TEST_TIMESTAMP - 7_000);
+ assertFileContentsMatchExpectedXml("res/xml/expectedUserWakeupList_1.xml");
+ }
+
+ @Test
+ public void testWriteWakeups_containsOneEntryPerUser() {
+ mUserWakeupStore.addUserWakeup(USER_ID_1, TEST_TIMESTAMP - 19_000);
+ mUserWakeupStore.addUserWakeup(USER_ID_1, TEST_TIMESTAMP - 7_000);
+ assertFileContentsMatchExpectedXml("res/xml/expectedUserWakeupList_2.xml");
+ }
+
+ private static void assertFileContentsMatchExpectedXml(String expectedContentsFile) {
+ final File actual = new File(ROOT_DIR, USERS_FILE_NAME);
+ AssetManager assetManager =
+ InstrumentationRegistry.getInstrumentation().getContext().getAssets();
+ try (FileInputStream actualFis = new FileInputStream(actual)) {
+ final TypedXmlPullParser actualParser = Xml.resolvePullParser(actualFis);
+ final XmlResourceParser expectedParser = assetManager.openXmlResourceParser(
+ expectedContentsFile);
+ for (XmlUtils.nextElement(expectedParser), XmlUtils.nextElement(actualParser);
+ actualParser.getEventType() != XmlResourceParser.END_DOCUMENT
+ && expectedParser.getEventType() != XmlResourceParser.END_DOCUMENT;
+ XmlUtils.nextElement(actualParser), XmlUtils.nextElement(expectedParser)) {
+ assertEquals("Event types differ ", expectedParser.getEventType(),
+ actualParser.getEventType());
+ for (int i = 0; i < expectedParser.getAttributeCount(); i++) {
+ assertEquals("Attribute names differ at index " + i,
+ expectedParser.getAttributeName(i), actualParser.getAttributeName(i));
+ assertEquals("Attribute values differ at index " + i,
+ expectedParser.getAttributeValue(i), actualParser.getAttributeValue(i));
+ }
+ }
+ // Ensure they are both at the end of document
+ assertEquals("One of the parsers has not reached the EOF",
+ expectedParser.getEventType(), actualParser.getEventType());
+ } catch (IOException | XmlPullParserException e) {
+ fail(e.getLocalizedMessage());
+ }
+ }
}
diff --git a/services/tests/mockingservicestests/src/com/android/server/crashrecovery/AndroidTest.xml b/services/tests/mockingservicestests/src/com/android/server/crashrecovery/AndroidTest.xml
index 7b06ebec654d..5043c47b05e8 100644
--- a/services/tests/mockingservicestests/src/com/android/server/crashrecovery/AndroidTest.xml
+++ b/services/tests/mockingservicestests/src/com/android/server/crashrecovery/AndroidTest.xml
@@ -31,4 +31,9 @@
<option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
<option name="hidden-api-checks" value="false"/>
</test>
+
+ <!-- Only run this Tests if the Crashrecovery Mainline module is installed. -->
+ <object type="module_controller" class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
+ <option name="mainline-module-package-name" value="com.google.android.crashrecovery" />
+ </object>
</configuration>
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt b/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt
index b53dbc834351..1b2ab2702d49 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/MockSystem.kt
@@ -16,6 +16,7 @@
package com.android.server.pm
import android.app.AppOpsManager
+import android.app.AppOpsManagerInternal
import android.app.PropertyInvalidatedCache
import android.content.Context
import android.content.Intent
@@ -195,6 +196,7 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) {
val componentResolver: ComponentResolver = mock()
val permissionManagerInternal: PermissionManagerServiceInternal = mock()
val appOpsManager: AppOpsManager = mock()
+ val appOpsManagerInternal: AppOpsManagerInternal = mock()
val incrementalManager: IncrementalManager = mock()
val platformCompat: PlatformCompat = mock()
val settings: Settings = mock()
@@ -286,6 +288,9 @@ class MockSystem(withSession: (StaticMockitoSessionBuilder) -> Unit = {}) {
whenever(mocks.injector.permissionManagerServiceInternal) {
mocks.permissionManagerInternal
}
+ whenever(mocks.injector.appOpsManagerInternal) {
+ mocks.appOpsManagerInternal
+ }
whenever(mocks.injector.incrementalManager).thenReturn(mocks.incrementalManager)
whenever(mocks.injector.compatibility).thenReturn(mocks.platformCompat)
whenever(mocks.injector.settings).thenReturn(mocks.settings)
diff --git a/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java
index 360d6ebfe1bd..6ad3df1dd6f2 100644
--- a/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/pm/UserManagerServiceTest.java
@@ -206,7 +206,7 @@ public final class UserManagerServiceTest {
doNothing().when(mSpiedContext).sendBroadcastAsUser(any(), any(), any());
mockIsLowRamDevice(false);
- // Called when getting boot user. config_bootToHeadlessSystemUser is 0 by default.
+ // Called when getting boot user. config_hsumBootStrategy is 0 by default.
mSpyResources = spy(mSpiedContext.getResources());
when(mSpiedContext.getResources()).thenReturn(mSpyResources);
doReturn(0)
diff --git a/services/tests/mockingservicestests/src/com/android/server/rollback/AndroidTest.xml b/services/tests/mockingservicestests/src/com/android/server/rollback/AndroidTest.xml
index 635183c553bf..6f6b017b9b1e 100644
--- a/services/tests/mockingservicestests/src/com/android/server/rollback/AndroidTest.xml
+++ b/services/tests/mockingservicestests/src/com/android/server/rollback/AndroidTest.xml
@@ -31,4 +31,9 @@
<option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
<option name="hidden-api-checks" value="false"/>
</test>
+
+ <!-- Only run this Tests if the Crashrecovery Mainline module is installed. -->
+ <object type="module_controller" class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
+ <option name="mainline-module-package-name" value="com.google.android.crashrecovery" />
+ </object>
</configuration>
diff --git a/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperCropperTest.java b/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperCropperTest.java
index b53f6fbee183..49c37f163ff2 100644
--- a/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperCropperTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperCropperTest.java
@@ -16,6 +16,7 @@
package com.android.server.wallpaper;
+import static android.app.WallpaperManager.FLAG_SYSTEM;
import static android.app.WallpaperManager.ORIENTATION_LANDSCAPE;
import static android.app.WallpaperManager.ORIENTATION_UNKNOWN;
import static android.app.WallpaperManager.ORIENTATION_PORTRAIT;
@@ -23,13 +24,20 @@ import static android.app.WallpaperManager.ORIENTATION_SQUARE_LANDSCAPE;
import static android.app.WallpaperManager.ORIENTATION_SQUARE_PORTRAIT;
import static android.app.WallpaperManager.getOrientation;
import static android.app.WallpaperManager.getRotatedOrientation;
+import static android.os.UserHandle.USER_SYSTEM;
+import static android.view.Display.DEFAULT_DISPLAY;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.android.window.flags.Flags.FLAG_MULTI_CROP;
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
@@ -37,15 +45,29 @@ import android.graphics.Point;
import android.graphics.Rect;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.util.Log;
import android.util.SparseArray;
+import android.view.Display;
+import android.view.DisplayInfo;
import androidx.test.runner.AndroidJUnit4;
+import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.dx.mockito.inline.extended.StaticMockitoSession;
+
+import org.junit.AfterClass;
import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.quality.Strictness;
+import java.io.File;
+import java.io.IOException;
import java.util.Comparator;
import java.util.List;
@@ -57,6 +79,7 @@ import java.util.List;
@RunWith(AndroidJUnit4.class)
@RequiresFlagsEnabled(FLAG_MULTI_CROP)
public class WallpaperCropperTest {
+ private static final String TAG = "WallpaperCropperTest";
@Mock
private WallpaperDisplayHelper mWallpaperDisplayHelper;
@@ -94,6 +117,8 @@ public class WallpaperCropperTest {
private static final List<List<Point>> ALL_FOLDABLE_DISPLAYS = List.of(
FOLDABLE_ONE, FOLDABLE_TWO, FOLDABLE_THREE, FOLDABLE_FOUR);
+ private static StaticMockitoSession sMockitoSession;
+
private SparseArray<Point> mDisplaySizes = new SparseArray<>();
private int mFolded = ORIENTATION_UNKNOWN;
private int mFoldedRotated = ORIENTATION_UNKNOWN;
@@ -103,12 +128,53 @@ public class WallpaperCropperTest {
private static final List<Integer> ALL_MODES = List.of(
WallpaperCropper.ADD, WallpaperCropper.REMOVE, WallpaperCropper.BALANCE);
+ private final SparseArray<File> mTempDirs = new SparseArray<>();
+
+ private final TemporaryFolder mFolder = new TemporaryFolder();
+
+ @Rule
+ public RuleChain rules = RuleChain.outerRule(mFolder);
+
+ @BeforeClass
+ public static void setUpClass() {
+ sMockitoSession = mockitoSession()
+ .strictness(Strictness.LENIENT)
+ .spyStatic(WallpaperUtils.class)
+ .startMocking();
+ }
+
+ @AfterClass
+ public static void tearDownClass() {
+ if (sMockitoSession != null) {
+ sMockitoSession.finishMocking();
+ sMockitoSession = null;
+ }
+ }
+
@Before
public void setUp() {
initMocks(this);
+ ExtendedMockito.doAnswer(invocation -> {
+ int userId = (invocation.getArgument(0));
+ return getWallpaperTestDir(userId);
+ }).when(() -> WallpaperUtils.getWallpaperDir(anyInt()));
+
mWallpaperCropper = new WallpaperCropper(mWallpaperDisplayHelper);
}
+ private File getWallpaperTestDir(int userId) {
+ File tempDir = mTempDirs.get(userId);
+ if (tempDir == null) {
+ try {
+ tempDir = mFolder.newFolder(String.valueOf(userId));
+ mTempDirs.append(userId, tempDir);
+ } catch (IOException e) {
+ Log.e(TAG, "getWallpaperTestDir failed at userId= " + userId);
+ }
+ }
+ return tempDir;
+ }
+
private void setUpWithDisplays(List<Point> displaySizes) {
mDisplaySizes = new SparseArray<>();
displaySizes.forEach(size -> {
@@ -632,6 +698,134 @@ public class WallpaperCropperTest {
}
}
+ // Test isWallpaperCompatibleForDisplay always return true for the default display.
+ @Test
+ public void isWallpaperCompatibleForDisplay_defaultDisplay_returnTrue()
+ throws Exception {
+ DisplayInfo displayInfo = new DisplayInfo();
+ displayInfo.logicalWidth = 2560;
+ displayInfo.logicalHeight = 1044;
+ doReturn(displayInfo).when(mWallpaperDisplayHelper).getDisplayInfo(eq(DEFAULT_DISPLAY));
+ WallpaperData wallpaperData = createWallpaperData(/* isStockWallpaper = */ false,
+ new Point(100, 100));
+
+ assertThat(
+ mWallpaperCropper.isWallpaperCompatibleForDisplay(DEFAULT_DISPLAY,
+ wallpaperData)).isTrue();
+ }
+
+ // Test isWallpaperCompatibleForDisplay always return true for the stock wallpaper.
+ @Test
+ public void isWallpaperCompatibleForDisplay_stockWallpaper_returnTrue()
+ throws Exception {
+ final int displayId = 2;
+ DisplayInfo displayInfo = new DisplayInfo();
+ displayInfo.logicalWidth = 2560;
+ displayInfo.logicalHeight = 1044;
+ doReturn(displayInfo).when(mWallpaperDisplayHelper).getDisplayInfo(eq(displayId));
+ WallpaperData wallpaperData = createWallpaperData(/* isStockWallpaper = */ true,
+ new Point(100, 100));
+
+ assertThat(
+ mWallpaperCropper.isWallpaperCompatibleForDisplay(displayId,
+ wallpaperData)).isTrue();
+ }
+
+ // Test isWallpaperCompatibleForDisplay wallpaper is suitable for the display and wallpaper
+ // aspect ratio meets the hard-coded aspect ratio.
+ @Test
+ public void isWallpaperCompatibleForDisplay_wallpaperSizeSuitableForDisplayAndMeetAspectRatio_returnTrue()
+ throws Exception {
+ final int displayId = 2;
+ DisplayInfo displayInfo = new DisplayInfo();
+ displayInfo.logicalWidth = 2560;
+ displayInfo.logicalHeight = 1044;
+ doReturn(displayInfo).when(mWallpaperDisplayHelper).getDisplayInfo(eq(displayId));
+ WallpaperData wallpaperData = createWallpaperData(/* isStockWallpaper = */ false,
+ new Point(4000, 3000));
+
+ assertThat(
+ mWallpaperCropper.isWallpaperCompatibleForDisplay(displayId,
+ wallpaperData)).isTrue();
+ }
+
+ // Test isWallpaperCompatibleForDisplay wallpaper is not suitable for the display and wallpaper
+ // aspect ratio meets the hard-coded aspect ratio.
+ @Test
+ public void isWallpaperCompatibleForDisplay_wallpaperSizeNotSuitableForDisplayAndMeetAspectRatio_returnFalse()
+ throws Exception {
+ final int displayId = 2;
+ DisplayInfo displayInfo = new DisplayInfo();
+ displayInfo.logicalWidth = 2560;
+ displayInfo.logicalHeight = 1044;
+ doReturn(displayInfo).when(mWallpaperDisplayHelper).getDisplayInfo(eq(displayId));
+ WallpaperData wallpaperData = createWallpaperData(/* isStockWallpaper = */ false,
+ new Point(1000, 500));
+
+ assertThat(
+ mWallpaperCropper.isWallpaperCompatibleForDisplay(displayId,
+ wallpaperData)).isFalse();
+ }
+
+ // Test isWallpaperCompatibleForDisplay wallpaper is suitable for the display and wallpaper
+ // aspect ratio doesn't meet the hard-coded aspect ratio.
+ @Test
+ public void isWallpaperCompatibleForDisplay_wallpaperSizeSuitableForDisplayAndDoNotMeetAspectRatio_returnFalse()
+ throws Exception {
+ final int displayId = 2;
+ DisplayInfo displayInfo = new DisplayInfo();
+ displayInfo.logicalWidth = 2560;
+ displayInfo.logicalHeight = 1044;
+ doReturn(displayInfo).when(mWallpaperDisplayHelper).getDisplayInfo(eq(displayId));
+ WallpaperData wallpaperData = createWallpaperData(/* isStockWallpaper = */ false,
+ new Point(2000, 4000));
+
+ assertThat(
+ mWallpaperCropper.isWallpaperCompatibleForDisplay(displayId,
+ wallpaperData)).isFalse();
+ }
+
+ // Test isWallpaperCompatibleForDisplay, portrait display, wallpaper is suitable for the display
+ // and wallpaper aspect ratio doesn't meet the hard-coded aspect ratio.
+ @Test
+ public void isWallpaperCompatibleForDisplay_portraitDisplay_wallpaperSizeSuitableForDisplayAndMeetAspectRatio_returnTrue()
+ throws Exception {
+ final int displayId = 2;
+ DisplayInfo displayInfo = new DisplayInfo();
+ displayInfo.logicalWidth = 1044;
+ displayInfo.logicalHeight = 2560;
+ doReturn(displayInfo).when(mWallpaperDisplayHelper).getDisplayInfo(eq(displayId));
+ WallpaperData wallpaperData = createWallpaperData(/* isStockWallpaper = */ false,
+ new Point(2000, 4000));
+
+ assertThat(
+ mWallpaperCropper.isWallpaperCompatibleForDisplay(displayId,
+ wallpaperData)).isTrue();
+ }
+
+ private void mockDisplay(int displayId, Point displayResolution) {
+ final Display mockDisplay = mock(Display.class);
+ when(mockDisplay.getDisplayInfo(any(DisplayInfo.class))).thenAnswer(invocation -> {
+ DisplayInfo displayInfo = invocation.getArgument(0);
+ displayInfo.displayId = displayId;
+ displayInfo.logicalWidth = displayResolution.x;
+ displayInfo.logicalHeight = displayResolution.y;
+ return true;
+ });
+ }
+
+ private WallpaperData createWallpaperData(boolean isStockWallpaper, Point wallpaperSize)
+ throws Exception {
+ WallpaperData wallpaperData = new WallpaperData(USER_SYSTEM, FLAG_SYSTEM);
+ File wallpaperFile = wallpaperData.getWallpaperFile();
+ if (!isStockWallpaper) {
+ wallpaperFile.getParentFile().mkdirs();
+ wallpaperFile.createNewFile();
+ }
+ wallpaperData.cropHint.set(0, 0, wallpaperSize.x, wallpaperSize.y);
+ return wallpaperData;
+ }
+
private static Rect centerOf(Rect container, Point point) {
checkSubset(container, point);
int diffWidth = container.width() - point.x;
diff --git a/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java b/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java
index 49f2e9d70287..bada337c7aa6 100644
--- a/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java
+++ b/services/tests/mockingservicestests/src/com/android/server/wallpaper/WallpaperManagerServiceTests.java
@@ -123,6 +123,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
+import java.util.Map;
/**
* Tests for the {@link WallpaperManagerService} class.
@@ -744,7 +745,9 @@ public class WallpaperManagerServiceTests {
wallpaper.connection.mService = mockIWallpaperService;
// GIVEN there are two displays: DEFAULT_DISPLAY, 2
final int testDisplayId = 2;
- setUpDisplays(List.of(DEFAULT_DISPLAY, testDisplayId));
+ setUpDisplays(Map.of(
+ DEFAULT_DISPLAY, true,
+ testDisplayId, true));
// WHEN display ID, 2, is ready.
WallpaperManagerInternal wallpaperManagerInternal = LocalServices.getService(
@@ -784,7 +787,9 @@ public class WallpaperManagerServiceTests {
lockWallpaper.connection.mService = mockIWallpaperService;
// GIVEN there are two displays: DEFAULT_DISPLAY, 2
final int testDisplayId = 2;
- setUpDisplays(List.of(DEFAULT_DISPLAY, testDisplayId));
+ setUpDisplays(Map.of(
+ DEFAULT_DISPLAY, true,
+ testDisplayId, true));
// WHEN display ID, 2, is ready.
WallpaperManagerInternal wallpaperManagerInternal = LocalServices.getService(
@@ -825,13 +830,15 @@ public class WallpaperManagerServiceTests {
throws Exception {
final int testUserId = USER_SYSTEM;
mService.switchUser(testUserId, null);
+ mService.mLastWallpaper.connection.mWallpaper.cropHint.set(0, 0, 4000, 2250);
IWallpaperService mockIWallpaperService = mock(IWallpaperService.class);
mService.mFallbackWallpaper.connection.mService = mockIWallpaperService;
// GIVEN there are two displays: DEFAULT_DISPLAY, 2
final int testDisplayId = 2;
- setUpDisplays(List.of(DEFAULT_DISPLAY, testDisplayId));
- // GIVEN the wallpaper isn't compatible with display ID, 2
- mService.removeWallpaperCompatibleDisplayForTest(testDisplayId);
+ setUpDisplays(Map.of(
+ DEFAULT_DISPLAY, true,
+ // Given the wallpaper is smaller thn the display resolution.
+ testDisplayId, false));
// WHEN display ID, 2, is ready.
WallpaperManagerInternal wallpaperManagerInternal = LocalServices.getService(
@@ -870,7 +877,10 @@ public class WallpaperManagerServiceTests {
wallpaper.connection.mService = mockIWallpaperService;
// GIVEN there are two displays: DEFAULT_DISPLAY, 2
final int testDisplayId = 2;
- setUpDisplays(List.of(DEFAULT_DISPLAY, testDisplayId));
+ mService.mLastWallpaper.connection.mWallpaper.cropHint.set(0, 0, 4000, 2250);
+ setUpDisplays(Map.of(
+ DEFAULT_DISPLAY, true,
+ testDisplayId, true));
// GIVEN wallpaper connections have been established for display ID, 2.
WallpaperManagerInternal wallpaperManagerInternal = LocalServices.getService(
WallpaperManagerInternal.class);
@@ -908,7 +918,9 @@ public class WallpaperManagerServiceTests {
lockWallpaper.connection.mService = mockIWallpaperService;
// GIVEN there are two displays: DEFAULT_DISPLAY, 2
final int testDisplayId = 2;
- setUpDisplays(List.of(DEFAULT_DISPLAY, testDisplayId));
+ setUpDisplays(Map.of(
+ DEFAULT_DISPLAY, true,
+ testDisplayId, true));
// GIVEN wallpaper connections have been established for display ID, 2.
WallpaperManagerInternal wallpaperManagerInternal = LocalServices.getService(
WallpaperManagerInternal.class);
@@ -942,9 +954,9 @@ public class WallpaperManagerServiceTests {
mService.mFallbackWallpaper.connection.mService = mockIWallpaperService;
// GIVEN there are two displays: DEFAULT_DISPLAY, 2
final int testDisplayId = 2;
- setUpDisplays(List.of(DEFAULT_DISPLAY, testDisplayId));
- // GIVEN display ID, 2, is incompatible with the wallpaper.
- mService.removeWallpaperCompatibleDisplayForTest(testDisplayId);
+ setUpDisplays(Map.of(
+ DEFAULT_DISPLAY, true,
+ testDisplayId, false));
// GIVEN wallpaper connections have been established for display ID, 2.
WallpaperManagerInternal wallpaperManagerInternal = LocalServices.getService(
WallpaperManagerInternal.class);
@@ -991,7 +1003,9 @@ public class WallpaperManagerServiceTests {
wallpaper.connection.mService = mockIWallpaperService;
// GIVEN there are two displays: DEFAULT_DISPLAY, 2
final int testDisplayId = 2;
- setUpDisplays(List.of(DEFAULT_DISPLAY, testDisplayId));
+ setUpDisplays(Map.of(
+ DEFAULT_DISPLAY, true,
+ testDisplayId, true));
// GIVEN wallpaper connections have been established for displayID, 2.
WallpaperManagerInternal wallpaperManagerInternal = LocalServices.getService(
WallpaperManagerInternal.class);
@@ -1025,7 +1039,9 @@ public class WallpaperManagerServiceTests {
lockWallpaper.connection.mService = mockIWallpaperService;
// GIVEN there are two displays: DEFAULT_DISPLAY, 2
final int testDisplayId = 2;
- setUpDisplays(List.of(DEFAULT_DISPLAY, testDisplayId));
+ setUpDisplays(Map.of(
+ DEFAULT_DISPLAY, true,
+ testDisplayId, true));
// GIVEN wallpaper connections have been established for displayID, 2.
WallpaperManagerInternal wallpaperManagerInternal = LocalServices.getService(
WallpaperManagerInternal.class);
@@ -1053,12 +1069,14 @@ public class WallpaperManagerServiceTests {
@Test
@EnableFlags(Flags.FLAG_ENABLE_CONNECTED_DISPLAYS_WALLPAPER)
public void deviceBooted_multiDisplays_shouldHaveExpectedConnections() {
+ final int testUserId = USER_SYSTEM;
final int incompatibleDisplayId = 2;
final int compatibleDisplayId = 3;
- setUpDisplays(List.of(DEFAULT_DISPLAY, incompatibleDisplayId, compatibleDisplayId));
- mService.removeWallpaperCompatibleDisplayForTest(incompatibleDisplayId);
+ setUpDisplays(Map.of(
+ DEFAULT_DISPLAY, true,
+ compatibleDisplayId, true,
+ incompatibleDisplayId, false));
- final int testUserId = USER_SYSTEM;
// After reboot, a switch user triggers the wallpapers initialization.
mService.switchUser(testUserId, null);
@@ -1089,15 +1107,18 @@ public class WallpaperManagerServiceTests {
public void setWallpaperComponent_multiDisplays_displayBecomeCompatible_shouldHaveExpectedConnections() {
final int display2 = 2;
final int display3 = 3;
- setUpDisplays(List.of(DEFAULT_DISPLAY, display2, display3));
- mService.removeWallpaperCompatibleDisplayForTest(display2);
final int testUserId = USER_SYSTEM;
+ setUpDisplays(Map.of(
+ DEFAULT_DISPLAY, true,
+ display2, false,
+ display3, true));
+
mService.switchUser(testUserId, null);
+ doReturn(true).when(mService.mWallpaperCropper).isWallpaperCompatibleForDisplay(
+ eq(display2), any());
// Switch to a test wallpaper and then image wallpaper later to simulate a wallpaper change.
mService.setWallpaperComponent(TEST_WALLPAPER_COMPONENT, sContext.getOpPackageName(),
FLAG_SYSTEM | FLAG_LOCK, testUserId);
- mService.addWallpaperCompatibleDisplayForTest(display2);
-
mService.setWallpaperComponent(sImageWallpaperComponentName, sContext.getOpPackageName(),
FLAG_SYSTEM | FLAG_LOCK, testUserId);
@@ -1126,15 +1147,19 @@ public class WallpaperManagerServiceTests {
public void setWallpaperComponent_multiDisplays_displayBecomeIncompatible_shouldHaveExpectedConnections() {
final int display2 = 2;
final int display3 = 3;
- setUpDisplays(List.of(DEFAULT_DISPLAY, display2, display3));
- mService.removeWallpaperCompatibleDisplayForTest(display2);
final int testUserId = USER_SYSTEM;
+ setUpDisplays(Map.of(
+ DEFAULT_DISPLAY, true,
+ display2, true,
+ display3, true));
mService.switchUser(testUserId, null);
+ doReturn(false).when(mService.mWallpaperCropper).isWallpaperCompatibleForDisplay(
+ eq(display2), any());
+ doReturn(false).when(mService.mWallpaperCropper).isWallpaperCompatibleForDisplay(
+ eq(display3), any());
// Switch to a test wallpaper and then image wallpaper later to simulate a wallpaper change.
mService.setWallpaperComponent(TEST_WALLPAPER_COMPONENT, sContext.getOpPackageName(),
FLAG_SYSTEM | FLAG_LOCK, testUserId);
- mService.removeWallpaperCompatibleDisplayForTest(display3);
-
mService.setWallpaperComponent(sImageWallpaperComponentName, sContext.getOpPackageName(),
FLAG_SYSTEM | FLAG_LOCK, testUserId);
@@ -1161,14 +1186,15 @@ public class WallpaperManagerServiceTests {
public void setWallpaperComponent_systemAndLockWallpapers_multiDisplays_shouldHaveExpectedConnections() {
final int incompatibleDisplayId = 2;
final int compatibleDisplayId = 3;
- setUpDisplays(List.of(DEFAULT_DISPLAY, incompatibleDisplayId, compatibleDisplayId));
+ setUpDisplays(Map.of(
+ DEFAULT_DISPLAY, true,
+ incompatibleDisplayId, false,
+ compatibleDisplayId, true));
final int testUserId = USER_SYSTEM;
mService.switchUser(testUserId, null);
// Switch to a test wallpaper and then image wallpaper later to simulate a wallpaper change.
mService.setWallpaperComponent(TEST_WALLPAPER_COMPONENT, sContext.getOpPackageName(),
FLAG_SYSTEM | FLAG_LOCK, testUserId);
- mService.removeWallpaperCompatibleDisplayForTest(incompatibleDisplayId);
-
mService.setWallpaperComponent(sImageWallpaperComponentName, sContext.getOpPackageName(),
FLAG_SYSTEM, testUserId);
@@ -1260,21 +1286,27 @@ public class WallpaperManagerServiceTests {
* to return them. It also sets up the {@link WindowManagerInternal} to indicate that all
* displays support home.
*
- * @param displayIds A list of display IDs to create mock displays for.
+ * @param displayIdsToWallpaperCompatibility A map of display IDs to wallpaper compatibility.
*/
- private void setUpDisplays(List<Integer> displayIds) {
+ private void setUpDisplays(Map<Integer, Boolean> displayIdsToWallpaperCompatibility) {
+ spyOn(mService.mWallpaperCropper);
doReturn(true).when(sWindowManagerInternal).isHomeSupportedOnDisplay(anyInt());
- Display[] mockDisplays = new Display[displayIds.size()];
- for (int i = 0; i < displayIds.size(); i++) {
- final int displayId = displayIds.get(i);
+ Display[] mockDisplays = new Display[displayIdsToWallpaperCompatibility.size()];
+ int counter = 0;
+ for (Map.Entry<Integer, Boolean> entry : displayIdsToWallpaperCompatibility.entrySet()) {
+ final int displayId = entry.getKey();
+ final boolean compatibleWithWallpaper = entry.getValue();
final Display mockDisplay = mock(Display.class);
- mockDisplays[i] = mockDisplay;
+ mockDisplays[counter] = mockDisplay;
doReturn(DISPLAY_SIZE_DIMENSION).when(mockDisplay).getMaximumSizeDimension();
doReturn(mockDisplay).when(mDisplayManager).getDisplay(eq(displayId));
doReturn(displayId).when(mockDisplay).getDisplayId();
doReturn(true).when(mockDisplay).hasAccess(anyInt());
- mService.addWallpaperCompatibleDisplayForTest(displayId);
+ doReturn(compatibleWithWallpaper).when(
+ mService.mWallpaperCropper).isWallpaperCompatibleForDisplay(eq(displayId),
+ any());
+ counter++;
}
doReturn(mockDisplays).when(mDisplayManager).getDisplays();
@@ -1297,6 +1329,4 @@ public class WallpaperManagerServiceTests {
assertEquals(pfdContents, fileContents);
}
}
-
-
}
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/AggregatedPowerStatsTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/AggregatedPowerStatsTest.java
index 0e73329dcfe5..978fd1af2636 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/AggregatedPowerStatsTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/AggregatedPowerStatsTest.java
@@ -18,6 +18,7 @@ package com.android.server.power.stats.processor;
import static com.google.common.truth.Truth.assertThat;
+import android.annotation.SuppressLint;
import android.os.BatteryConsumer;
import android.os.PersistableBundle;
import android.util.SparseArray;
@@ -280,6 +281,7 @@ public class AggregatedPowerStatsTest {
.isEqualTo(new long[]{250, 300});
}
+ @SuppressLint("CheckResult")
private static long[] getDeviceStats(
AggregatedPowerStats stats, int powerComponentId,
int... states) {
@@ -290,6 +292,7 @@ public class AggregatedPowerStatsTest {
return out;
}
+ @SuppressLint("CheckResult")
private static long[] getStateStats(
AggregatedPowerStats stats, int key, int... states) {
PowerComponentAggregatedPowerStats powerComponentStats =
@@ -299,6 +302,7 @@ public class AggregatedPowerStatsTest {
return out;
}
+ @SuppressLint("CheckResult")
private static long[] getUidDeviceStats(
AggregatedPowerStats stats, int powerComponentId,
int uid, int... states) {
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/AmbientDisplayPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/AmbientDisplayPowerStatsProcessorTest.java
index 21e615f8c740..58e9d1e26f2c 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/AmbientDisplayPowerStatsProcessorTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/AmbientDisplayPowerStatsProcessorTest.java
@@ -27,6 +27,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
+import android.annotation.SuppressLint;
import android.hardware.power.stats.EnergyConsumerType;
import android.os.BatteryConsumer;
import android.os.Handler;
@@ -166,6 +167,7 @@ public class AmbientDisplayPowerStatsProcessorTest {
return stats.getPowerComponentStats(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY);
}
+ @SuppressLint("CheckResult")
private void assertPowerEstimate(
PowerComponentAggregatedPowerStats aggregatedStats,
int powerState, int screenState, double expectedPowerEstimate) {
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/BasePowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/BasePowerStatsProcessorTest.java
index cca60339acf7..58784d7b4a25 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/BasePowerStatsProcessorTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/BasePowerStatsProcessorTest.java
@@ -34,6 +34,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
+import android.annotation.SuppressLint;
import android.os.BatteryConsumer;
import android.os.BatteryUsageStats;
import android.os.Process;
@@ -68,6 +69,7 @@ public class BasePowerStatsProcessorTest {
.setProcessorSupplier(() -> new BasePowerStatsProcessor(() -> 4000));
}
+ @SuppressLint("CheckResult")
@Test
public void processPowerStats() {
AggregatedPowerStats aggregatedPowerStats = prepareAggregatedPowerStats(true);
@@ -95,9 +97,11 @@ public class BasePowerStatsProcessorTest {
stats.getUidStats(uidStats, APP_UID1,
states(POWER_STATE_BATTERY, SCREEN_STATE_OTHER, PROCESS_STATE_FOREGROUND_SERVICE));
assertThat(statsLayout.getUidUsageDuration(uidStats)).isEqualTo(5000);
- stats.getUidStats(uidStats, APP_UID1,
+ boolean nonZero = stats.getUidStats(uidStats, APP_UID1,
states(POWER_STATE_BATTERY, SCREEN_STATE_OTHER, PROCESS_STATE_UNSPECIFIED));
- assertThat(statsLayout.getUidUsageDuration(uidStats)).isEqualTo(0);
+ if (nonZero) {
+ assertThat(statsLayout.getUidUsageDuration(uidStats)).isEqualTo(0);
+ }
stats.getUidStats(uidStats, APP_UID2,
states(POWER_STATE_BATTERY, SCREEN_STATE_ON, PROCESS_STATE_CACHED));
@@ -105,11 +109,14 @@ public class BasePowerStatsProcessorTest {
stats.getUidStats(uidStats, APP_UID2,
states(POWER_STATE_BATTERY, SCREEN_STATE_OTHER, PROCESS_STATE_CACHED));
assertThat(statsLayout.getUidUsageDuration(uidStats)).isEqualTo(8500);
- stats.getUidStats(uidStats, APP_UID2,
+ nonZero = stats.getUidStats(uidStats, APP_UID2,
states(POWER_STATE_BATTERY, SCREEN_STATE_OTHER, PROCESS_STATE_UNSPECIFIED));
- assertThat(statsLayout.getUidUsageDuration(uidStats)).isEqualTo(0);
+ if (nonZero) {
+ assertThat(statsLayout.getUidUsageDuration(uidStats)).isEqualTo(0);
+ }
}
+ @SuppressLint("CheckResult")
@Test
public void fuelgaugeAvailable() {
AggregatedPowerStats aggregatedPowerStats = prepareAggregatedPowerStats(true);
@@ -138,6 +145,7 @@ public class BasePowerStatsProcessorTest {
assertThat(dischargeDuration).isWithin(5).of(6000);
}
+ @SuppressLint("CheckResult")
@Test
public void fuelgaugeUnavailable() {
AggregatedPowerStats aggregatedPowerStats = prepareAggregatedPowerStats(false);
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/BinaryStatePowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/BinaryStatePowerStatsProcessorTest.java
index 2ff7dde3255f..e6e7f6e105b7 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/BinaryStatePowerStatsProcessorTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/BinaryStatePowerStatsProcessorTest.java
@@ -30,6 +30,7 @@ import static com.android.server.power.stats.processor.AggregatedPowerStatsConfi
import static com.google.common.truth.Truth.assertThat;
+import android.annotation.SuppressLint;
import android.os.BatteryConsumer;
import android.os.BatteryStats;
import android.os.PersistableBundle;
@@ -74,6 +75,7 @@ public class BinaryStatePowerStatsProcessorTest {
}
}
+ @SuppressLint("CheckResult")
@Test
public void powerProfileModel() {
BinaryStatePowerStatsLayout statsLayout = new BinaryStatePowerStatsLayout();
@@ -138,12 +140,14 @@ public class BinaryStatePowerStatsProcessorTest {
assertThat(statsLayout.getUidPowerEstimate(uidStats))
.isWithin(PRECISION).of(expectedPower2);
- stats.getUidStats(uidStats, APP_UID2,
- states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED));
- assertThat(statsLayout.getUidPowerEstimate(uidStats))
- .isWithin(PRECISION).of(0);
+ if (stats.getUidStats(uidStats, APP_UID2,
+ states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED))) {
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(0);
+ }
}
+ @SuppressLint("CheckResult")
@Test
public void energyConsumerModel() {
BinaryStatePowerStatsLayout
@@ -232,10 +236,11 @@ public class BinaryStatePowerStatsProcessorTest {
assertThat(statsLayout.getUidPowerEstimate(uidStats))
.isWithin(PRECISION).of(expectedPower2);
- stats.getUidStats(uidStats, APP_UID2,
- states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED));
- assertThat(statsLayout.getUidPowerEstimate(uidStats))
- .isWithin(PRECISION).of(0);
+ if (stats.getUidStats(uidStats, APP_UID2,
+ states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED))) {
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(0);
+ }
}
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/BluetoothPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/BluetoothPowerStatsProcessorTest.java
index 60131861ce89..6d7119dc1f0e 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/BluetoothPowerStatsProcessorTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/BluetoothPowerStatsProcessorTest.java
@@ -33,6 +33,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import android.annotation.SuppressLint;
import android.bluetooth.BluetoothActivityEnergyInfo;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.UidTraffic;
@@ -161,6 +162,7 @@ public class BluetoothPowerStatsProcessorTest {
when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)).thenReturn(true);
}
+ @SuppressLint("CheckResult")
@Test
public void powerProfileModel_mostlyDataTransfer() {
// No power monitoring hardware
@@ -262,6 +264,7 @@ public class BluetoothPowerStatsProcessorTest {
.isWithin(PRECISION).of(expectedPower2 * 0.75);
}
+ @SuppressLint("CheckResult")
@Test
public void powerProfileModel_mostlyScan() {
// No power monitoring hardware
@@ -361,6 +364,7 @@ public class BluetoothPowerStatsProcessorTest {
.isWithin(PRECISION).of(expectedPower2 * 0.75);
}
+ @SuppressLint("CheckResult")
@Test
public void consumedEnergyModel() {
when(mConsumedEnergyRetriever.getVoltageMv()).thenReturn(VOLTAGE_MV);
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/CameraPowerStatsTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/CameraPowerStatsTest.java
index 23642de466a1..a95963242d8f 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/CameraPowerStatsTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/CameraPowerStatsTest.java
@@ -33,6 +33,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
+import android.annotation.SuppressLint;
import android.hardware.power.stats.EnergyConsumerResult;
import android.hardware.power.stats.EnergyConsumerType;
import android.os.BatteryConsumer;
@@ -117,6 +118,7 @@ public class CameraPowerStatsTest {
mMonotonicClock = new MonotonicClock(0, mStatsRule.getMockClock());
}
+ @SuppressLint("CheckResult")
@Test
public void energyConsumerModel() {
when(mConsumedEnergyRetriever.getVoltageMv()).thenReturn(VOLTAGE_MV);
@@ -211,10 +213,11 @@ public class CameraPowerStatsTest {
assertThat(statsLayout.getUidPowerEstimate(uidStats))
.isWithin(PRECISION).of(expectedPower2);
- stats.getUidStats(uidStats, APP_UID2,
- states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED));
- assertThat(statsLayout.getUidPowerEstimate(uidStats))
- .isWithin(PRECISION).of(0);
+ if (stats.getUidStats(uidStats, APP_UID2,
+ states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED))) {
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(0);
+ }
}
private BatteryStats.HistoryItem buildHistoryItem(int timestamp, boolean stateOn,
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/CustomEnergyConsumerPowerStatsTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/CustomEnergyConsumerPowerStatsTest.java
index 42baba765276..a421675f1896 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/CustomEnergyConsumerPowerStatsTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/CustomEnergyConsumerPowerStatsTest.java
@@ -33,6 +33,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
+import android.annotation.SuppressLint;
import android.hardware.power.stats.EnergyConsumerAttribution;
import android.hardware.power.stats.EnergyConsumerResult;
import android.hardware.power.stats.EnergyConsumerType;
@@ -154,6 +155,7 @@ public class CustomEnergyConsumerPowerStatsTest {
.isEqualTo(6000);
}
+ @SuppressLint("CheckResult")
@Test
public void processStats() throws Exception {
AggregatedPowerStats aggregatedPowerStats = createAggregatedPowerStats();
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/GnssPowerStatsTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/GnssPowerStatsTest.java
index c63267ec6ae7..b4f21133f621 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/GnssPowerStatsTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/GnssPowerStatsTest.java
@@ -33,6 +33,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
+import android.annotation.SuppressLint;
import android.hardware.power.stats.EnergyConsumerResult;
import android.hardware.power.stats.EnergyConsumerType;
import android.location.GnssSignalQuality;
@@ -122,6 +123,7 @@ public class GnssPowerStatsTest {
mHistoryItem.clear();
}
+ @SuppressLint("CheckResult")
@Test
public void powerProfileModel() {
// ODPM unsupported
@@ -206,12 +208,14 @@ public class GnssPowerStatsTest {
assertThat(statsLayout.getUidPowerEstimate(uidStats))
.isWithin(PRECISION).of(0.51111);
- stats.getUidStats(uidStats, APP_UID2,
- states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED));
- assertThat(statsLayout.getUidPowerEstimate(uidStats))
- .isWithin(PRECISION).of(0);
+ if (stats.getUidStats(uidStats, APP_UID2,
+ states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED))) {
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(0);
+ }
}
+ @SuppressLint("CheckResult")
@Test
public void initialStateGnssOn() {
// ODPM unsupported
@@ -285,12 +289,14 @@ public class GnssPowerStatsTest {
assertThat(statsLayout.getUidPowerEstimate(uidStats))
.isWithin(PRECISION).of(0.51111);
- stats.getUidStats(uidStats, APP_UID2,
- states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED));
- assertThat(statsLayout.getUidPowerEstimate(uidStats))
- .isWithin(PRECISION).of(0);
+ if (stats.getUidStats(uidStats, APP_UID2,
+ states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED))) {
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(0);
+ }
}
+ @SuppressLint("CheckResult")
@Test
public void energyConsumerModel() {
when(mConsumedEnergyRetriever.getVoltageMv()).thenReturn(VOLTAGE_MV);
@@ -386,10 +392,11 @@ public class GnssPowerStatsTest {
assertThat(statsLayout.getUidPowerEstimate(uidStats))
.isWithin(PRECISION).of(expectedPower2);
- stats.getUidStats(uidStats, APP_UID2,
- states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED));
- assertThat(statsLayout.getUidPowerEstimate(uidStats))
- .isWithin(PRECISION).of(0);
+ if (stats.getUidStats(uidStats, APP_UID2,
+ states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED))) {
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(0);
+ }
}
private BatteryStats.HistoryItem buildHistoryItemInitialStateGpsOn(long timestamp) {
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/MobileRadioPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/MobileRadioPowerStatsProcessorTest.java
index 6acd36885b1e..3dc401769e7d 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/MobileRadioPowerStatsProcessorTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/MobileRadioPowerStatsProcessorTest.java
@@ -39,6 +39,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import android.annotation.Nullable;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.power.stats.EnergyConsumerResult;
@@ -170,6 +171,7 @@ public class MobileRadioPowerStatsProcessorTest {
.thenAnswer(invocation -> invocation.getArgument(0));
}
+ @SuppressLint("CheckResult")
@Test
public void powerProfileModel() {
// No power monitoring hardware
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/MultiStateStatsTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/MultiStateStatsTest.java
index 3b614bdb38ed..9abb06f338e3 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/MultiStateStatsTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/MultiStateStatsTest.java
@@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertWithMessage;
import static org.junit.Assert.assertThrows;
+import android.annotation.SuppressLint;
import android.os.BatteryConsumer;
import androidx.test.filters.SmallTest;
@@ -124,6 +125,7 @@ public class MultiStateStatsTest {
assertThat(e.getMessage()).contains("40");
}
+ @SuppressLint("CheckResult")
@Test
public void multiStateStats_aggregation() {
MultiStateStats.Factory factory = makeFactory(true, true, false);
@@ -159,9 +161,9 @@ public class MultiStateStatsTest {
// (400 - 100) * 0 + (600 - 400) * 0.5
assertThat(stats).isEqualTo(new long[]{100, 100});
- multiStateStats.getStats(stats, new int[]{1, BatteryConsumer.PROCESS_STATE_BACKGROUND, 0});
// Never been in this composite state
- assertThat(stats).isEqualTo(new long[]{0, 0});
+ assertThat(multiStateStats.getStats(stats,
+ new int[]{1, BatteryConsumer.PROCESS_STATE_BACKGROUND, 0})).isFalse();
}
@Test
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/PhoneCallPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/PhoneCallPowerStatsProcessorTest.java
index a20274fb5ded..2f742d74d8e6 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/PhoneCallPowerStatsProcessorTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/PhoneCallPowerStatsProcessorTest.java
@@ -29,6 +29,7 @@ import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.when;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.power.stats.EnergyConsumerType;
@@ -159,6 +160,7 @@ public class PhoneCallPowerStatsProcessorTest {
mStatsRule.setTestPowerProfile("power_profile_test_legacy_modem");
}
+ @SuppressLint("CheckResult")
@Test
public void copyEstimatesFromMobileRadioPowerStats() {
AggregatedPowerStatsConfig config = new AggregatedPowerStatsConfig();
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/ScreenPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/ScreenPowerStatsProcessorTest.java
index 185216583f1b..31456a1574d0 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/ScreenPowerStatsProcessorTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/ScreenPowerStatsProcessorTest.java
@@ -29,6 +29,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.when;
+import android.annotation.SuppressLint;
import android.hardware.power.stats.EnergyConsumerResult;
import android.hardware.power.stats.EnergyConsumerType;
import android.os.BatteryConsumer;
@@ -278,6 +279,7 @@ public class ScreenPowerStatsProcessorTest {
.of(expectedDozePowerEstimate);
}
+ @SuppressLint("CheckResult")
private void assertUidPowerEstimate(
PowerComponentAggregatedPowerStats aggregatedStats, int uid,
int powerState, int screenState, double expectedScreenPowerEstimate) {
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/SensorPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/SensorPowerStatsProcessorTest.java
index d97260455bdd..c2f01d1fa65c 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/SensorPowerStatsProcessorTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/SensorPowerStatsProcessorTest.java
@@ -33,6 +33,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import android.annotation.SuppressLint;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.hardware.input.InputSensorInfo;
@@ -91,6 +92,7 @@ public class SensorPowerStatsProcessorTest {
List.of(sensor1, sensor2, sensor3));
}
+ @SuppressLint("CheckResult")
@Test
public void testPowerEstimation() {
PowerComponentAggregatedPowerStats stats = createAggregatedPowerStats(
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/WakelockPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/WakelockPowerStatsProcessorTest.java
index 8257d714a5d5..5ac7216194a4 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/WakelockPowerStatsProcessorTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/WakelockPowerStatsProcessorTest.java
@@ -31,6 +31,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
+import android.annotation.SuppressLint;
import android.os.BatteryConsumer;
import android.os.PersistableBundle;
import android.os.Process;
@@ -123,6 +124,7 @@ public class WakelockPowerStatsProcessorTest {
return history;
}
+ @SuppressLint("CheckResult")
private void assertAggregatedPowerStats(AggregatedPowerStats aggregatedPowerStats) {
PowerComponentAggregatedPowerStats stats =
aggregatedPowerStats.getPowerComponentStats(POWER_COMPONENT_WAKELOCK);
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/WifiPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/WifiPowerStatsProcessorTest.java
index bd92a84fc815..e36056a98c85 100644
--- a/services/tests/powerstatstests/src/com/android/server/power/stats/processor/WifiPowerStatsProcessorTest.java
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/processor/WifiPowerStatsProcessorTest.java
@@ -39,6 +39,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import android.annotation.Nullable;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.power.stats.EnergyConsumerResult;
@@ -198,6 +199,7 @@ public class WifiPowerStatsProcessorTest {
mBatteryStats = mStatsRule.getBatteryStats();
}
+ @SuppressLint("CheckResult")
@Test
public void powerProfileModel_powerController() {
when(mWifiManager.isEnhancedPowerReportingSupported()).thenReturn(true);
@@ -310,6 +312,7 @@ public class WifiPowerStatsProcessorTest {
.isWithin(PRECISION).of(expectedPower2 * 0.75);
}
+ @SuppressLint("CheckResult")
@Test
public void consumedEnergyModel_powerController() {
when(mWifiManager.isEnhancedPowerReportingSupported()).thenReturn(true);
@@ -424,6 +427,7 @@ public class WifiPowerStatsProcessorTest {
.isWithin(PRECISION).of(expectedPower2 * 0.75);
}
+ @SuppressLint("CheckResult")
@Test
public void powerProfileModel_noPowerController() {
when(mWifiManager.isEnhancedPowerReportingSupported()).thenReturn(false);
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickTypePanelTest.java b/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickTypePanelTest.java
index ba672dcd299b..c60c4b60d081 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickTypePanelTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/autoclick/AutoclickTypePanelTest.java
@@ -21,6 +21,9 @@ import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentat
import static com.android.server.accessibility.autoclick.AutoclickTypePanel.AUTOCLICK_TYPE_LEFT_CLICK;
import static com.android.server.accessibility.autoclick.AutoclickTypePanel.AUTOCLICK_TYPE_SCROLL;
import static com.android.server.accessibility.autoclick.AutoclickTypePanel.AutoclickType;
+import static com.android.server.accessibility.autoclick.AutoclickTypePanel.CORNER_BOTTOM_LEFT;
+import static com.android.server.accessibility.autoclick.AutoclickTypePanel.CORNER_BOTTOM_RIGHT;
+import static com.android.server.accessibility.autoclick.AutoclickTypePanel.CORNER_TOP_RIGHT;
import static com.android.server.accessibility.autoclick.AutoclickTypePanel.ClickPanelControllerInterface;
import static com.google.common.truth.Truth.assertThat;
@@ -31,6 +34,7 @@ import android.testing.AndroidTestingRunner;
import android.testing.TestableContext;
import android.testing.TestableLooper;
import android.view.Gravity;
+import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout;
@@ -213,6 +217,105 @@ public class AutoclickTypePanelTest {
assertThat(mAutoclickTypePanel.isPaused()).isFalse();
}
+ @Test
+ public void onTouch_dragMove_updatesPosition() {
+ View contentView = mAutoclickTypePanel.getContentViewForTesting();
+ WindowManager.LayoutParams params = mAutoclickTypePanel.getLayoutParamsForTesting();
+ int[] panelLocation = new int[2];
+ contentView.getLocationOnScreen(panelLocation);
+
+ // Define movement delta for both x and y directions.
+ int delta = 15;
+
+ // Dispatch initial down event.
+ float touchX = panelLocation[0] + 10;
+ float touchY = panelLocation[1] + 10;
+ MotionEvent downEvent = MotionEvent.obtain(
+ 0, 0,
+ MotionEvent.ACTION_DOWN, touchX, touchY, 0);
+ contentView.dispatchTouchEvent(downEvent);
+
+ // Create move event with delta, move from (x, y) to (x + delta, y + delta)
+ MotionEvent moveEvent = MotionEvent.obtain(
+ 0, 0,
+ MotionEvent.ACTION_MOVE, touchX + delta, touchY + delta, 0);
+ contentView.dispatchTouchEvent(moveEvent);
+
+ // Verify position update.
+ assertThat(mAutoclickTypePanel.getIsDraggingForTesting()).isTrue();
+ assertThat(params.gravity).isEqualTo(Gravity.LEFT | Gravity.TOP);
+ assertThat(params.x).isEqualTo(panelLocation[0] + delta);
+ assertThat(params.y).isEqualTo(panelLocation[1] + delta);
+ }
+
+ @Test
+ public void dragAndEndAtRight_snapsToRightSide() {
+ View contentView = mAutoclickTypePanel.getContentViewForTesting();
+ WindowManager.LayoutParams params = mAutoclickTypePanel.getLayoutParamsForTesting();
+ int[] panelLocation = new int[2];
+ contentView.getLocationOnScreen(panelLocation);
+
+ int screenWidth = mTestableContext.getResources().getDisplayMetrics().widthPixels;
+
+ // Verify initial corner is bottom-right.
+ assertThat(mAutoclickTypePanel.getCurrentCornerIndexForTesting())
+ .isEqualTo(CORNER_BOTTOM_RIGHT);
+
+ dispatchDragSequence(contentView,
+ /* startX =*/ panelLocation[0] + 10, /* startY =*/ panelLocation[1] + 10,
+ /* endX =*/ (float) (screenWidth * 3) / 4, /* endY =*/ panelLocation[1] + 10);
+
+ // Verify snapping to the right.
+ assertThat(params.gravity).isEqualTo(Gravity.END | Gravity.TOP);
+ assertThat(mAutoclickTypePanel.getCurrentCornerIndexForTesting())
+ .isEqualTo(CORNER_TOP_RIGHT);
+ }
+
+ @Test
+ public void dragAndEndAtLeft_snapsToLeftSide() {
+ View contentView = mAutoclickTypePanel.getContentViewForTesting();
+ WindowManager.LayoutParams params = mAutoclickTypePanel.getLayoutParamsForTesting();
+ int[] panelLocation = new int[2];
+ contentView.getLocationOnScreen(panelLocation);
+
+ int screenWidth = mTestableContext.getResources().getDisplayMetrics().widthPixels;
+
+ // Verify initial corner is bottom-right.
+ assertThat(mAutoclickTypePanel.getCurrentCornerIndexForTesting())
+ .isEqualTo(CORNER_BOTTOM_RIGHT);
+
+ dispatchDragSequence(contentView,
+ /* startX =*/ panelLocation[0] + 10, /* startY =*/ panelLocation[1] + 10,
+ /* endX =*/ (float) screenWidth / 4, /* endY =*/ panelLocation[1] + 10);
+
+ // Verify snapping to the left.
+ assertThat(params.gravity).isEqualTo(Gravity.START | Gravity.TOP);
+ assertThat(mAutoclickTypePanel.getCurrentCornerIndexForTesting())
+ .isEqualTo(CORNER_BOTTOM_LEFT);
+ }
+
+ // Helper method to handle drag event sequences
+ private void dispatchDragSequence(View view, float startX, float startY, float endX,
+ float endY) {
+ // Down event
+ MotionEvent downEvent = MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, startX, startY,
+ 0);
+ view.dispatchTouchEvent(downEvent);
+
+ // Move event
+ MotionEvent moveEvent = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE, endX, endY, 0);
+ view.dispatchTouchEvent(moveEvent);
+
+ // Up event
+ MotionEvent upEvent = MotionEvent.obtain(0, 0, MotionEvent.ACTION_UP, endX, endY, 0);
+ view.dispatchTouchEvent(upEvent);
+
+ // Clean up
+ downEvent.recycle();
+ moveEvent.recycle();
+ upEvent.recycle();
+ }
+
private void verifyButtonHasSelectedStyle(@NonNull LinearLayout button) {
GradientDrawable gradientDrawable = (GradientDrawable) button.getBackground();
assertThat(gradientDrawable.getColor().getDefaultColor())
@@ -220,7 +323,7 @@ public class AutoclickTypePanelTest {
}
private void verifyPanelPosition(int[] expectedPosition) {
- WindowManager.LayoutParams params = mAutoclickTypePanel.getLayoutParams();
+ WindowManager.LayoutParams params = mAutoclickTypePanel.getLayoutParamsForTesting();
assertThat(mAutoclickTypePanel.getCurrentCornerIndexForTesting()).isEqualTo(
expectedPosition[0]);
assertThat(params.gravity).isEqualTo(expectedPosition[1]);
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java
index 9f5dd93054c3..5c126d1f5d3f 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/FullScreenMagnificationGestureHandlerTest.java
@@ -311,8 +311,7 @@ public class FullScreenMagnificationGestureHandlerTest {
mMockFullScreenMagnificationVibrationHelper,
mMockMagnificationLogger,
ViewConfiguration.get(mContext),
- mMockOneFingerPanningSettingsProvider,
- new MouseEventHandler(mFullScreenMagnificationController));
+ mMockOneFingerPanningSettingsProvider);
// OverscrollHandler is only supported on watches.
// @See config_enable_a11y_fullscreen_magnification_overscroll_handler
if (isWatch()) {
@@ -482,8 +481,8 @@ public class FullScreenMagnificationGestureHandlerTest {
@Test
@RequiresFlagsDisabled(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE)
public void testDisablingTripleTap_removesInputLag() {
- mMgh = newInstance(/* detectSingleFingerTripleTap */ false,
- /* detectTwoFingerTripleTap */ true, /* detectShortcut */ true);
+ mMgh = newInstance(/* detectSingleFingerTripleTap= */ false,
+ /* detectTwoFingerTripleTap= */ true, /* detectShortcutTrigger= */ true);
goFromStateIdleTo(STATE_IDLE);
allowEventDelegation();
tap();
@@ -494,8 +493,8 @@ public class FullScreenMagnificationGestureHandlerTest {
@Test
@RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_MULTIPLE_FINGER_MULTIPLE_TAP_GESTURE)
public void testDisablingSingleFingerTripleTapAndTwoFingerTripleTap_removesInputLag() {
- mMgh = newInstance(/* detectSingleFingerTripleTap */ false,
- /* detectTwoFingerTripleTap */ false, /* detectShortcut */ true);
+ mMgh = newInstance(/* detectSingleFingerTripleTap= */ false,
+ /* detectTwoFingerTripleTap= */ false, /* detectShortcutTrigger= */ true);
goFromStateIdleTo(STATE_IDLE);
allowEventDelegation();
tap();
@@ -1420,12 +1419,6 @@ public class FullScreenMagnificationGestureHandlerTest {
}
@Test
- @RequiresFlagsDisabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
- public void testMouseMoveEventsDoNotMoveMagnifierViewport() {
- runMoveEventsDoNotMoveMagnifierViewport(InputDevice.SOURCE_MOUSE);
- }
-
- @Test
public void testStylusMoveEventsDoNotMoveMagnifierViewport() {
runMoveEventsDoNotMoveMagnifierViewport(InputDevice.SOURCE_STYLUS);
}
@@ -1441,7 +1434,7 @@ public class FullScreenMagnificationGestureHandlerTest {
(INITIAL_MAGNIFICATION_BOUNDS.top + INITIAL_MAGNIFICATION_BOUNDS.height()) / 2.0f;
float scale = 5.6f; // value is unimportant but unique among tests to increase coverage.
mFullScreenMagnificationController.setScaleAndCenter(
- DISPLAY_0, centerX, centerY, scale, true, /* animate= */ false, 1);
+ DISPLAY_0, scale, centerX, centerY, true, /* animate= */ false, 1);
centerX = mFullScreenMagnificationController.getCenterX(DISPLAY_0);
centerY = mFullScreenMagnificationController.getCenterY(DISPLAY_0);
@@ -1474,55 +1467,36 @@ public class FullScreenMagnificationGestureHandlerTest {
}
@Test
- @RequiresFlagsDisabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
- public void testMouseHoverMoveEventsDoNotMoveMagnifierViewport() {
- runHoverMoveEventsDoNotMoveMagnifierViewport(InputDevice.SOURCE_MOUSE);
- }
-
- @Test
- @RequiresFlagsDisabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
- public void testStylusHoverMoveEventsDoNotMoveMagnifierViewport() {
- runHoverMoveEventsDoNotMoveMagnifierViewport(InputDevice.SOURCE_STYLUS);
- }
-
- @Test
- @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
public void testMouseHoverMoveEventsMoveMagnifierViewport() {
runHoverMovesViewportTest(InputDevice.SOURCE_MOUSE);
}
@Test
- @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
public void testStylusHoverMoveEventsMoveMagnifierViewport() {
runHoverMovesViewportTest(InputDevice.SOURCE_STYLUS);
}
@Test
- @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
public void testMouseDownEventsDoNotMoveMagnifierViewport() {
runDownDoesNotMoveViewportTest(InputDevice.SOURCE_MOUSE);
}
@Test
- @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
public void testStylusDownEventsDoNotMoveMagnifierViewport() {
runDownDoesNotMoveViewportTest(InputDevice.SOURCE_STYLUS);
}
@Test
- @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
public void testMouseUpEventsDoNotMoveMagnifierViewport() {
runUpDoesNotMoveViewportTest(InputDevice.SOURCE_MOUSE);
}
@Test
- @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
public void testStylusUpEventsDoNotMoveMagnifierViewport() {
runUpDoesNotMoveViewportTest(InputDevice.SOURCE_STYLUS);
}
@Test
- @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
public void testMouseMoveEventsMoveMagnifierViewport() {
final EventCaptor eventCaptor = new EventCaptor();
mMgh.setNext(eventCaptor);
@@ -1533,7 +1507,7 @@ public class FullScreenMagnificationGestureHandlerTest {
(INITIAL_MAGNIFICATION_BOUNDS.top + INITIAL_MAGNIFICATION_BOUNDS.height()) / 2.0f;
float scale = 6.2f; // value is unimportant but unique among tests to increase coverage.
mFullScreenMagnificationController.setScaleAndCenter(
- DISPLAY_0, centerX, centerY, scale, true, /* animate= */ false, 1);
+ DISPLAY_0, scale, centerX, centerY, true, /* animate= */ false, 1);
MotionEvent event = mouseEvent(centerX, centerY, ACTION_HOVER_MOVE);
send(event, InputDevice.SOURCE_MOUSE);
fastForward(20);
@@ -1574,7 +1548,7 @@ public class FullScreenMagnificationGestureHandlerTest {
(INITIAL_MAGNIFICATION_BOUNDS.top + INITIAL_MAGNIFICATION_BOUNDS.height()) / 2.0f;
float scale = 4.0f; // value is unimportant but unique among tests to increase coverage.
mFullScreenMagnificationController.setScaleAndCenter(
- DISPLAY_0, centerX, centerY, scale, true, /* animate= */ false, 1);
+ DISPLAY_0, scale, centerX, centerY, true, /* animate= */ false, 1);
// HOVER_MOVE should change magnifier viewport.
MotionEvent event = motionEvent(centerX + 20, centerY, ACTION_HOVER_MOVE);
@@ -1618,7 +1592,7 @@ public class FullScreenMagnificationGestureHandlerTest {
(INITIAL_MAGNIFICATION_BOUNDS.top + INITIAL_MAGNIFICATION_BOUNDS.height()) / 2.0f;
float scale = 5.3f; // value is unimportant but unique among tests to increase coverage.
mFullScreenMagnificationController.setScaleAndCenter(
- DISPLAY_0, centerX, centerY, scale, true, /* animate= */ false, 1);
+ DISPLAY_0, scale, centerX, centerY, true, /* animate= */ false, 1);
MotionEvent event = motionEvent(centerX, centerY, ACTION_HOVER_MOVE);
send(event, source);
fastForward(20);
@@ -1652,7 +1626,7 @@ public class FullScreenMagnificationGestureHandlerTest {
(INITIAL_MAGNIFICATION_BOUNDS.top + INITIAL_MAGNIFICATION_BOUNDS.height()) / 2.0f;
float scale = 2.7f; // value is unimportant but unique among tests to increase coverage.
mFullScreenMagnificationController.setScaleAndCenter(
- DISPLAY_0, centerX, centerY, scale, true, /* animate= */ false, 1);
+ DISPLAY_0, scale, centerX, centerY, true, /* animate= */ false, 1);
MotionEvent event = motionEvent(centerX, centerY, ACTION_HOVER_MOVE);
send(event, source);
fastForward(20);
@@ -1688,7 +1662,7 @@ public class FullScreenMagnificationGestureHandlerTest {
(INITIAL_MAGNIFICATION_BOUNDS.top + INITIAL_MAGNIFICATION_BOUNDS.height()) / 2.0f;
float scale = 3.8f; // value is unimportant but unique among tests to increase coverage.
mFullScreenMagnificationController.setScaleAndCenter(
- DISPLAY_0, centerX, centerY, scale, true, /* animate= */ false, 1);
+ DISPLAY_0, scale, centerX, centerY, true, /* animate= */ false, 1);
centerX = mFullScreenMagnificationController.getCenterX(DISPLAY_0);
centerY = mFullScreenMagnificationController.getCenterY(DISPLAY_0);
@@ -1725,7 +1699,7 @@ public class FullScreenMagnificationGestureHandlerTest {
(INITIAL_MAGNIFICATION_BOUNDS.top + INITIAL_MAGNIFICATION_BOUNDS.height()) / 2.0f;
float scale = 4.0f; // value is unimportant but unique among tests to increase coverage.
mFullScreenMagnificationController.setScaleAndCenter(
- DISPLAY_0, centerX, centerY, scale, true, /* animate= */ false, 1);
+ DISPLAY_0, scale, centerX, centerY, true, /* animate= */ false, 1);
centerX = mFullScreenMagnificationController.getCenterX(DISPLAY_0);
centerY = mFullScreenMagnificationController.getCenterY(DISPLAY_0);
diff --git a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationGestureHandlerTest.java b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationGestureHandlerTest.java
index 45c157d1c1a0..203e6554b412 100644
--- a/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationGestureHandlerTest.java
+++ b/services/tests/servicestests/src/com/android/server/accessibility/magnification/MagnificationGestureHandlerTest.java
@@ -21,15 +21,11 @@ import static android.view.MotionEvent.ACTION_DOWN;
import static android.view.MotionEvent.ACTION_HOVER_MOVE;
import static android.view.MotionEvent.ACTION_UP;
-import static junit.framework.Assert.assertFalse;
-
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
import static org.testng.AssertJUnit.assertTrue;
import android.annotation.NonNull;
-import android.platform.test.annotations.RequiresFlagsDisabled;
-import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.provider.Settings;
@@ -39,7 +35,6 @@ import android.view.MotionEvent;
import androidx.test.runner.AndroidJUnit4;
import com.android.server.accessibility.AccessibilityTraceManager;
-import com.android.server.accessibility.Flags;
import org.junit.Before;
import org.junit.Rule;
@@ -93,7 +88,6 @@ public class MagnificationGestureHandlerTest {
}
@Test
- @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
public void onMotionEvent_isFromMouse_handleMouseOrStylusEvent() {
final MotionEvent mouseEvent = MotionEvent.obtain(0, 0, ACTION_HOVER_MOVE, 0, 0, 0);
mouseEvent.setSource(InputDevice.SOURCE_MOUSE);
@@ -108,7 +102,6 @@ public class MagnificationGestureHandlerTest {
}
@Test
- @RequiresFlagsEnabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
public void onMotionEvent_isFromStylus_handleMouseOrStylusEvent() {
final MotionEvent stylusEvent = MotionEvent.obtain(0, 0, ACTION_HOVER_MOVE, 0, 0, 0);
stylusEvent.setSource(InputDevice.SOURCE_STYLUS);
@@ -123,36 +116,6 @@ public class MagnificationGestureHandlerTest {
}
@Test
- @RequiresFlagsDisabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
- public void onMotionEvent_isFromMouse_handleMouseOrStylusEventNotCalled() {
- final MotionEvent mouseEvent = MotionEvent.obtain(0, 0, ACTION_HOVER_MOVE, 0, 0, 0);
- mouseEvent.setSource(InputDevice.SOURCE_MOUSE);
-
- mMgh.onMotionEvent(mouseEvent, mouseEvent, /* policyFlags= */ 0);
-
- try {
- assertFalse(mMgh.mIsHandleMouseOrStylusEventCalled);
- } finally {
- mouseEvent.recycle();
- }
- }
-
- @Test
- @RequiresFlagsDisabled(Flags.FLAG_ENABLE_MAGNIFICATION_FOLLOWS_MOUSE_BUGFIX)
- public void onMotionEvent_isFromStylus_handleMouseOrStylusEventNotCalled() {
- final MotionEvent stylusEvent = MotionEvent.obtain(0, 0, ACTION_HOVER_MOVE, 0, 0, 0);
- stylusEvent.setSource(InputDevice.SOURCE_STYLUS);
-
- mMgh.onMotionEvent(stylusEvent, stylusEvent, /* policyFlags= */ 0);
-
- try {
- assertFalse(mMgh.mIsHandleMouseOrStylusEventCalled);
- } finally {
- stylusEvent.recycle();
- }
- }
-
- @Test
public void onMotionEvent_downEvent_handleInteractionStart() {
final MotionEvent downEvent = MotionEvent.obtain(0, 0, ACTION_DOWN, 0, 0, 0);
downEvent.setSource(InputDevice.SOURCE_TOUCHSCREEN);
diff --git a/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java b/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java
index aa9d2058e659..9e8c34eabd40 100644
--- a/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/audio/AudioServiceTest.java
@@ -259,4 +259,16 @@ public class AudioServiceTest {
inputGainIndex,
mAudioService.getInputGainIndex(ada));
}
+
+ @Test
+ public void testRttEnabled() throws Exception {
+ Log.i(TAG, "running testRttEnabled");
+ Assert.assertNotNull(mAudioService);
+
+ mAudioService.setRttEnabled(true);
+ Assert.assertTrue(mAudioService.isRttEnabled());
+
+ mAudioService.setRttEnabled(false);
+ Assert.assertFalse(mAudioService.isRttEnabled());
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/om/OverlayManagerSettingsTests.java b/services/tests/servicestests/src/com/android/server/om/OverlayManagerSettingsTests.java
index ad3855f4c28f..b1cf9059fdc4 100644
--- a/services/tests/servicestests/src/com/android/server/om/OverlayManagerSettingsTests.java
+++ b/services/tests/servicestests/src/com/android/server/om/OverlayManagerSettingsTests.java
@@ -37,10 +37,12 @@ import android.text.TextUtils;
import android.util.Xml;
import androidx.annotation.NonNull;
-import androidx.test.runner.AndroidJUnit4;
import com.android.modules.utils.TypedXmlPullParser;
+import junitparams.JUnitParamsRunner;
+import junitparams.Parameters;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -56,7 +58,7 @@ import java.util.Set;
import javax.annotation.Nullable;
-@RunWith(AndroidJUnit4.class)
+@RunWith(JUnitParamsRunner.class)
public class OverlayManagerSettingsTests {
private OverlayManagerSettings mSettings;
private static final int USER_0 = 0;
@@ -439,6 +441,39 @@ public class OverlayManagerSettingsTests {
}
@Test
+ @Parameters(method = "getPreviousVersions")
+ public void testRestoreWithPreviousVersion(int version) throws Exception {
+ final String xml =
+ "<?xml version='1.0' encoding='utf-8' standalone='yes'?>\n"
+ + "<overlays version='" + version + "'>\n"
+ + "<item packageName='com.test.overlay'\n"
+ + " overlayName='test'\n"
+ + " userId='1234'\n"
+ + " targetPackageName='com.test.target'\n"
+ + " baseCodePath='/data/app/com.test.overlay-1/base.apk'\n"
+ + " state='" + STATE_DISABLED + "'\n"
+ + " isEnabled='false'\n"
+ + " category='test-category'\n"
+ + " isStatic='false'\n"
+ + " priority='0' />\n"
+ + "</overlays>\n";
+ ByteArrayInputStream is = new ByteArrayInputStream(xml.getBytes(UTF_8));
+
+ mSettings.restore(is);
+ final OverlayIdentifier identifier = new OverlayIdentifier("com.test.overlay", "test");
+ OverlayInfo oi = mSettings.getOverlayInfo(identifier, 1234);
+ assertNotNull(oi);
+ assertEquals("com.test.overlay", oi.packageName);
+ assertEquals("test", oi.overlayName);
+ assertEquals("com.test.target", oi.targetPackageName);
+ assertEquals("/data/app/com.test.overlay-1/base.apk", oi.baseCodePath);
+ assertEquals(1234, oi.userId);
+ assertEquals(STATE_DISABLED, oi.state);
+ assertFalse(mSettings.getEnabled(identifier, 1234));
+ assertTrue(oi.constraints.isEmpty());
+ }
+
+ @Test
public void testPersistAndRestore() throws Exception {
insertSetting(OVERLAY_A_USER0);
insertSetting(OVERLAY_B_USER1);
@@ -585,4 +620,11 @@ public class OverlayManagerSettingsTests {
TextUtils.join(",", expected), TextUtils.join(",", actual)));
}
}
+
+ private static Integer[] getPreviousVersions() {
+ return new Integer[]{
+ 3,
+ 4,
+ };
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
index 58f762204c27..d6de31406b5a 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
@@ -159,7 +159,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
/**
* Test for the first launch path, no settings file available.
*/
- public void testFirstInitialize() {
+ public void disabled_testFirstInitialize() {
assertResetTimes(START_TIME, START_TIME + INTERVAL);
}
@@ -261,12 +261,12 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
// === Test for app side APIs ===
/** Test for {@link android.content.pm.ShortcutManager#getMaxShortcutCountForActivity()} */
- public void testGetMaxDynamicShortcutCount() {
+ public void disabled_testGetMaxDynamicShortcutCount() {
assertEquals(MAX_SHORTCUTS, mManager.getMaxShortcutCountForActivity());
}
/** Test for {@link android.content.pm.ShortcutManager#getRemainingCallCount()} */
- public void testGetRemainingCallCount() {
+ public void disabled_testGetRemainingCallCount() {
assertEquals(MAX_UPDATES_PER_INTERVAL, mManager.getRemainingCallCount());
}
@@ -793,7 +793,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
assertEquals(2, mManager.getRemainingCallCount());
}
- public void testDeleteAllDynamicShortcuts() {
+ public void disabled_testDeleteAllDynamicShortcuts() {
final ShortcutInfo si1 = makeShortcut("shortcut1");
final ShortcutInfo si2 = makeShortcut("shortcut2");
final ShortcutInfo si3 = makeShortcut("shortcut3");
@@ -1036,7 +1036,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
*/
}
- public void testCleanupDanglingBitmaps() throws Exception {
+ public void disabled_testCleanupDanglingBitmaps() throws Exception {
assertBitmapDirectories(USER_10, EMPTY_STRINGS);
assertBitmapDirectories(USER_11, EMPTY_STRINGS);
@@ -1702,7 +1702,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
"s2");
}
- public void testCachedShortcuts_accessShortcutsPermission() {
+ public void disabled_testCachedShortcuts_accessShortcutsPermission() {
runWithCaller(CALLING_PACKAGE_1, USER_10, () -> {
assertTrue(mManager.setDynamicShortcuts(list(makeShortcut("s1"),
makeLongLivedShortcut("s2"), makeLongLivedShortcut("s3"),
@@ -1744,7 +1744,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
assertShortcutIds(mManager.getShortcuts(ShortcutManager.FLAG_MATCH_CACHED), "s3");
}
- public void testCachedShortcuts_canPassShortcutLimit() {
+ public void disabled_testCachedShortcuts_canPassShortcutLimit() {
// Change the max number of shortcuts.
mService.updateConfigurationLocked(ConfigConstants.KEY_MAX_SHORTCUTS + "=4");
@@ -1782,7 +1782,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
// === Test for launcher side APIs ===
- public void testGetShortcuts() {
+ public void disabled_testGetShortcuts() {
// Set up shortcuts.
@@ -2158,7 +2158,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
});
}
- public void testGetShortcuts_personsFlag() {
+ public void disabled_testGetShortcuts_personsFlag() {
ShortcutInfo s = new ShortcutInfo.Builder(mClientContext, "id")
.setShortLabel("label")
.setActivity(new ComponentName(mClientContext, ShortcutActivity2.class))
@@ -2206,7 +2206,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
}
// TODO resource
- public void testGetShortcutInfo() {
+ public void disabled_testGetShortcutInfo() {
// Create shortcuts.
setCaller(CALLING_PACKAGE_1);
final ShortcutInfo s1_1 = makeShortcut(
@@ -2362,7 +2362,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
* This is similar to the above test, except it used "disable" instead of "remove". It also
* does "enable".
*/
- public void testDisableAndEnableShortcuts() {
+ public void disabled_testDisableAndEnableShortcuts() {
runWithCaller(CALLING_PACKAGE_1, USER_10, () -> {
final ShortcutInfo s1_1 = makeShortcutWithTimestamp("s1", 1000);
final ShortcutInfo s1_2 = makeShortcutWithTimestamp("s2", 2000);
@@ -2487,7 +2487,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
});
}
- public void testDisableShortcuts_thenRepublish() {
+ public void disabled_testDisableShortcuts_thenRepublish() {
runWithCaller(CALLING_PACKAGE_1, USER_10, () -> {
assertTrue(mManager.setDynamicShortcuts(list(
makeShortcut("s1"), makeShortcut("s2"), makeShortcut("s3"))));
@@ -4230,7 +4230,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
// TODO Check all other fields
}
- public void testCleanupPackage() {
+ public void disabled_testCleanupPackage() {
runWithCaller(CALLING_PACKAGE_1, USER_10, () -> {
assertTrue(mManager.setDynamicShortcuts(list(
makeShortcut("s0_1"))));
@@ -4507,7 +4507,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
mService.saveDirtyInfo();
}
- public void testCleanupPackage_republishManifests() {
+ public void disabled_testCleanupPackage_republishManifests() {
addManifestShortcutResource(
new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()),
R.xml.shortcut_2);
@@ -4847,7 +4847,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
assertEquals(expected, spi.canRestoreTo(mService, pi, true));
}
- public void testCanRestoreTo() {
+ public void disabled_testCanRestoreTo() {
addPackage(CALLING_PACKAGE_1, CALLING_UID_1, 10, "sig1");
addPackage(CALLING_PACKAGE_2, CALLING_UID_2, 10, "sig1", "sig2");
addPackage(CALLING_PACKAGE_3, CALLING_UID_3, 10, "sig1");
@@ -5785,7 +5785,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
checkBackupAndRestore_success(/*firstRestore=*/ true);
}
- public void testBackupAndRestore_restoreToSuperSetSignatures() {
+ public void disabled_testBackupAndRestore_restoreToSuperSetSignatures() {
prepareForBackupTest();
// Change package signatures.
@@ -6913,12 +6913,12 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
mManager.hasShareTargets(CALLING_PACKAGE_1);
}
- public void testDumpsys_crossProfile() {
+ public void disabled_testDumpsys_crossProfile() {
prepareCrossProfileDataSet();
dumpsysOnLogcat("test1", /* force= */ true);
}
- public void testDumpsys_withIcons() throws IOException {
+ public void disabled_testDumpsys_withIcons() throws IOException {
testIcons();
// Dump after having some icons.
dumpsysOnLogcat("test1", /* force= */ true);
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
index 0ab11e0cbe3d..f8387a4c54cc 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
@@ -300,7 +300,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
@Parameters(name = "{0}")
public static List<FlagsParameterization> getParams() {
- return FlagsParameterization.allCombinationsOf(FLAG_MODES_UI, FLAG_BACKUP_RESTORE_LOGGING,
+ return FlagsParameterization.allCombinationsOf(FLAG_BACKUP_RESTORE_LOGGING,
com.android.server.notification.Flags.FLAG_FIX_CALLING_UID_FROM_CPS);
}
diff --git a/services/tests/vibrator/src/com/android/server/vibrator/VibrationThreadTest.java b/services/tests/vibrator/src/com/android/server/vibrator/VibrationThreadTest.java
index 42279e40fa33..04335df8c454 100644
--- a/services/tests/vibrator/src/com/android/server/vibrator/VibrationThreadTest.java
+++ b/services/tests/vibrator/src/com/android/server/vibrator/VibrationThreadTest.java
@@ -20,14 +20,14 @@ import static android.os.VibrationAttributes.USAGE_RINGTONE;
import static android.os.VibrationEffect.Composition.PRIMITIVE_CLICK;
import static android.os.VibrationEffect.Composition.PRIMITIVE_SPIN;
import static android.os.VibrationEffect.Composition.PRIMITIVE_TICK;
+import static android.os.VibrationEffect.EFFECT_CLICK;
+import static android.os.VibrationEffect.EFFECT_TICK;
import static android.os.VibrationEffect.VibrationParameter.targetAmplitude;
import static android.os.VibrationEffect.VibrationParameter.targetFrequency;
import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
@@ -189,7 +189,7 @@ public class VibrationThreadTest {
public void vibrate_noVibrator_ignoresVibration() {
mVibratorProviders.clear();
CombinedVibration effect = CombinedVibration.createParallel(
- VibrationEffect.get(VibrationEffect.EFFECT_CLICK));
+ VibrationEffect.get(EFFECT_CLICK));
HalVibration vibration = startThreadAndDispatcher(effect);
waitForCompletion();
@@ -200,8 +200,8 @@ public class VibrationThreadTest {
@Test
public void vibrate_missingVibrators_ignoresVibration() {
CombinedVibration effect = CombinedVibration.startSequential()
- .addNext(2, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
- .addNext(3, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
+ .addNext(2, VibrationEffect.get(EFFECT_CLICK))
+ .addNext(3, VibrationEffect.get(EFFECT_TICK))
.combine();
HalVibration vibration = startThreadAndDispatcher(effect);
waitForCompletion();
@@ -222,11 +222,12 @@ public class VibrationThreadTest {
verify(mManagerHooks).noteVibratorOff(eq(UID));
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
- assertEquals(Arrays.asList(expectedOneShot(10)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
- assertEquals(expectedAmplitudes(100), mVibratorProviders.get(VIBRATOR_ID).getAmplitudes());
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(10)).inOrder();
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(100)).inOrder();
}
@Test
@@ -239,11 +240,11 @@ public class VibrationThreadTest {
verify(mManagerHooks).noteVibratorOff(eq(UID));
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
- assertEquals(Arrays.asList(expectedOneShot(10)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
- assertTrue(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes().isEmpty());
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(10)).inOrder();
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes()).isEmpty();
}
@Test
@@ -259,12 +260,12 @@ public class VibrationThreadTest {
verify(mManagerHooks).noteVibratorOff(eq(UID));
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
- assertEquals(Arrays.asList(expectedOneShot(15)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
- assertEquals(expectedAmplitudes(1, 2, 3),
- mVibratorProviders.get(VIBRATOR_ID).getAmplitudes());
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(15)).inOrder();
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(1, 2, 3)).inOrder();
}
@Test
@@ -285,11 +286,12 @@ public class VibrationThreadTest {
waitForCompletion();
verify(mStatsLoggerMock, never()).logVibrationParamRequestTimeout(UID);
- assertEquals(Arrays.asList(expectedOneShot(15)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(15)).inOrder();
List<Float> amplitudes = mVibratorProviders.get(VIBRATOR_ID).getAmplitudes();
for (int i = 0; i < amplitudes.size(); i++) {
- assertTrue(amplitudes.get(i) < 1 / 255f);
+ assertWithMessage("For amplitude index %s", i)
+ .that(amplitudes.get(i)).isLessThan(1 / 255f);
}
}
@@ -309,10 +311,10 @@ public class VibrationThreadTest {
waitForCompletion();
verify(mStatsLoggerMock).logVibrationParamRequestTimeout(UID);
- assertEquals(Arrays.asList(expectedOneShot(15)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
- assertEquals(expectedAmplitudes(1, 1, 1),
- mVibratorProviders.get(VIBRATOR_ID).getAmplitudes());
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(15)).inOrder();
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(1, 1, 1)).inOrder();
}
@Test
@@ -325,31 +327,33 @@ public class VibrationThreadTest {
VibrationEffect effect = VibrationEffect.createWaveform(new long[]{5, 5, 5}, amplitudes, 0);
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(
+ assertThat(
waitUntil(() -> fakeVibrator.getAmplitudes().size() > 2 * amplitudes.length,
- TEST_TIMEOUT_MILLIS));
+ TEST_TIMEOUT_MILLIS)).isTrue();
// Vibration still running after 2 cycles.
- assertTrue(mThread.isRunningVibrationId(vibration.id));
- assertTrue(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mThread.isRunningVibrationId(vibration.id)).isTrue();
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isTrue();
Vibration.EndInfo cancelVibrationInfo = new Vibration.EndInfo(Status.CANCELLED_SUPERSEDED,
new CallerInfo(VibrationAttributes.createForUsage(VibrationAttributes.USAGE_ALARM),
/* uid= */ 1, /* deviceId= */ -1, /* opPkg= */ null, /* reason= */ null));
mVibrationConductor.notifyCancelled(cancelVibrationInfo, /* immediate= */ false);
waitForCompletion();
- assertFalse(mThread.isRunningVibrationId(vibration.id));
+ assertThat(mThread.isRunningVibrationId(vibration.id)).isFalse();
verify(mManagerHooks).noteVibratorOn(eq(UID), anyLong());
verify(mManagerHooks).noteVibratorOff(eq(UID));
verifyCallbacksTriggered(vibration, Status.CANCELLED_SUPERSEDED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
List<Float> playedAmplitudes = fakeVibrator.getAmplitudes();
- assertFalse(fakeVibrator.getEffectSegments(vibration.id).isEmpty());
- assertFalse(playedAmplitudes.isEmpty());
+ assertThat(fakeVibrator.getEffectSegments(vibration.id)).isNotEmpty();
+ assertThat(playedAmplitudes).isNotEmpty();
for (int i = 0; i < playedAmplitudes.size(); i++) {
- assertEquals(amplitudes[i % amplitudes.length] / 255f, playedAmplitudes.get(i), 1e-5);
+ assertWithMessage("For amplitude index %s", i)
+ .that(amplitudes[i % amplitudes.length] / 255f)
+ .isWithin(1e-5f).of(playedAmplitudes.get(i));
}
}
@@ -364,15 +368,16 @@ public class VibrationThreadTest {
new long[]{1, 10, 100}, amplitudes, 0);
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(waitUntil(() -> !fakeVibrator.getAmplitudes().isEmpty(), TEST_TIMEOUT_MILLIS));
+ assertThat(waitUntil(() -> !fakeVibrator.getAmplitudes().isEmpty(), TEST_TIMEOUT_MILLIS))
+ .isTrue();
mVibrationConductor.notifyCancelled(
new Vibration.EndInfo(Status.CANCELLED_BY_USER), /* immediate= */ false);
waitForCompletion();
verifyCallbacksTriggered(vibration, Status.CANCELLED_BY_USER);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
- assertEquals(Arrays.asList(expectedOneShot(5000)),
- fakeVibrator.getEffectSegments(vibration.id));
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+ assertThat(fakeVibrator.getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(5000)).inOrder();
}
@Test
@@ -391,7 +396,7 @@ public class VibrationThreadTest {
assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
- .isEqualTo(expectedOneShots(100L, 150L));
+ .containsExactlyElementsIn(expectedOneShots(100L, 150L)).inOrder();
}
@Test
@@ -412,7 +417,7 @@ public class VibrationThreadTest {
assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
- .isEqualTo(expectedOneShots(200L, 50L));
+ .containsExactlyElementsIn(expectedOneShots(200L, 50L)).inOrder();
}
@EnableFlags(Flags.FLAG_FIX_VIBRATION_THREAD_CALLBACK_HANDLING)
@@ -433,8 +438,8 @@ public class VibrationThreadTest {
// 300ms ON (100ms + 200ms looping to the start and skipping first 0ms)
// 150ms ON (100ms + 50ms, skips 0ms)
// 300ms ON (100ms + 200ms looping to the start and skipping first 0ms)
- assertTrue(waitUntil(() -> fakeVibrator.getEffectSegments(vibration.id).size() >= 5,
- 5000L + TEST_TIMEOUT_MILLIS));
+ assertThat(waitUntil(() -> fakeVibrator.getEffectSegments(vibration.id).size() >= 5,
+ 5000L + TEST_TIMEOUT_MILLIS)).isTrue();
mVibrationConductor.notifyCancelled(
new Vibration.EndInfo(Status.CANCELLED_BY_USER), /* immediate= */ false);
waitForCompletion();
@@ -444,7 +449,8 @@ public class VibrationThreadTest {
assertThat(
mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id).subList(0, 5))
- .isEqualTo(expectedOneShots(200L, 150L, 300L, 150L, 300L));
+ .containsExactlyElementsIn(expectedOneShots(200L, 150L, 300L, 150L, 300L))
+ .inOrder();
}
@EnableFlags(Flags.FLAG_FIX_VIBRATION_THREAD_CALLBACK_HANDLING)
@@ -468,7 +474,7 @@ public class VibrationThreadTest {
// First callback ignored, did not cause the vibrator to turn back on during the 400ms step.
assertThat(fakeVibrator.getEffectSegments(vibration.id))
- .isEqualTo(expectedOneShots(200L, 400L));
+ .containsExactlyElementsIn(expectedOneShots(200L, 400L)).inOrder();
}
@Test
@@ -490,16 +496,16 @@ public class VibrationThreadTest {
.compose();
HalVibration vibration = startThreadAndDispatcher(repeatingEffect);
- assertTrue(waitUntil(() -> !fakeVibrator.getEffectSegments(vibration.id).isEmpty(),
- TEST_TIMEOUT_MILLIS));
+ assertThat(waitUntil(() -> !fakeVibrator.getEffectSegments(vibration.id).isEmpty(),
+ TEST_TIMEOUT_MILLIS)).isTrue();
mVibrationConductor.notifyCancelled(
new Vibration.EndInfo(Status.CANCELLED_BY_USER), /* immediate= */ false);
waitForCompletion();
// PWLE size max was used to generate a single vibrate call with 10 segments.
verifyCallbacksTriggered(vibration, Status.CANCELLED_BY_USER);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
- assertEquals(10, fakeVibrator.getEffectSegments(vibration.id).size());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+ assertThat(fakeVibrator.getEffectSegments(vibration.id)).hasSize(10);
}
@Test
@@ -519,16 +525,16 @@ public class VibrationThreadTest {
.compose();
HalVibration vibration = startThreadAndDispatcher(repeatingEffect);
- assertTrue(waitUntil(() -> !fakeVibrator.getEffectSegments(vibration.id).isEmpty(),
- TEST_TIMEOUT_MILLIS));
+ assertThat(waitUntil(() -> !fakeVibrator.getEffectSegments(vibration.id).isEmpty(),
+ TEST_TIMEOUT_MILLIS)).isTrue();
mVibrationConductor.notifyCancelled(
new Vibration.EndInfo(Status.CANCELLED_BY_SCREEN_OFF), /* immediate= */ false);
waitForCompletion();
// Composition size max was used to generate a single vibrate call with 10 primitives.
verifyCallbacksTriggered(vibration, Status.CANCELLED_BY_SCREEN_OFF);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
- assertEquals(10, fakeVibrator.getEffectSegments(vibration.id).size());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+ assertThat(fakeVibrator.getEffectSegments(vibration.id)).hasSize(10);
}
@Test
@@ -542,15 +548,16 @@ public class VibrationThreadTest {
new long[]{5000, 500, 50}, amplitudes, 0);
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(waitUntil(() -> !fakeVibrator.getAmplitudes().isEmpty(), TEST_TIMEOUT_MILLIS));
+ assertThat(waitUntil(() -> !fakeVibrator.getAmplitudes().isEmpty(), TEST_TIMEOUT_MILLIS))
+ .isTrue();
mVibrationConductor.notifyCancelled(
new Vibration.EndInfo(Status.CANCELLED_BY_USER), /* immediate= */ false);
waitForCompletion();
verifyCallbacksTriggered(vibration, Status.CANCELLED_BY_USER);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
- assertEquals(Arrays.asList(expectedOneShot(5550)),
- fakeVibrator.getEffectSegments(vibration.id));
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+ assertThat(fakeVibrator.getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(5550)).inOrder();
}
@LargeTest
@@ -566,23 +573,24 @@ public class VibrationThreadTest {
/* amplitudes= */ new int[]{1, 2}, /* repeat= */ 0);
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(waitUntil(() -> fakeVibrator.getEffectSegments(vibration.id).size() > 1,
- expectedOnDuration + TEST_TIMEOUT_MILLIS));
+ assertThat(waitUntil(() -> fakeVibrator.getEffectSegments(vibration.id).size() > 1,
+ expectedOnDuration + TEST_TIMEOUT_MILLIS)).isTrue();
mVibrationConductor.notifyCancelled(
new Vibration.EndInfo(Status.CANCELLED_BY_USER), /* immediate= */ false);
waitForCompletion();
verifyCallbacksTriggered(vibration, Status.CANCELLED_BY_USER);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
List<VibrationEffectSegment> effectSegments = fakeVibrator.getEffectSegments(vibration.id);
// First time, turn vibrator ON for the expected fixed duration.
- assertEquals(expectedOnDuration, effectSegments.get(0).getDuration());
+ assertThat(effectSegments.get(0).getDuration()).isEqualTo(expectedOnDuration);
// Vibrator turns off in the middle of the second execution of the first step. Expect it to
// be turned back ON at least for the fixed duration + the remaining duration of the step.
- assertTrue(expectedOnDuration < effectSegments.get(1).getDuration());
+ assertThat(effectSegments.get(1).getDuration()).isGreaterThan(expectedOnDuration);
// Set amplitudes for a cycle {1, 2}, start second loop then turn it back on to same value.
- assertEquals(expectedAmplitudes(1, 2, 1, 1),
- mVibratorProviders.get(VIBRATOR_ID).getAmplitudes().subList(0, 4));
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes().subList(0, 4))
+ .containsExactlyElementsIn(expectedAmplitudes(1, 2, 1, 1))
+ .inOrder();
}
@Test
@@ -598,9 +606,9 @@ public class VibrationThreadTest {
.compose();
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
- TEST_TIMEOUT_MILLIS));
- assertTrue(mThread.isRunningVibrationId(vibration.id));
+ assertThat(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
+ TEST_TIMEOUT_MILLIS)).isTrue();
+ assertThat(mThread.isRunningVibrationId(vibration.id)).isTrue();
// Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
// fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
@@ -614,7 +622,7 @@ public class VibrationThreadTest {
cancellingThread.join();
verifyCallbacksTriggered(vibration, Status.CANCELLED_BY_SETTINGS_UPDATE);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
}
@Test
@@ -628,9 +636,9 @@ public class VibrationThreadTest {
VibrationEffect effect = VibrationEffect.createVendorEffect(createTestVendorData());
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
- TEST_TIMEOUT_MILLIS));
- assertTrue(mThread.isRunningVibrationId(vibration.id));
+ assertThat(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
+ TEST_TIMEOUT_MILLIS)).isTrue();
+ assertThat(mThread.isRunningVibrationId(vibration.id)).isTrue();
// Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
// fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
@@ -644,7 +652,7 @@ public class VibrationThreadTest {
cancellingThread.join();
verifyCallbacksTriggered(vibration, Status.CANCELLED_BY_SETTINGS_UPDATE);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
}
@Test
@@ -655,9 +663,9 @@ public class VibrationThreadTest {
VibrationEffect effect = VibrationEffect.createWaveform(new long[]{100}, new int[]{100}, 0);
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
- TEST_TIMEOUT_MILLIS));
- assertTrue(mThread.isRunningVibrationId(vibration.id));
+ assertThat(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
+ TEST_TIMEOUT_MILLIS)).isTrue();
+ assertThat(mThread.isRunningVibrationId(vibration.id)).isTrue();
// Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
// fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
@@ -671,7 +679,7 @@ public class VibrationThreadTest {
cancellingThread.join();
verifyCallbacksTriggered(vibration, Status.CANCELLED_BY_SCREEN_OFF);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
}
@Test
@@ -686,10 +694,10 @@ public class VibrationThreadTest {
verify(mManagerHooks).noteVibratorOff(eq(UID));
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
- assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_THUD)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(expectedPrebaked(VibrationEffect.EFFECT_THUD)).inOrder();
}
@Test
@@ -698,7 +706,7 @@ public class VibrationThreadTest {
VibrationEffect fallback = VibrationEffect.createOneShot(10, 100);
HalVibration vibration = createVibration(CombinedVibration.createParallel(
- VibrationEffect.get(VibrationEffect.EFFECT_CLICK)));
+ VibrationEffect.get(EFFECT_CLICK)));
vibration.fillFallbacks(unused -> fallback);
startThreadAndDispatcher(vibration);
waitForCompletion();
@@ -707,16 +715,17 @@ public class VibrationThreadTest {
verify(mManagerHooks).noteVibratorOff(eq(UID));
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
- assertEquals(Arrays.asList(expectedOneShot(10)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
- assertEquals(expectedAmplitudes(100), mVibratorProviders.get(VIBRATOR_ID).getAmplitudes());
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(10)).inOrder();
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(100)).inOrder();
}
@Test
public void vibrate_singleVibratorPrebakedAndUnsupportedEffect_ignoresVibration() {
- VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+ VibrationEffect effect = VibrationEffect.get(EFFECT_CLICK);
HalVibration vibration = startThreadAndDispatcher(effect);
waitForCompletion();
@@ -725,7 +734,7 @@ public class VibrationThreadTest {
verify(mControllerCallbacks, never())
.onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.IGNORED_UNSUPPORTED);
- assertTrue(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id).isEmpty());
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id)).isEmpty();
}
@Test
@@ -745,8 +754,7 @@ public class VibrationThreadTest {
assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
assertThat(mVibratorProviders.get(VIBRATOR_ID).getVendorEffects(vibration.id))
- .containsExactly(effect)
- .inOrder();
+ .containsExactly(effect).inOrder();
}
@Test
@@ -766,11 +774,12 @@ public class VibrationThreadTest {
verify(mManagerHooks).noteVibratorOff(eq(UID));
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
- assertEquals(Arrays.asList(
- expectedPrimitive(PRIMITIVE_CLICK, 1, 0),
- expectedPrimitive(PRIMITIVE_TICK, 0.5f, 0)),
- fakeVibrator.getEffectSegments(vibration.id));
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+ assertThat(fakeVibrator.getEffectSegments(vibration.id))
+ .containsExactly(
+ expectedPrimitive(PRIMITIVE_CLICK, 1, 0),
+ expectedPrimitive(PRIMITIVE_TICK, 0.5f, 0))
+ .inOrder();
}
@Test
@@ -787,7 +796,7 @@ public class VibrationThreadTest {
verify(mControllerCallbacks, never())
.onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.IGNORED_UNSUPPORTED);
- assertTrue(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id).isEmpty());
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id)).isEmpty();
}
@Test
@@ -804,7 +813,7 @@ public class VibrationThreadTest {
verify(mControllerCallbacks, never())
.onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.IGNORED_UNSUPPORTED);
- assertTrue(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id).isEmpty());
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id)).isEmpty();
}
@Test
@@ -826,14 +835,14 @@ public class VibrationThreadTest {
// Vibrator compose called twice.
verify(mControllerCallbacks, times(2))
.onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
- assertEquals(3, fakeVibrator.getEffectSegments(vibration.id).size());
+ assertThat(fakeVibrator.getEffectSegments(vibration.id)).hasSize(3);
}
@Test
@DisableFlags(Flags.FLAG_NORMALIZED_PWLE_EFFECTS)
public void vibrate_singleVibratorComposedEffects_runsDifferentVibrations() {
FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
- fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+ fakeVibrator.setSupportedEffects(EFFECT_CLICK);
fakeVibrator.setSupportedPrimitives(PRIMITIVE_CLICK, PRIMITIVE_TICK);
fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS,
IVibrator.CAP_COMPOSE_PWLE_EFFECTS, IVibrator.CAP_AMPLITUDE_CONTROL);
@@ -847,13 +856,13 @@ public class VibrationThreadTest {
.addEffect(VibrationEffect.createOneShot(10, 100))
.addPrimitive(PRIMITIVE_CLICK, 1f)
.addPrimitive(PRIMITIVE_TICK, 0.5f)
- .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+ .addEffect(VibrationEffect.get(EFFECT_CLICK))
.addEffect(VibrationEffect.startWaveform()
.addTransition(Duration.ofMillis(10),
targetAmplitude(1), targetFrequency(100))
.addTransition(Duration.ofMillis(20), targetFrequency(120))
.build())
- .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+ .addEffect(VibrationEffect.get(EFFECT_CLICK))
.compose();
HalVibration vibration = startThreadAndDispatcher(effect);
waitForCompletion();
@@ -864,33 +873,37 @@ public class VibrationThreadTest {
verify(mControllerCallbacks, times(5))
.onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
- assertEquals(Arrays.asList(
- expectedOneShot(10),
- expectedPrimitive(PRIMITIVE_CLICK, 1, 0),
- expectedPrimitive(PRIMITIVE_TICK, 0.5f, 0),
- expectedPrebaked(VibrationEffect.EFFECT_CLICK),
- expectedRamp(/* startAmplitude= */ 0, /* endAmplitude= */ 0.5f,
- /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 100, /* duration= */ 10),
- expectedRamp(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.7f,
- /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 120, /* duration= */ 20),
- expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
- assertEquals(expectedAmplitudes(100), mVibratorProviders.get(VIBRATOR_ID).getAmplitudes());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(
+ expectedOneShot(10),
+ expectedPrimitive(PRIMITIVE_CLICK, 1, 0),
+ expectedPrimitive(PRIMITIVE_TICK, 0.5f, 0),
+ expectedPrebaked(EFFECT_CLICK),
+ expectedRamp(/* startAmplitude= */ 0, /* endAmplitude= */ 0.5f,
+ /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 100,
+ /* duration= */ 10),
+ expectedRamp(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.7f,
+ /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 120,
+ /* duration= */ 20),
+ expectedPrebaked(EFFECT_CLICK))
+ .inOrder();
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(100)).inOrder();
}
@Test
public void vibrate_singleVibratorComposedWithFallback_replacedInTheMiddleOfComposition() {
FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
- fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+ fakeVibrator.setSupportedEffects(EFFECT_CLICK);
fakeVibrator.setSupportedPrimitives(PRIMITIVE_CLICK, PRIMITIVE_TICK);
fakeVibrator.setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
VibrationEffect fallback = VibrationEffect.createOneShot(10, 100);
VibrationEffect effect = VibrationEffect.startComposition()
- .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+ .addEffect(VibrationEffect.get(EFFECT_CLICK))
.addPrimitive(PRIMITIVE_CLICK, 1f)
- .addEffect(VibrationEffect.get(VibrationEffect.EFFECT_TICK))
+ .addEffect(VibrationEffect.get(EFFECT_TICK))
.addPrimitive(PRIMITIVE_TICK, 0.5f)
.compose();
HalVibration vibration = createVibration(CombinedVibration.createParallel(effect));
@@ -904,18 +917,19 @@ public class VibrationThreadTest {
verify(mControllerCallbacks, times(4))
.onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
List<VibrationEffectSegment> segments =
mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id);
- assertTrue("Wrong segments: " + segments, segments.size() >= 4);
- assertTrue(segments.get(0) instanceof PrebakedSegment);
- assertTrue(segments.get(1) instanceof PrimitiveSegment);
+ assertWithMessage("Wrong segments: %s", segments).that(segments.size()).isGreaterThan(3);
+ assertThat(segments.get(0)).isInstanceOf(PrebakedSegment.class);
+ assertThat(segments.get(1)).isInstanceOf(PrimitiveSegment.class);
for (int i = 2; i < segments.size() - 1; i++) {
// One or more step segments as fallback for the EFFECT_TICK.
- assertTrue(segments.get(i) instanceof StepSegment);
+ assertWithMessage("For segment index %s", i)
+ .that(segments.get(i)).isInstanceOf(StepSegment.class);
}
- assertTrue(segments.get(segments.size() - 1) instanceof PrimitiveSegment);
+ assertThat(segments.get(segments.size() - 1)).isInstanceOf(PrimitiveSegment.class);
}
@Test
@@ -942,14 +956,15 @@ public class VibrationThreadTest {
verify(mManagerHooks).noteVibratorOff(eq(UID));
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
- assertEquals(Arrays.asList(
- expectedPwle(/*amplitude=*/ 0.0f, /*frequencyHz=*/ 60f, /*timeMillis=*/ 0),
- expectedPwle(/*amplitude=*/ 0.1f, /*frequencyHz=*/ 60f, /*timeMillis=*/ 20),
- expectedPwle(/*amplitude=*/ 0.3f, /*frequencyHz=*/ 100f, /*timeMillis=*/ 30),
- expectedPwle(/*amplitude=*/ 0.4f, /*frequencyHz=*/ 120f, /*timeMillis=*/ 20),
- expectedPwle(/*amplitude=*/ 0.0f, /*frequencyHz=*/ 120f, /*timeMillis=*/ 30)
- ), fakeVibrator.getEffectPwlePoints(vibration.id));
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+ assertThat(fakeVibrator.getEffectPwlePoints(vibration.id))
+ .containsExactly(
+ expectedPwle(0.0f, 60f, 0),
+ expectedPwle(0.1f, 60f, 20),
+ expectedPwle(0.3f, 100f, 30),
+ expectedPwle(0.4f, 120f, 20),
+ expectedPwle(0.0f, 120f, 30))
+ .inOrder();
}
@@ -978,13 +993,14 @@ public class VibrationThreadTest {
verify(mManagerHooks).noteVibratorOff(eq(UID));
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
- assertEquals(Arrays.asList(
- expectedPwle(/*amplitude=*/ 0.0f, /*frequencyHz=*/ 150f, /*timeMillis=*/ 0),
- expectedPwle(/*amplitude=*/ 1.0f, /*frequencyHz=*/ 150f, /*timeMillis=*/ 20),
- expectedPwle(/*amplitude=*/ 1.0f, /*frequencyHz=*/ 150f, /*timeMillis=*/ 100),
- expectedPwle(/*amplitude=*/ 0.0f, /*frequencyHz=*/ 150f, /*timeMillis=*/ 100)
- ), fakeVibrator.getEffectPwlePoints(vibration.id));
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+ assertThat(fakeVibrator.getEffectPwlePoints(vibration.id))
+ .containsExactly(
+ expectedPwle(0.0f, 150f, 0),
+ expectedPwle(1.0f, 150f, 20),
+ expectedPwle(1.0f, 150f, 100),
+ expectedPwle(0.0f, 150f, 100))
+ .inOrder();
}
@@ -1014,15 +1030,15 @@ public class VibrationThreadTest {
verify(mManagerHooks).noteVibratorOff(eq(UID));
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
- assertEquals(Arrays.asList(
- expectedPwle(/*amplitude=*/ 0.0f, /*frequencyHz=*/ 30f, /*timeMillis=*/ 0),
- expectedPwle(/*amplitude=*/ 0.1f, /*frequencyHz=*/ 60f, /*timeMillis=*/ 20),
- expectedPwle(/*amplitude=*/ 0.3f, /*frequencyHz=*/ 100f, /*timeMillis=*/ 30),
- expectedPwle(/*amplitude=*/ 0.4f, /*frequencyHz=*/ 120f, /*timeMillis=*/ 20),
- expectedPwle(/*amplitude=*/ 0.0f, /*frequencyHz=*/ 120f, /*timeMillis=*/ 30)
- ), fakeVibrator.getEffectPwlePoints(vibration.id));
-
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+ assertThat(fakeVibrator.getEffectPwlePoints(vibration.id))
+ .containsExactly(
+ expectedPwle(0.0f, 30f, 0),
+ expectedPwle(0.1f, 60f, 20),
+ expectedPwle(0.3f, 100f, 30),
+ expectedPwle(0.4f, 120f, 20),
+ expectedPwle(0.0f, 120f, 30))
+ .inOrder();
}
@Test
@@ -1054,18 +1070,17 @@ public class VibrationThreadTest {
// Using best split points instead of max-packing PWLEs.
verify(mControllerCallbacks, times(3))
.onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
-
- assertEquals(Arrays.asList(
- expectedPwle(/*amplitude=*/ 0.0f, /*frequencyHz=*/ 100f, /*timeMillis=*/ 0),
- expectedPwle(/*amplitude=*/ 0.8f, /*frequencyHz=*/ 100f, /*timeMillis=*/ 30),
- expectedPwle(/*amplitude=*/ 0.0f, /*frequencyHz=*/ 100f, /*timeMillis=*/ 30),
- expectedPwle(/*amplitude=*/ 0.9f, /*frequencyHz=*/ 100f, /*timeMillis=*/ 0),
- expectedPwle(/*amplitude=*/ 0.4f, /*frequencyHz=*/ 100f, /*timeMillis=*/ 30),
- expectedPwle(/*amplitude=*/ 0.6f, /*frequencyHz=*/ 100f, /*timeMillis=*/ 0),
- expectedPwle(/*amplitude=*/ 0.7f, /*frequencyHz=*/ 100f, /*timeMillis=*/ 30)
- ), fakeVibrator.getEffectPwlePoints(vibration.id));
-
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+ assertThat(fakeVibrator.getEffectPwlePoints(vibration.id))
+ .containsExactly(
+ expectedPwle(0.0f, 100f, 0),
+ expectedPwle(0.8f, 100f, 30),
+ expectedPwle(0.0f, 100f, 30),
+ expectedPwle(0.9f, 100f, 0),
+ expectedPwle(0.4f, 100f, 30),
+ expectedPwle(0.6f, 100f, 0),
+ expectedPwle(0.7f, 100f, 30))
+ .inOrder();
}
@Test
@@ -1094,17 +1109,21 @@ public class VibrationThreadTest {
verify(mManagerHooks).noteVibratorOff(eq(UID));
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
- assertEquals(Arrays.asList(
- expectedRamp(/* amplitude= */ 1, /* frequencyHz= */ 150, /* duration= */ 10),
- expectedRamp(/* startAmplitude= */ 1, /* endAmplitude= */ 0,
- /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 150, /* duration= */ 20),
- expectedRamp(/* amplitude= */ 0.5f, /* frequencyHz= */ 100, /* duration= */ 30),
- expectedRamp(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.6f,
- /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 200,
- /* duration= */ 40)),
- fakeVibrator.getEffectSegments(vibration.id));
- assertEquals(Arrays.asList(Braking.CLAB), fakeVibrator.getBraking(vibration.id));
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
+ assertThat(fakeVibrator.getEffectSegments(vibration.id))
+ .containsExactly(
+ expectedRamp(/* amplitude= */ 1, /* frequencyHz= */ 150,
+ /* duration= */ 10),
+ expectedRamp(/* startAmplitude= */ 1, /* endAmplitude= */ 0,
+ /* startFrequencyHz= */ 150, /* endFrequencyHz= */ 150,
+ /* duration= */ 20),
+ expectedRamp(/* amplitude= */ 0.5f, /* frequencyHz= */ 100,
+ /* duration= */ 30),
+ expectedRamp(/* startAmplitude= */ 0.5f, /* endAmplitude= */ 0.6f,
+ /* startFrequencyHz= */ 100, /* endFrequencyHz= */ 200,
+ /* duration= */ 40))
+ .inOrder();
+ assertThat(fakeVibrator.getBraking(vibration.id)).containsExactly(Braking.CLAB).inOrder();
}
@Test
@@ -1137,7 +1156,7 @@ public class VibrationThreadTest {
// Using best split points instead of max-packing PWLEs.
verify(mControllerCallbacks, times(3))
.onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
- assertEquals(6, fakeVibrator.getEffectSegments(vibration.id).size());
+ assertThat(fakeVibrator.getEffectSegments(vibration.id)).hasSize(6);
}
@Test
@@ -1148,15 +1167,16 @@ public class VibrationThreadTest {
VibrationEffect effect = VibrationEffect.createWaveform(new long[]{5}, new int[]{100}, 0);
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(waitUntil(() -> fakeVibrator.getAmplitudes().size() > 2, TEST_TIMEOUT_MILLIS));
+ assertThat(waitUntil(() -> fakeVibrator.getAmplitudes().size() > 2, TEST_TIMEOUT_MILLIS))
+ .isTrue();
// Vibration still running after 2 cycles.
- assertTrue(mThread.isRunningVibrationId(vibration.id));
- assertTrue(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mThread.isRunningVibrationId(vibration.id)).isTrue();
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isTrue();
mVibrationConductor.notifyCancelled(
new Vibration.EndInfo(Status.CANCELLED_BINDER_DIED), /* immediate= */ false);
waitForCompletion();
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
verifyCallbacksTriggered(vibration, Status.CANCELLED_BINDER_DIED);
}
@@ -1176,11 +1196,11 @@ public class VibrationThreadTest {
@Test
public void vibrate_multipleExistingAndMissingVibrators_vibratesOnlyExistingOnes() {
- mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_TICK);
+ mVibratorProviders.get(1).setSupportedEffects(EFFECT_TICK);
CombinedVibration effect = CombinedVibration.startParallel()
- .addVibrator(VIBRATOR_ID, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
- .addVibrator(2, VibrationEffect.get(VibrationEffect.EFFECT_TICK))
+ .addVibrator(VIBRATOR_ID, VibrationEffect.get(EFFECT_TICK))
+ .addVibrator(2, VibrationEffect.get(EFFECT_TICK))
.combine();
HalVibration vibration = startThreadAndDispatcher(effect);
waitForCompletion();
@@ -1190,21 +1210,21 @@ public class VibrationThreadTest {
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verify(mControllerCallbacks, never()).onComplete(eq(2), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
- assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_TICK)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(expectedPrebaked(EFFECT_TICK)).inOrder();
}
@Test
public void vibrate_multipleMono_runsSameEffectInAllVibrators() {
mockVibrators(1, 2, 3);
- mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
- mVibratorProviders.get(2).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
- mVibratorProviders.get(3).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+ mVibratorProviders.get(1).setSupportedEffects(EFFECT_CLICK);
+ mVibratorProviders.get(2).setSupportedEffects(EFFECT_CLICK);
+ mVibratorProviders.get(3).setSupportedEffects(EFFECT_CLICK);
CombinedVibration effect = CombinedVibration.createParallel(
- VibrationEffect.get(VibrationEffect.EFFECT_CLICK));
+ VibrationEffect.get(EFFECT_CLICK));
HalVibration vibration = startThreadAndDispatcher(effect);
waitForCompletion();
@@ -1214,23 +1234,23 @@ public class VibrationThreadTest {
verify(mControllerCallbacks).onComplete(eq(2), eq(vibration.id), anyLong());
verify(mControllerCallbacks).onComplete(eq(3), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(1).isVibrating());
- assertFalse(mControllers.get(2).isVibrating());
- assertFalse(mControllers.get(3).isVibrating());
+ assertThat(mControllers.get(1).isVibrating()).isFalse();
+ assertThat(mControllers.get(2).isVibrating()).isFalse();
+ assertThat(mControllers.get(3).isVibrating()).isFalse();
- VibrationEffectSegment expected = expectedPrebaked(VibrationEffect.EFFECT_CLICK);
- assertEquals(Arrays.asList(expected),
- mVibratorProviders.get(1).getEffectSegments(vibration.id));
- assertEquals(Arrays.asList(expected),
- mVibratorProviders.get(2).getEffectSegments(vibration.id));
- assertEquals(Arrays.asList(expected),
- mVibratorProviders.get(3).getEffectSegments(vibration.id));
+ VibrationEffectSegment expected = expectedPrebaked(EFFECT_CLICK);
+ assertThat(mVibratorProviders.get(1).getEffectSegments(vibration.id))
+ .containsExactly(expected).inOrder();
+ assertThat(mVibratorProviders.get(2).getEffectSegments(vibration.id))
+ .containsExactly(expected).inOrder();
+ assertThat(mVibratorProviders.get(3).getEffectSegments(vibration.id))
+ .containsExactly(expected).inOrder();
}
@Test
public void vibrate_multipleStereo_runsVibrationOnRightVibrators() {
mockVibrators(1, 2, 3, 4);
- mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+ mVibratorProviders.get(1).setSupportedEffects(EFFECT_CLICK);
mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
mVibratorProviders.get(3).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
mVibratorProviders.get(4).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
@@ -1240,7 +1260,7 @@ public class VibrationThreadTest {
.addPrimitive(PRIMITIVE_CLICK)
.compose();
CombinedVibration effect = CombinedVibration.startParallel()
- .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+ .addVibrator(1, VibrationEffect.get(EFFECT_CLICK))
.addVibrator(2, VibrationEffect.createOneShot(10, 100))
.addVibrator(3, VibrationEffect.createWaveform(
new long[]{10, 10}, new int[]{1, 2}, -1))
@@ -1256,21 +1276,23 @@ public class VibrationThreadTest {
verify(mControllerCallbacks).onComplete(eq(3), eq(vibration.id), anyLong());
verify(mControllerCallbacks).onComplete(eq(4), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(1).isVibrating());
- assertFalse(mControllers.get(2).isVibrating());
- assertFalse(mControllers.get(3).isVibrating());
- assertFalse(mControllers.get(4).isVibrating());
-
- assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
- mVibratorProviders.get(1).getEffectSegments(vibration.id));
- assertEquals(Arrays.asList(expectedOneShot(10)),
- mVibratorProviders.get(2).getEffectSegments(vibration.id));
- assertEquals(expectedAmplitudes(100), mVibratorProviders.get(2).getAmplitudes());
- assertEquals(Arrays.asList(expectedOneShot(20)),
- mVibratorProviders.get(3).getEffectSegments(vibration.id));
- assertEquals(expectedAmplitudes(1, 2), mVibratorProviders.get(3).getAmplitudes());
- assertEquals(Arrays.asList(expectedPrimitive(PRIMITIVE_CLICK, 1, 0)),
- mVibratorProviders.get(4).getEffectSegments(vibration.id));
+ assertThat(mControllers.get(1).isVibrating()).isFalse();
+ assertThat(mControllers.get(2).isVibrating()).isFalse();
+ assertThat(mControllers.get(3).isVibrating()).isFalse();
+ assertThat(mControllers.get(4).isVibrating()).isFalse();
+
+ assertThat(mVibratorProviders.get(1).getEffectSegments(vibration.id))
+ .containsExactly(expectedPrebaked(EFFECT_CLICK)).inOrder();
+ assertThat(mVibratorProviders.get(2).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(10)).inOrder();
+ assertThat(mVibratorProviders.get(2).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(100)).inOrder();
+ assertThat(mVibratorProviders.get(3).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(20)).inOrder();
+ assertThat(mVibratorProviders.get(3).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(1, 2)).inOrder();
+ assertThat(mVibratorProviders.get(4).getEffectSegments(vibration.id))
+ .containsExactly(expectedPrimitive(PRIMITIVE_CLICK, 1, 0)).inOrder();
}
@Test
@@ -1279,13 +1301,13 @@ public class VibrationThreadTest {
mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
mVibratorProviders.get(2).setSupportedPrimitives(PRIMITIVE_CLICK);
- mVibratorProviders.get(3).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+ mVibratorProviders.get(3).setSupportedEffects(EFFECT_CLICK);
VibrationEffect composed = VibrationEffect.startComposition()
.addPrimitive(PRIMITIVE_CLICK)
.compose();
CombinedVibration effect = CombinedVibration.startSequential()
- .addNext(3, VibrationEffect.get(VibrationEffect.EFFECT_CLICK), /* delay= */ 50)
+ .addNext(3, VibrationEffect.get(EFFECT_CLICK), /* delay= */ 50)
.addNext(1, VibrationEffect.createOneShot(10, 100), /* delay= */ 50)
.addNext(2, composed, /* delay= */ 50)
.combine();
@@ -1306,17 +1328,18 @@ public class VibrationThreadTest {
batteryVerifier.verify(mManagerHooks).noteVibratorOff(eq(UID));
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(1).isVibrating());
- assertFalse(mControllers.get(2).isVibrating());
- assertFalse(mControllers.get(3).isVibrating());
+ assertThat(mControllers.get(1).isVibrating()).isFalse();
+ assertThat(mControllers.get(2).isVibrating()).isFalse();
+ assertThat(mControllers.get(3).isVibrating()).isFalse();
- assertEquals(Arrays.asList(expectedOneShot(10)),
- mVibratorProviders.get(1).getEffectSegments(vibration.id));
- assertEquals(expectedAmplitudes(100), mVibratorProviders.get(1).getAmplitudes());
- assertEquals(Arrays.asList(expectedPrimitive(PRIMITIVE_CLICK, 1, 0)),
- mVibratorProviders.get(2).getEffectSegments(vibration.id));
- assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
- mVibratorProviders.get(3).getEffectSegments(vibration.id));
+ assertThat(mVibratorProviders.get(1).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(10)).inOrder();
+ assertThat(mVibratorProviders.get(1).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(100)).inOrder();
+ assertThat(mVibratorProviders.get(2).getEffectSegments(vibration.id))
+ .containsExactly(expectedPrimitive(PRIMITIVE_CLICK, 1, 0)).inOrder();
+ assertThat(mVibratorProviders.get(3).getEffectSegments(vibration.id))
+ .containsExactly(expectedPrebaked(EFFECT_CLICK)).inOrder();
}
@Test
@@ -1339,10 +1362,10 @@ public class VibrationThreadTest {
when(mManagerHooks.triggerSyncedVibration(eq(vibration.id))).thenReturn(true);
startThreadAndDispatcher(vibration);
- assertTrue(waitUntil(
+ assertThat(waitUntil(
() -> !mVibratorProviders.get(1).getEffectSegments(vibration.id).isEmpty()
&& !mVibratorProviders.get(2).getEffectSegments(vibration.id).isEmpty(),
- TEST_TIMEOUT_MILLIS));
+ TEST_TIMEOUT_MILLIS)).isTrue();
mVibrationConductor.notifySyncedVibrationComplete();
waitForCompletion();
@@ -1353,17 +1376,17 @@ public class VibrationThreadTest {
verifyCallbacksTriggered(vibration, Status.FINISHED);
VibrationEffectSegment expected = expectedPrimitive(PRIMITIVE_CLICK, 1, 100);
- assertEquals(Arrays.asList(expected),
- mVibratorProviders.get(1).getEffectSegments(vibration.id));
- assertEquals(Arrays.asList(expected),
- mVibratorProviders.get(2).getEffectSegments(vibration.id));
+ assertThat(mVibratorProviders.get(1).getEffectSegments(vibration.id))
+ .containsExactly(expected).inOrder();
+ assertThat(mVibratorProviders.get(2).getEffectSegments(vibration.id))
+ .containsExactly(expected).inOrder();
}
@Test
public void vibrate_multipleSynced_callsPrepareAndTriggerCallbacks() {
int[] vibratorIds = new int[]{1, 2, 3, 4};
mockVibrators(vibratorIds);
- mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+ mVibratorProviders.get(1).setSupportedEffects(EFFECT_CLICK);
mVibratorProviders.get(4).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
mVibratorProviders.get(4).setSupportedPrimitives(PRIMITIVE_CLICK);
when(mManagerHooks.prepareSyncedVibration(anyLong(), any())).thenReturn(true);
@@ -1372,7 +1395,7 @@ public class VibrationThreadTest {
.addPrimitive(PRIMITIVE_CLICK)
.compose();
CombinedVibration effect = CombinedVibration.startParallel()
- .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+ .addVibrator(1, VibrationEffect.get(EFFECT_CLICK))
.addVibrator(2, VibrationEffect.createOneShot(10, 100))
.addVibrator(3, VibrationEffect.createWaveform(new long[]{10}, new int[]{100}, -1))
.addVibrator(4, composed)
@@ -1417,24 +1440,26 @@ public class VibrationThreadTest {
verify(mManagerHooks, never()).triggerSyncedVibration(eq(vibration.id));
verify(mManagerHooks, never()).cancelSyncedVibration();
- assertEquals(Arrays.asList(expectedOneShot(10)),
- mVibratorProviders.get(1).getEffectSegments(vibration.id));
- assertEquals(expectedAmplitudes(100), mVibratorProviders.get(1).getAmplitudes());
- assertEquals(Arrays.asList(expectedOneShot(5)),
- mVibratorProviders.get(2).getEffectSegments(vibration.id));
- assertEquals(expectedAmplitudes(200), mVibratorProviders.get(2).getAmplitudes());
+ assertThat(mVibratorProviders.get(1).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(10)).inOrder();
+ assertThat(mVibratorProviders.get(1).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(100)).inOrder();
+ assertThat(mVibratorProviders.get(2).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(5)).inOrder();
+ assertThat(mVibratorProviders.get(2).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(200)).inOrder();
}
@Test
public void vibrate_multipleSyncedTriggerFailed_cancelPreparedVibrationAndSkipSetAmplitude() {
int[] vibratorIds = new int[]{1, 2};
mockVibrators(vibratorIds);
- mVibratorProviders.get(2).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+ mVibratorProviders.get(2).setSupportedEffects(EFFECT_CLICK);
when(mManagerHooks.prepareSyncedVibration(anyLong(), any())).thenReturn(true);
CombinedVibration effect = CombinedVibration.startParallel()
.addVibrator(1, VibrationEffect.createOneShot(10, 100))
- .addVibrator(2, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+ .addVibrator(2, VibrationEffect.get(EFFECT_CLICK))
.combine();
// We create the HalVibration here to obtain the vibration id and use it to mock the
// required response when calling triggerSyncedVibration.
@@ -1451,7 +1476,7 @@ public class VibrationThreadTest {
verify(mManagerHooks).prepareSyncedVibration(eq(expectedCap), eq(vibratorIds));
verify(mManagerHooks).triggerSyncedVibration(eq(vibration.id));
verify(mManagerHooks).cancelSyncedVibration();
- assertTrue(mVibratorProviders.get(1).getAmplitudes().isEmpty());
+ assertThat(mVibratorProviders.get(1).getAmplitudes()).isEmpty();
}
@Test
@@ -1472,11 +1497,11 @@ public class VibrationThreadTest {
HalVibration vibration = startThreadAndDispatcher(effect);
// All vibrators are turned on in parallel.
- assertTrue(waitUntil(
+ assertThat(waitUntil(
() -> mControllers.get(1).isVibrating()
&& mControllers.get(2).isVibrating()
&& mControllers.get(3).isVibrating(),
- TEST_TIMEOUT_MILLIS));
+ TEST_TIMEOUT_MILLIS)).isTrue();
waitForCompletion();
@@ -1486,19 +1511,23 @@ public class VibrationThreadTest {
verify(mControllerCallbacks).onComplete(eq(2), eq(vibration.id), anyLong());
verify(mControllerCallbacks).onComplete(eq(3), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertFalse(mControllers.get(1).isVibrating());
- assertFalse(mControllers.get(2).isVibrating());
- assertFalse(mControllers.get(3).isVibrating());
+ assertThat(mControllers.get(1).isVibrating()).isFalse();
+ assertThat(mControllers.get(2).isVibrating()).isFalse();
+ assertThat(mControllers.get(3).isVibrating()).isFalse();
+
+ assertThat(mVibratorProviders.get(1).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(25)).inOrder();
+ assertThat(mVibratorProviders.get(2).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(80)).inOrder();
+ assertThat(mVibratorProviders.get(3).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(60)).inOrder();
+ assertThat(mVibratorProviders.get(1).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(1, 2, 3)).inOrder();
+ assertThat(mVibratorProviders.get(2).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(4, 5)).inOrder();
+ assertThat(mVibratorProviders.get(3).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(6)).inOrder();
- assertEquals(Arrays.asList(expectedOneShot(25)),
- mVibratorProviders.get(1).getEffectSegments(vibration.id));
- assertEquals(Arrays.asList(expectedOneShot(80)),
- mVibratorProviders.get(2).getEffectSegments(vibration.id));
- assertEquals(Arrays.asList(expectedOneShot(60)),
- mVibratorProviders.get(3).getEffectSegments(vibration.id));
- assertEquals(expectedAmplitudes(1, 2, 3), mVibratorProviders.get(1).getAmplitudes());
- assertEquals(expectedAmplitudes(4, 5), mVibratorProviders.get(2).getAmplitudes());
- assertEquals(expectedAmplitudes(6), mVibratorProviders.get(3).getAmplitudes());
}
@Test
@@ -1545,8 +1574,8 @@ public class VibrationThreadTest {
VibrationEffect.createOneShot(
expectedDuration, VibrationEffect.DEFAULT_AMPLITUDE)));
- startThreadAndDispatcher(vibration);
long startTime = SystemClock.elapsedRealtime();
+ startThreadAndDispatcher(vibration);
vibration.waitForEnd();
long vibrationEndTime = SystemClock.elapsedRealtime();
@@ -1616,26 +1645,24 @@ public class VibrationThreadTest {
// Allow some delay for thread scheduling and callback triggering.
int maxDelay = (int) (0.05 * totalDuration); // < 5% of total duration
- assertTrue("Waveform with perceived delay of " + delay + "ms,"
- + " expected less than " + maxDelay + "ms",
- delay < maxDelay);
+ assertThat(delay).isLessThan(maxDelay);
}
@LargeTest
@Test
public void vibrate_cancelSlowVibrator_cancelIsNotBlockedByVibrationThread() throws Exception {
FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
- fakeVibrator.setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+ fakeVibrator.setSupportedEffects(EFFECT_CLICK);
long latency = 5_000; // 5s
fakeVibrator.setOnLatency(latency);
- VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+ VibrationEffect effect = VibrationEffect.get(EFFECT_CLICK);
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(waitUntil(() -> !fakeVibrator.getEffectSegments(vibration.id).isEmpty(),
- TEST_TIMEOUT_MILLIS));
- assertTrue(mThread.isRunningVibrationId(vibration.id));
+ assertThat(waitUntil(() -> !fakeVibrator.getEffectSegments(vibration.id).isEmpty(),
+ TEST_TIMEOUT_MILLIS)).isTrue();
+ assertThat(mThread.isRunningVibrationId(vibration.id)).isTrue();
// Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
// fail at waitForCompletion(cancellingThread).
@@ -1651,18 +1678,18 @@ public class VibrationThreadTest {
// After the vibrator call ends the vibration is cancelled and the vibrator is turned off.
waitForCompletion(/* timeout= */ latency + TEST_TIMEOUT_MILLIS);
verifyCallbacksTriggered(vibration, Status.CANCELLED_BY_USER);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
}
@Test
public void vibrate_multiplePredefinedCancel_cancelsVibrationImmediately() throws Exception {
mockVibrators(1, 2);
- mVibratorProviders.get(1).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+ mVibratorProviders.get(1).setSupportedEffects(EFFECT_CLICK);
mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
mVibratorProviders.get(2).setSupportedPrimitives(PRIMITIVE_CLICK);
CombinedVibration effect = CombinedVibration.startParallel()
- .addVibrator(1, VibrationEffect.get(VibrationEffect.EFFECT_CLICK))
+ .addVibrator(1, VibrationEffect.get(EFFECT_CLICK))
.addVibrator(2, VibrationEffect.startComposition()
.addPrimitive(PRIMITIVE_CLICK, 1f, 100)
.addPrimitive(PRIMITIVE_CLICK, 1f, 100)
@@ -1671,8 +1698,9 @@ public class VibrationThreadTest {
.combine();
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(waitUntil(() -> mControllers.get(2).isVibrating(), TEST_TIMEOUT_MILLIS));
- assertTrue(mThread.isRunningVibrationId(vibration.id));
+ assertThat(waitUntil(() -> mControllers.get(2).isVibrating(), TEST_TIMEOUT_MILLIS))
+ .isTrue();
+ assertThat(mThread.isRunningVibrationId(vibration.id)).isTrue();
// Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
// fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
@@ -1686,8 +1714,8 @@ public class VibrationThreadTest {
cancellingThread.join();
verifyCallbacksTriggered(vibration, Status.CANCELLED_BY_SCREEN_OFF);
- assertFalse(mControllers.get(1).isVibrating());
- assertFalse(mControllers.get(2).isVibrating());
+ assertThat(mControllers.get(1).isVibrating()).isFalse();
+ assertThat(mControllers.get(2).isVibrating()).isFalse();
}
@Test
@@ -1705,8 +1733,9 @@ public class VibrationThreadTest {
.combine();
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(waitUntil(() -> mControllers.get(2).isVibrating(), TEST_TIMEOUT_MILLIS));
- assertTrue(mThread.isRunningVibrationId(vibration.id));
+ assertThat(waitUntil(() -> mControllers.get(2).isVibrating(), TEST_TIMEOUT_MILLIS))
+ .isTrue();
+ assertThat(mThread.isRunningVibrationId(vibration.id)).isTrue();
// Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
// fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
@@ -1720,8 +1749,8 @@ public class VibrationThreadTest {
cancellingThread.join();
verifyCallbacksTriggered(vibration, Status.CANCELLED_BY_SCREEN_OFF);
- assertFalse(mControllers.get(1).isVibrating());
- assertFalse(mControllers.get(2).isVibrating());
+ assertThat(mControllers.get(1).isVibrating()).isFalse();
+ assertThat(mControllers.get(2).isVibrating()).isFalse();
}
@Test
@@ -1737,10 +1766,10 @@ public class VibrationThreadTest {
.combine();
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(waitUntil(() -> mControllers.get(1).isVibrating()
+ assertThat(waitUntil(() -> mControllers.get(1).isVibrating()
&& mControllers.get(2).isVibrating(),
- TEST_TIMEOUT_MILLIS));
- assertTrue(mThread.isRunningVibrationId(vibration.id));
+ TEST_TIMEOUT_MILLIS)).isTrue();
+ assertThat(mThread.isRunningVibrationId(vibration.id)).isTrue();
// Run cancel in a separate thread so if VibrationThread.cancel blocks then this test should
// fail at waitForCompletion(vibrationThread) if the vibration not cancelled immediately.
@@ -1754,8 +1783,8 @@ public class VibrationThreadTest {
cancellingThread.join();
verifyCallbacksTriggered(vibration, Status.CANCELLED_BY_SCREEN_OFF);
- assertFalse(mControllers.get(1).isVibrating());
- assertFalse(mControllers.get(2).isVibrating());
+ assertThat(mControllers.get(1).isVibrating()).isFalse();
+ assertThat(mControllers.get(2).isVibrating()).isFalse();
}
@Test
@@ -1763,17 +1792,18 @@ public class VibrationThreadTest {
VibrationEffect effect = VibrationEffect.createWaveform(new long[]{5}, new int[]{100}, 0);
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
- TEST_TIMEOUT_MILLIS));
- assertTrue(mThread.isRunningVibrationId(vibration.id));
+ assertThat(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
+ TEST_TIMEOUT_MILLIS)).isTrue();
+ assertThat(mThread.isRunningVibrationId(vibration.id)).isTrue();
mVibrationConductor.notifyCancelled(
new Vibration.EndInfo(Status.CANCELLED_BINDER_DIED), /* immediate= */ false);
waitForCompletion();
verifyCallbacksTriggered(vibration, Status.CANCELLED_BINDER_DIED);
- assertFalse(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id).isEmpty());
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .isNotEmpty();
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
}
@Test
@@ -1790,13 +1820,16 @@ public class VibrationThreadTest {
verifyCallbacksTriggered(vibration, Status.FINISHED);
// Duration extended for 5 + 5 + 5 + 15.
- assertEquals(Arrays.asList(expectedOneShot(30)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(30)).inOrder();
List<Float> amplitudes = mVibratorProviders.get(VIBRATOR_ID).getAmplitudes();
- assertTrue(amplitudes.size() > 3);
- assertEquals(expectedAmplitudes(60, 120, 240), amplitudes.subList(0, 3));
+ assertThat(amplitudes.size()).isGreaterThan(3);
+ assertThat(amplitudes.subList(0, 3))
+ .containsExactlyElementsIn(expectedAmplitudes(60, 120, 240))
+ .inOrder();
for (int i = 3; i < amplitudes.size(); i++) {
- assertTrue(amplitudes.get(i) < amplitudes.get(i - 1));
+ assertWithMessage("For amplitude index %s", i)
+ .that(amplitudes.get(i)).isLessThan(amplitudes.get(i - 1));
}
}
@@ -1814,11 +1847,11 @@ public class VibrationThreadTest {
verify(mManagerHooks, never()).onVibrationThreadReleased(anyLong());
// Thread still running ramp down.
- assertTrue(mThread.isRunningVibrationId(vibration.id));
+ assertThat(mThread.isRunningVibrationId(vibration.id)).isTrue();
// Duration extended for 10 + 10000.
- assertEquals(Arrays.asList(expectedOneShot(10_010)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(10_010)).inOrder();
// Will stop the ramp down right away.
mVibrationConductor.notifyCancelled(
@@ -1838,8 +1871,8 @@ public class VibrationThreadTest {
VibrationEffect effect = VibrationEffect.createOneShot(10_000, 240);
HalVibration vibration = startThreadAndDispatcher(effect);
- assertTrue(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
- TEST_TIMEOUT_MILLIS));
+ assertThat(waitUntil(() -> mControllers.get(VIBRATOR_ID).isVibrating(),
+ TEST_TIMEOUT_MILLIS)).isTrue();
mVibrationConductor.notifyCancelled(
new Vibration.EndInfo(Status.CANCELLED_BY_USER), /* immediate= */ false);
waitForCompletion();
@@ -1847,12 +1880,13 @@ public class VibrationThreadTest {
verifyCallbacksTriggered(vibration, Status.CANCELLED_BY_USER);
// Duration extended for 10000 + 15.
- assertEquals(Arrays.asList(expectedOneShot(10_015)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(10_015)).inOrder();
List<Float> amplitudes = mVibratorProviders.get(VIBRATOR_ID).getAmplitudes();
- assertTrue(amplitudes.size() > 1);
+ assertThat(amplitudes.size()).isGreaterThan(1);
for (int i = 1; i < amplitudes.size(); i++) {
- assertTrue(amplitudes.get(i) < amplitudes.get(i - 1));
+ assertWithMessage("For amplitude index %s", i)
+ .that(amplitudes.get(i)).isLessThan(amplitudes.get(i - 1));
}
}
@@ -1860,18 +1894,18 @@ public class VibrationThreadTest {
public void vibrate_predefinedWithRampDown_doesNotAddRampDown() {
when(mVibrationConfigMock.getRampDownDurationMs()).thenReturn(15);
mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
- mVibratorProviders.get(VIBRATOR_ID).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+ mVibratorProviders.get(VIBRATOR_ID).setSupportedEffects(EFFECT_CLICK);
- VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+ VibrationEffect effect = VibrationEffect.get(EFFECT_CLICK);
HalVibration vibration = startThreadAndDispatcher(effect);
waitForCompletion();
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
- assertTrue(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes().isEmpty());
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(expectedPrebaked(EFFECT_CLICK)).inOrder();
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes()).isEmpty();
}
@Test
@@ -1888,8 +1922,7 @@ public class VibrationThreadTest {
verifyCallbacksTriggered(vibration, Status.FINISHED);
assertThat(mVibratorProviders.get(VIBRATOR_ID).getVendorEffects(vibration.id))
- .containsExactly(effect)
- .inOrder();
+ .containsExactly(effect).inOrder();
assertThat(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes()).isEmpty();
}
@@ -1909,9 +1942,9 @@ public class VibrationThreadTest {
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertEquals(Arrays.asList(expectedPrimitive(PRIMITIVE_CLICK, 1, 0)),
- mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id));
- assertTrue(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes().isEmpty());
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getEffectSegments(vibration.id))
+ .containsExactly(expectedPrimitive(PRIMITIVE_CLICK, 1, 0)).inOrder();
+ assertThat(mVibratorProviders.get(VIBRATOR_ID).getAmplitudes()).isEmpty();
}
@Test
@@ -1936,30 +1969,29 @@ public class VibrationThreadTest {
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration.id), anyLong());
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertEquals(Arrays.asList(expectedRamp(0, 1, 150, 150, 1)),
- fakeVibrator.getEffectSegments(vibration.id));
- assertTrue(fakeVibrator.getAmplitudes().isEmpty());
+ assertThat(fakeVibrator.getEffectSegments(vibration.id))
+ .containsExactly(expectedRamp(0, 1, 150, 150, 1)).inOrder();
+ assertThat(fakeVibrator.getAmplitudes()).isEmpty();
}
@Test
public void vibrate_multipleVibrations_withCancel() throws Exception {
- mVibratorProviders.get(VIBRATOR_ID).setSupportedEffects(
- VibrationEffect.EFFECT_CLICK, VibrationEffect.EFFECT_TICK);
+ mVibratorProviders.get(VIBRATOR_ID).setSupportedEffects(EFFECT_CLICK, EFFECT_TICK);
mVibratorProviders.get(VIBRATOR_ID).setSupportedPrimitives(PRIMITIVE_CLICK);
mVibratorProviders.get(VIBRATOR_ID).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL,
IVibrator.CAP_COMPOSE_EFFECTS);
// A simple effect, followed by a repeating effect that gets cancelled, followed by another
// simple effect.
- VibrationEffect effect1 = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+ VibrationEffect effect1 = VibrationEffect.get(EFFECT_CLICK);
VibrationEffect effect2 = VibrationEffect.startComposition()
- .repeatEffectIndefinitely(VibrationEffect.get(VibrationEffect.EFFECT_TICK))
+ .repeatEffectIndefinitely(VibrationEffect.get(EFFECT_TICK))
.compose();
VibrationEffect effect3 = VibrationEffect.startComposition()
.addPrimitive(PRIMITIVE_CLICK)
.compose();
VibrationEffect effect4 = VibrationEffect.createOneShot(8000, 100);
- VibrationEffect effect5 = VibrationEffect.get(VibrationEffect.EFFECT_CLICK);
+ VibrationEffect effect5 = VibrationEffect.get(EFFECT_CLICK);
HalVibration vibration1 = startThreadAndDispatcher(effect1);
waitForCompletion();
@@ -1987,14 +2019,14 @@ public class VibrationThreadTest {
waitForCompletion();
FakeVibratorControllerProvider fakeVibrator = mVibratorProviders.get(VIBRATOR_ID);
- assertFalse(mControllers.get(VIBRATOR_ID).isVibrating());
+ assertThat(mControllers.get(VIBRATOR_ID).isVibrating()).isFalse();
// Effect1
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration1.id), anyLong());
verifyCallbacksTriggered(vibration1, Status.FINISHED);
- assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
- fakeVibrator.getEffectSegments(vibration1.id));
+ assertThat(fakeVibrator.getEffectSegments(vibration1.id))
+ .containsExactly(expectedPrebaked(EFFECT_CLICK)).inOrder();
// Effect2: repeating, cancelled.
verify(mControllerCallbacks, atLeast(2))
@@ -2005,24 +2037,24 @@ public class VibrationThreadTest {
// all elements are the same segment.
List<VibrationEffectSegment> actualSegments2 =
fakeVibrator.getEffectSegments(vibration2.id);
- assertTrue(actualSegments2.size() + " > 2", actualSegments2.size() > 2);
+ assertThat(actualSegments2.size()).isGreaterThan(2);
for (VibrationEffectSegment segment : actualSegments2) {
- assertEquals(expectedPrebaked(VibrationEffect.EFFECT_TICK), segment);
+ assertThat(segment).isEqualTo(expectedPrebaked(EFFECT_TICK));
}
// Effect3
verify(mControllerCallbacks).onComplete(eq(VIBRATOR_ID), eq(vibration3.id), anyLong());
verifyCallbacksTriggered(vibration3, Status.FINISHED);
- assertEquals(Arrays.asList(expectedPrimitive(PRIMITIVE_CLICK, 1, 0)),
- fakeVibrator.getEffectSegments(vibration3.id));
+ assertThat(fakeVibrator.getEffectSegments(vibration3.id))
+ .containsExactly(expectedPrimitive(PRIMITIVE_CLICK, 1, 0)).inOrder();
// Effect4: cancelled quickly.
verifyCallbacksTriggered(vibration4, Status.CANCELLED_BY_SCREEN_OFF);
- assertTrue("Tested duration=" + duration4, duration4 < 2000);
+ assertThat(duration4).isLessThan(2000);
// Effect5: played normally after effect4, which may or may not have played.
- assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
- fakeVibrator.getEffectSegments(vibration5.id));
+ assertThat(fakeVibrator.getEffectSegments(vibration5.id))
+ .containsExactly(expectedPrebaked(EFFECT_CLICK)).inOrder();
}
@Test
@@ -2031,16 +2063,13 @@ public class VibrationThreadTest {
mVibratorProviders.get(1).setCapabilities(IVibrator.CAP_AMPLITUDE_CONTROL);
mVibratorProviders.get(2).setCapabilities(IVibrator.CAP_COMPOSE_EFFECTS);
mVibratorProviders.get(2).setSupportedPrimitives(PRIMITIVE_CLICK);
- mVibratorProviders.get(3).setSupportedEffects(VibrationEffect.EFFECT_CLICK);
+ mVibratorProviders.get(3).setSupportedEffects(EFFECT_CLICK);
CombinedVibration effect = CombinedVibration.startSequential()
- .addNext(3,
- VibrationEffect.get(VibrationEffect.EFFECT_CLICK),
- /* delay= */ TEST_TIMEOUT_MILLIS)
+ .addNext(3, VibrationEffect.get(EFFECT_CLICK), /* delay= */ TEST_TIMEOUT_MILLIS)
.addNext(1,
VibrationEffect.createWaveform(
- new long[] {TEST_TIMEOUT_MILLIS, TEST_TIMEOUT_MILLIS},
- /* repeat= */ -1),
+ new long[] {TEST_TIMEOUT_MILLIS, TEST_TIMEOUT_MILLIS}, -1),
/* delay= */ TEST_TIMEOUT_MILLIS)
.addNext(2,
VibrationEffect.startComposition()
@@ -2055,20 +2084,22 @@ public class VibrationThreadTest {
// Vibrating state remains ON until session resets it.
verifyCallbacksTriggered(vibration, Status.FINISHED);
- assertTrue(mControllers.get(1).isVibrating());
- assertTrue(mControllers.get(2).isVibrating());
- assertTrue(mControllers.get(3).isVibrating());
-
- assertEquals(0, mVibratorProviders.get(1).getOffCount());
- assertEquals(0, mVibratorProviders.get(2).getOffCount());
- assertEquals(0, mVibratorProviders.get(3).getOffCount());
- assertEquals(Arrays.asList(expectedOneShot(TEST_TIMEOUT_MILLIS)),
- mVibratorProviders.get(1).getEffectSegments(vibration.id));
- assertEquals(expectedAmplitudes(255), mVibratorProviders.get(1).getAmplitudes());
- assertEquals(Arrays.asList(expectedPrimitive(PRIMITIVE_CLICK, 1, TEST_TIMEOUT_MILLIS)),
- mVibratorProviders.get(2).getEffectSegments(vibration.id));
- assertEquals(Arrays.asList(expectedPrebaked(VibrationEffect.EFFECT_CLICK)),
- mVibratorProviders.get(3).getEffectSegments(vibration.id));
+ assertThat(mControllers.get(1).isVibrating()).isTrue();
+ assertThat(mControllers.get(2).isVibrating()).isTrue();
+ assertThat(mControllers.get(3).isVibrating()).isTrue();
+
+ assertThat(mVibratorProviders.get(1).getOffCount()).isEqualTo(0);
+ assertThat(mVibratorProviders.get(2).getOffCount()).isEqualTo(0);
+ assertThat(mVibratorProviders.get(3).getOffCount()).isEqualTo(0);
+ assertThat(mVibratorProviders.get(1).getEffectSegments(vibration.id))
+ .containsExactly(expectedOneShot(TEST_TIMEOUT_MILLIS)).inOrder();
+ assertThat(mVibratorProviders.get(1).getAmplitudes())
+ .containsExactlyElementsIn(expectedAmplitudes(255)).inOrder();
+ assertThat(mVibratorProviders.get(2).getEffectSegments(vibration.id))
+ .containsExactly(expectedPrimitive(PRIMITIVE_CLICK, 1, TEST_TIMEOUT_MILLIS))
+ .inOrder();
+ assertThat(mVibratorProviders.get(3).getEffectSegments(vibration.id))
+ .containsExactly(expectedPrebaked(EFFECT_CLICK)).inOrder();
}
private void mockVibrators(int... vibratorIds) {
@@ -2122,7 +2153,7 @@ public class VibrationThreadTest {
mVibrationConductor = new VibrationStepConductor(vib, isInSession, mVibrationSettings,
deviceAdapter, mVibrationScaler, mStatsLoggerMock, requestVibrationParamsFuture,
mManagerHooks);
- assertTrue(mThread.runVibrationOnVibrationThread(mVibrationConductor));
+ assertThat(mThread.runVibrationOnVibrationThread(mVibrationConductor)).isTrue();
return mVibrationConductor.getVibration();
}
@@ -2142,8 +2173,8 @@ public class VibrationThreadTest {
}
private void waitForCompletion(long timeout) {
- assertTrue("Timed out waiting for VibrationThread to become idle",
- mThread.waitForThreadIdle(timeout));
+ assertWithMessage("Timed out waiting for VibrationThread to become idle")
+ .that(mThread.waitForThreadIdle(timeout)).isTrue();
mTestLooper.dispatchAll(); // Flush callbacks
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java
index 4ad1cd192eb6..d4be7f812cb5 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java
@@ -23,12 +23,14 @@ import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_ENABLE_REFR
import static android.content.pm.ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR_CAMERA;
import static android.content.pm.ActivityInfo.OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA;
import static android.view.WindowManager.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION;
+import static android.view.WindowManager.PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION;
import static android.view.WindowManager.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH;
import static android.view.WindowManager.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE;
import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.window.flags.Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING;
+import static com.android.window.flags.Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT;
import android.compat.testing.PlatformCompatChangeRule;
import android.platform.test.annotations.DisableFlags;
@@ -239,6 +241,34 @@ public class AppCompatCameraOverridesTest extends WindowTestsBase {
@Test
@EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT})
+ @EnableFlags({FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING,
+ FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT})
+ public void testShouldApplyCameraCompatFreeformTreatment_propertyFalse_returnsFalse() {
+ runTestScenario((robot) -> {
+ robot.activity().createActivityWithComponentInNewTask();
+
+ robot.prop().disable(PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION);
+
+ robot.checkShouldApplyFreeformTreatmentForCameraCompat(false);
+ });
+ }
+
+ @Test
+ @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT})
+ @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
+ @DisableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT)
+ public void testShouldApplyCameraCompatFreeformTreatment_optOutFlagNotEnabled_optOutIgnored() {
+ runTestScenario((robot) -> {
+ robot.activity().createActivityWithComponentInNewTask();
+
+ robot.prop().disable(PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION);
+
+ robot.checkShouldApplyFreeformTreatmentForCameraCompat(true);
+ });
+ }
+
+ @Test
+ @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT})
@EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
public void testShouldApplyCameraCompatFreeformTreatment_overrideAndFlagEnabled_returnsTrue() {
runTestScenario((robot) -> {
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
index 9c483846217b..a99bc4966c03 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -37,7 +37,6 @@ import static android.view.Surface.ROTATION_0;
import static android.view.Surface.ROTATION_180;
import static android.view.Surface.ROTATION_270;
import static android.view.Surface.ROTATION_90;
-import static android.view.WindowInsets.Type.ime;
import static android.view.WindowInsets.Type.navigationBars;
import static android.view.WindowInsets.Type.statusBars;
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
@@ -56,6 +55,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
import static android.view.WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE;
@@ -2693,55 +2693,77 @@ public class DisplayContentTests extends WindowTestsBase {
@SetupWindows(addWindows = W_INPUT_METHOD)
@Test
- public void testImeChildWindowFocusWhenImeLayeringTargetChanges() {
- final WindowState imeChildWindow = newWindowBuilder("imeChildWindow",
+ public void testImeChildWindowFocusWhenImeParentWindowChanges() {
+ final var imeChildWindow = newWindowBuilder("imeChildWindow",
TYPE_APPLICATION_ATTACHED_DIALOG).setParent(mImeWindow).build();
- makeWindowVisibleAndDrawn(imeChildWindow, mImeWindow);
- assertTrue(imeChildWindow.canReceiveKeys());
- mDisplayContent.setInputMethodWindowLocked(mImeWindow);
-
- // Verify imeChildWindow can be focused window if the next IME target requests IME visible.
- final WindowState imeAppTarget = newWindowBuilder("imeAppTarget",
- TYPE_BASE_APPLICATION).setDisplay(mDisplayContent).build();
- mDisplayContent.setImeLayeringTarget(imeAppTarget);
- spyOn(imeAppTarget);
- doReturn(true).when(imeAppTarget).isRequestedVisible(ime());
- assertEquals(imeChildWindow, mDisplayContent.findFocusedWindow());
-
- // Verify imeChildWindow doesn't be focused window if the next IME target does not
- // request IME visible.
- final WindowState nextImeAppTarget = newWindowBuilder("nextImeAppTarget",
- TYPE_BASE_APPLICATION).setDisplay(mDisplayContent).build();
- mDisplayContent.setImeLayeringTarget(nextImeAppTarget);
- assertNotEquals(imeChildWindow, mDisplayContent.findFocusedWindow());
+ doTestImeWindowFocusWhenImeParentWindowChanged(imeChildWindow);
}
@SetupWindows(addWindows = W_INPUT_METHOD)
@Test
- public void testImeMenuDialogFocusWhenImeLayeringTargetChanges() {
- final WindowState imeMenuDialog = newWindowBuilder("imeMenuDialog",
+ public void testImeDialogWindowFocusWhenImeParentWindowChanges() {
+ final var imeDialogWindow = newWindowBuilder("imeMenuDialog",
TYPE_INPUT_METHOD_DIALOG).build();
- makeWindowVisibleAndDrawn(imeMenuDialog, mImeWindow);
- assertTrue(imeMenuDialog.canReceiveKeys());
+ doTestImeWindowFocusWhenImeParentWindowChanged(imeDialogWindow);
+ }
+
+ @SetupWindows(addWindows = W_INPUT_METHOD)
+ @Test
+ public void testImeWindowFocusWhenImeParentWindowChanges() {
+ // Verify focusable, non-child IME windows.
+ final var otherImeWindow = newWindowBuilder("otherImeWindow",
+ TYPE_INPUT_METHOD).build();
+ doTestImeWindowFocusWhenImeParentWindowChanged(otherImeWindow);
+ }
+
+ private void doTestImeWindowFocusWhenImeParentWindowChanged(@NonNull WindowState window) {
+ makeWindowVisibleAndDrawn(window, mImeWindow);
+ assertTrue("Window canReceiveKeys", window.canReceiveKeys());
mDisplayContent.setInputMethodWindowLocked(mImeWindow);
- // Verify imeMenuDialog can be focused window if the next IME target requests IME visible.
+ // Verify window can be focused if the IME parent is visible and the IME is visible.
final WindowState imeAppTarget = newWindowBuilder("imeAppTarget",
TYPE_BASE_APPLICATION).setDisplay(mDisplayContent).build();
mDisplayContent.setImeLayeringTarget(imeAppTarget);
- imeAppTarget.setRequestedVisibleTypes(ime());
- assertEquals(imeMenuDialog, mDisplayContent.findFocusedWindow());
-
- // Verify imeMenuDialog doesn't be focused window if the next IME target is closing.
+ mDisplayContent.updateImeInputAndControlTarget(imeAppTarget);
+ final var imeProvider = mDisplayContent.getInsetsStateController().getImeSourceProvider();
+ imeProvider.setImeShowing(true);
+ final var imeParentWindow = mDisplayContent.getImeParentWindow();
+ assertNotNull("IME parent window is not null", imeParentWindow);
+ assertTrue("IME parent window is visible", imeParentWindow.isVisibleRequested());
+ assertTrue("IME is visible", imeProvider.isImeShowing());
+ assertEquals("Window is the focused one", window, mDisplayContent.findFocusedWindow());
+
+ // Verify window can't be focused if the IME parent is not visible.
final WindowState nextImeAppTarget = newWindowBuilder("nextImeAppTarget",
TYPE_BASE_APPLICATION).setDisplay(mDisplayContent).build();
makeWindowVisibleAndDrawn(nextImeAppTarget);
- // Even if the app still requests IME, the ime dialog should not gain focus if the target
- // app is invisible.
- nextImeAppTarget.setRequestedVisibleTypes(ime());
- nextImeAppTarget.mActivityRecord.setVisibility(false);
+ // Change layering target but keep input target (and thus imeParent) the same.
mDisplayContent.setImeLayeringTarget(nextImeAppTarget);
- assertNotEquals(imeMenuDialog, mDisplayContent.findFocusedWindow());
+ // IME parent window is not visible, occluded by new layering target.
+ imeParentWindow.setVisibleRequested(false);
+ assertEquals("IME parent window did not change", imeParentWindow,
+ mDisplayContent.getImeParentWindow());
+ assertFalse("IME parent window is not visible", imeParentWindow.isVisibleRequested());
+ assertTrue("IME is visible", imeProvider.isImeShowing());
+ assertNotEquals("Window is not the focused one when imeParent is not visible", window,
+ mDisplayContent.findFocusedWindow());
+
+ // Verify window can be focused if the IME is not visible.
+ mDisplayContent.updateImeInputAndControlTarget(nextImeAppTarget);
+ imeProvider.setImeShowing(false);
+ final var nextImeParentWindow = mDisplayContent.getImeParentWindow();
+ assertNotNull("Next IME parent window is not null", nextImeParentWindow);
+ assertNotEquals("IME parent window changed", imeParentWindow, nextImeParentWindow);
+ assertTrue("Next IME parent window is visible", nextImeParentWindow.isVisibleRequested());
+ assertFalse("IME is not visible", imeProvider.isImeShowing());
+ if (window.isChildWindow()) {
+ assertNotEquals("Child window is not the focused on when the IME is not visible",
+ window, mDisplayContent.findFocusedWindow());
+ } else {
+ assertEquals("Window is the focused one when the IME is not visible",
+ window, mDisplayContent.findFocusedWindow());
+ }
}
@Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
index 77ad7f7bac7f..c0cb09f9a7d7 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
@@ -82,8 +82,6 @@ import android.graphics.Color;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.IBinder;
-import android.platform.test.annotations.DisableFlags;
-import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -104,7 +102,6 @@ import androidx.annotation.NonNull;
import androidx.test.filters.SmallTest;
import com.android.internal.graphics.ColorUtils;
-import com.android.window.flags.Flags;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -2012,21 +2009,6 @@ public class TransitionTests extends WindowTestsBase {
assertEquals(expectedBackgroundColor, info.getChanges().get(1).getBackgroundColor());
}
- @DisableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
- @Test
- public void testOverrideAnimationOptionsToInfoIfNecessary_disableAnimOptionsPerChange() {
- ActivityRecord r = initializeOverrideAnimationOptionsTest();
- TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions
- .makeCommonAnimOptions("testPackage");
- mTransition.setOverrideAnimation(options, r, null /* startCallback */,
- null /* finishCallback */);
-
- mTransition.overrideAnimationOptionsToInfoIfNecessary(mInfo);
-
- assertEquals(options, mInfo.getAnimationOptions());
- }
-
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testOverrideAnimationOptionsToInfoIfNecessary_fromStyleAnimOptions() {
ActivityRecord r = initializeOverrideAnimationOptionsTest();
@@ -2052,7 +2034,6 @@ public class TransitionTests extends WindowTestsBase {
options, activityChange.getAnimationOptions());
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testOverrideAnimationOptionsToInfoIfNecessary_sceneAnimOptions() {
ActivityRecord r = initializeOverrideAnimationOptionsTest();
@@ -2078,7 +2059,6 @@ public class TransitionTests extends WindowTestsBase {
options, activityChange.getAnimationOptions());
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testOverrideAnimationOptionsToInfoIfNecessary_crossProfileAnimOptions() {
ActivityRecord r = initializeOverrideAnimationOptionsTest();
@@ -2106,7 +2086,6 @@ public class TransitionTests extends WindowTestsBase {
assertTrue(activityChange.hasFlags(FLAG_CROSS_PROFILE_OWNER_THUMBNAIL));
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testOverrideAnimationOptionsToInfoIfNecessary_customAnimOptions() {
ActivityRecord r = initializeOverrideAnimationOptionsTest();
@@ -2139,7 +2118,6 @@ public class TransitionTests extends WindowTestsBase {
options.getBackgroundColor(), activityChange.getBackgroundColor());
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testOverrideAnimationOptionsToInfoIfNecessary_haveTaskFragmentAnimParams() {
ActivityRecord r = initializeOverrideAnimationOptionsTest();
@@ -2188,7 +2166,6 @@ public class TransitionTests extends WindowTestsBase {
options.getBackgroundColor(), activityChange.getBackgroundColor());
}
- @EnableFlags(Flags.FLAG_MOVE_ANIMATION_OPTIONS_TO_CHANGE)
@Test
public void testOverrideAnimationOptionsToInfoIfNecessary_customAnimOptionsWithTaskOverride() {
ActivityRecord r = initializeOverrideAnimationOptionsTest();
@@ -2418,7 +2395,6 @@ public class TransitionTests extends WindowTestsBase {
}
@Test
- @EnableFlags(Flags.FLAG_ENABLE_DISPLAY_FOCUS_IN_SHELL_TRANSITIONS)
public void testMoveDisplayToTop() {
// Set up two displays, each of which has a task.
DisplayContent otherDisplay = createNewDisplay();
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/PhoneCallStateHandler.java b/services/voiceinteraction/java/com/android/server/soundtrigger/PhoneCallStateHandler.java
index 49ad46131b0d..df43ed973fe7 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/PhoneCallStateHandler.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/PhoneCallStateHandler.java
@@ -24,7 +24,6 @@ import android.telephony.TelephonyManager;
import android.util.Slog;
import com.android.internal.annotations.GuardedBy;
-import com.android.internal.telephony.flags.Flags;
import java.util.ArrayList;
import java.util.List;
@@ -119,28 +118,18 @@ public class PhoneCallStateHandler {
private boolean checkCallStatus() {
List<SubscriptionInfo> infoList = mSubscriptionManager.getActiveSubscriptionInfoList();
if (infoList == null) return false;
- if (!Flags.enforceTelephonyFeatureMapping()) {
- return infoList.stream()
- .filter(s -> (s.getSubscriptionId()
- != SubscriptionManager.INVALID_SUBSCRIPTION_ID))
- .anyMatch(s -> isCallOngoingFromState(
- mTelephonyManager
- .createForSubscriptionId(s.getSubscriptionId())
- .getCallStateForSubscription()));
- } else {
- return infoList.stream()
- .filter(s -> (s.getSubscriptionId()
- != SubscriptionManager.INVALID_SUBSCRIPTION_ID))
- .anyMatch(s -> {
- try {
- return isCallOngoingFromState(mTelephonyManager
- .createForSubscriptionId(s.getSubscriptionId())
- .getCallStateForSubscription());
- } catch (UnsupportedOperationException e) {
- return false;
- }
- });
- }
+ return infoList.stream()
+ .filter(s -> (s.getSubscriptionId()
+ != SubscriptionManager.INVALID_SUBSCRIPTION_ID))
+ .anyMatch(s -> {
+ try {
+ return isCallOngoingFromState(mTelephonyManager
+ .createForSubscriptionId(s.getSubscriptionId())
+ .getCallStateForSubscription());
+ } catch (UnsupportedOperationException e) {
+ return false;
+ }
+ });
}
private void updateTelephonyListeners() {
diff --git a/tests/AttestationVerificationTest/src/com/android/server/security/CertificateRevocationStatusManagerTest.java b/tests/AttestationVerificationTest/src/com/android/server/security/CertificateRevocationStatusManagerTest.java
index 586bb76388f6..3854ae6dc9b3 100644
--- a/tests/AttestationVerificationTest/src/com/android/server/security/CertificateRevocationStatusManagerTest.java
+++ b/tests/AttestationVerificationTest/src/com/android/server/security/CertificateRevocationStatusManagerTest.java
@@ -20,18 +20,17 @@ import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;
import android.content.Context;
-import android.os.SystemClock;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
-import org.json.JSONObject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.security.cert.CertPathValidatorException;
@@ -39,33 +38,34 @@ import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.time.LocalDateTime;
+import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
@RunWith(AndroidJUnit4.class)
public class CertificateRevocationStatusManagerTest {
private static final String TEST_CERTIFICATE_FILE_1 = "test_attestation_with_root_certs.pem";
private static final String TEST_CERTIFICATE_FILE_2 = "test_attestation_wrong_root_certs.pem";
- private static final String TEST_REVOCATION_LIST_FILE_NAME = "test_revocation_list.json";
+ private static final String TEST_REMOTE_REVOCATION_LIST_FILE_NAME =
+ "test_remote_revocation_list.json";
private static final String REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST =
"test_revocation_list_no_test_certs.json";
private static final String REVOCATION_LIST_WITH_CERTIFICATES_USED_IN_THIS_TEST =
"test_revocation_list_with_test_certs.json";
- private static final String TEST_REVOCATION_STATUS_FILE_NAME = "test_revocation_status.txt";
+ private static final String TEST_STORED_REVOCATION_LIST_FILE_NAME =
+ "test_stored_revocation_list.json";
private static final String FILE_URL_PREFIX = "file://";
private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext();
private CertificateFactory mFactory;
private List<X509Certificate> mCertificates1;
private List<X509Certificate> mCertificates2;
- private File mRevocationListFile;
+ private File mRemoteRevocationListFile;
private String mRevocationListUrl;
private String mNonExistentRevocationListUrl;
- private File mRevocationStatusFile;
+ private File mStoredRevocationListFile;
private CertificateRevocationStatusManager mCertificateRevocationStatusManager;
@Before
@@ -73,27 +73,29 @@ public class CertificateRevocationStatusManagerTest {
mFactory = CertificateFactory.getInstance("X.509");
mCertificates1 = getCertificateChain(TEST_CERTIFICATE_FILE_1);
mCertificates2 = getCertificateChain(TEST_CERTIFICATE_FILE_2);
- mRevocationListFile = new File(mContext.getFilesDir(), TEST_REVOCATION_LIST_FILE_NAME);
- mRevocationListUrl = FILE_URL_PREFIX + mRevocationListFile.getAbsolutePath();
+ mRemoteRevocationListFile =
+ new File(mContext.getFilesDir(), TEST_REMOTE_REVOCATION_LIST_FILE_NAME);
+ mRevocationListUrl = FILE_URL_PREFIX + mRemoteRevocationListFile.getAbsolutePath();
File noSuchFile = new File(mContext.getFilesDir(), "file_does_not_exist");
mNonExistentRevocationListUrl = FILE_URL_PREFIX + noSuchFile.getAbsolutePath();
- mRevocationStatusFile = new File(mContext.getFilesDir(), TEST_REVOCATION_STATUS_FILE_NAME);
+ mStoredRevocationListFile =
+ new File(mContext.getFilesDir(), TEST_STORED_REVOCATION_LIST_FILE_NAME);
}
@After
public void tearDown() throws Exception {
- mRevocationListFile.delete();
- mRevocationStatusFile.delete();
+ mRemoteRevocationListFile.delete();
+ mStoredRevocationListFile.delete();
}
@Test
public void checkRevocationStatus_doesNotExistOnRemoteRevocationList_noException()
throws Exception {
copyFromAssetToFile(
- REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRevocationListFile);
+ REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mRevocationListUrl, mRevocationStatusFile, false);
+ mContext, mRevocationListUrl, mStoredRevocationListFile, false);
mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
}
@@ -102,10 +104,10 @@ public class CertificateRevocationStatusManagerTest {
public void checkRevocationStatus_existsOnRemoteRevocationList_throwsException()
throws Exception {
copyFromAssetToFile(
- REVOCATION_LIST_WITH_CERTIFICATES_USED_IN_THIS_TEST, mRevocationListFile);
+ REVOCATION_LIST_WITH_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mRevocationListUrl, mRevocationStatusFile, false);
+ mContext, mRevocationListUrl, mStoredRevocationListFile, false);
assertThrows(
CertPathValidatorException.class,
@@ -118,7 +120,7 @@ public class CertificateRevocationStatusManagerTest {
throws Exception {
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mNonExistentRevocationListUrl, mRevocationStatusFile, false);
+ mContext, mNonExistentRevocationListUrl, mStoredRevocationListFile, false);
assertThrows(
CertPathValidatorException.class,
@@ -128,49 +130,56 @@ public class CertificateRevocationStatusManagerTest {
@Test
public void checkRevocationStatus_savesRevocationStatus() throws Exception {
copyFromAssetToFile(
- REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRevocationListFile);
+ REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mRevocationListUrl, mRevocationStatusFile, false);
+ mContext, mRevocationListUrl, mStoredRevocationListFile, false);
mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
- assertThat(mRevocationStatusFile.length()).isGreaterThan(0);
+ assertThat(mStoredRevocationListFile.length()).isGreaterThan(0);
}
@Test
- public void checkRevocationStatus_cannotReachRemoteList_certsSaved_noException()
+ public void checkRevocationStatus_cannotReachRemoteList_listSaved_noException()
throws Exception {
// call checkRevocationStatus once to save the revocation status
copyFromAssetToFile(
- REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRevocationListFile);
+ REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mRevocationListUrl, mRevocationStatusFile, false);
+ mContext, mRevocationListUrl, mStoredRevocationListFile, false);
mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
// call checkRevocationStatus again with mNonExistentRevocationListUrl
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mNonExistentRevocationListUrl, mRevocationStatusFile, false);
+ mContext, mNonExistentRevocationListUrl, mStoredRevocationListFile, false);
mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
}
@Test
- public void checkRevocationStatus_cannotReachRemoteList_someCertsNotSaved_exception()
+ public void checkRevocationStatus_cannotReachRemoteList_storedListTooOld_exception()
throws Exception {
- // call checkRevocationStatus once to save the revocation status for mCertificates2
+ // call checkRevocationStatus once to save the revocation status
copyFromAssetToFile(
- REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRevocationListFile);
+ REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mRevocationListUrl, mRevocationStatusFile, false);
- mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates2);
- // call checkRevocationStatus again with mNonExistentRevocationListUrl, this time for
- // mCertificates1
+ mContext, mRevocationListUrl, mStoredRevocationListFile, false);
+ mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
+ // set the last modified date of the stored list to an expired date
+ LocalDateTime now = LocalDateTime.now();
+ LocalDateTime expiredListDate =
+ now.minusDays(
+ CertificateRevocationStatusManager.MAX_OFFLINE_REVOCATION_LIST_AGE_DAYS
+ + 1);
+ mStoredRevocationListFile.setLastModified(
+ expiredListDate.toEpochSecond(OffsetDateTime.now().getOffset()) * 1000);
+ // call checkRevocationStatus again with mNonExistentRevocationListUrl
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mNonExistentRevocationListUrl, mRevocationStatusFile, false);
+ mContext, mNonExistentRevocationListUrl, mStoredRevocationListFile, false);
assertThrows(
CertPathValidatorException.class,
@@ -178,143 +187,112 @@ public class CertificateRevocationStatusManagerTest {
}
@Test
- public void checkRevocationStatus_cannotReachRemoteList_someCertsStatusTooOld_exception()
+ public void checkRevocationStatus_cannotReachRemoteList_storedListIsFresh_noException()
throws Exception {
+ // call checkRevocationStatus once to save the revocation status
+ copyFromAssetToFile(
+ REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mNonExistentRevocationListUrl, mRevocationStatusFile, false);
+ mContext, mRevocationListUrl, mStoredRevocationListFile, false);
+ mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
+ // set the last modified date of the stored list to a barely not expired date
LocalDateTime now = LocalDateTime.now();
- LocalDateTime expiredStatusDate =
- now.minusDays(CertificateRevocationStatusManager.MAX_DAYS_SINCE_LAST_CHECK + 1);
- Map<String, LocalDateTime> lastRevocationCheckData = new HashMap<>();
- lastRevocationCheckData.put(getSerialNumber(mCertificates1.get(0)), expiredStatusDate);
- for (int i = 1; i < mCertificates1.size(); i++) {
- lastRevocationCheckData.put(getSerialNumber(mCertificates1.get(i)), now);
- }
- mCertificateRevocationStatusManager.storeLastRevocationCheckData(lastRevocationCheckData);
-
- assertThrows(
- CertPathValidatorException.class,
- () -> mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1));
- }
-
- @Test
- public void checkRevocationStatus_cannotReachRemoteList_allCertResultsFresh_noException()
- throws Exception {
+ LocalDateTime barelyFreshDate =
+ now.minusDays(
+ CertificateRevocationStatusManager.MAX_OFFLINE_REVOCATION_LIST_AGE_DAYS
+ - 1);
+ mStoredRevocationListFile.setLastModified(
+ barelyFreshDate.toEpochSecond(OffsetDateTime.now().getOffset()) * 1000);
+ // call checkRevocationStatus again with mNonExistentRevocationListUrl
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mNonExistentRevocationListUrl, mRevocationStatusFile, false);
- LocalDateTime bearlyNotExpiredStatusDate =
- LocalDateTime.now()
- .minusDays(
- CertificateRevocationStatusManager.MAX_DAYS_SINCE_LAST_CHECK - 1);
- Map<String, LocalDateTime> lastRevocationCheckData = new HashMap<>();
- for (X509Certificate certificate : mCertificates1) {
- lastRevocationCheckData.put(getSerialNumber(certificate), bearlyNotExpiredStatusDate);
- }
- mCertificateRevocationStatusManager.storeLastRevocationCheckData(lastRevocationCheckData);
+ mContext, mNonExistentRevocationListUrl, mStoredRevocationListFile, false);
mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
}
@Test
- public void updateLastRevocationCheckData_correctlySavesStatus() throws Exception {
+ public void silentlyStoreRevocationList_storesCorrectly() throws Exception {
+ copyFromAssetToFile(
+ REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mNonExistentRevocationListUrl, mRevocationStatusFile, false);
- Map<String, Boolean> areCertificatesRevoked = new HashMap<>();
- for (X509Certificate certificate : mCertificates1) {
- areCertificatesRevoked.put(getSerialNumber(certificate), false);
- }
+ mContext, mRevocationListUrl, mStoredRevocationListFile, false);
+ byte[] revocationList =
+ mCertificateRevocationStatusManager.fetchRemoteRevocationListBytes();
- mCertificateRevocationStatusManager.updateLastRevocationCheckData(areCertificatesRevoked);
+ mCertificateRevocationStatusManager.silentlyStoreRevocationList(revocationList);
- // no exception
- mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
- // revoke one certificate and try again
- areCertificatesRevoked.put(getSerialNumber(mCertificates1.getLast()), true);
- mCertificateRevocationStatusManager.updateLastRevocationCheckData(areCertificatesRevoked);
- assertThrows(
- CertPathValidatorException.class,
- () -> mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1));
+ byte[] bytesFromRemoteList;
+ byte[] bytesFromStoredList;
+ try (FileInputStream remoteListInputStream =
+ new FileInputStream(mRemoteRevocationListFile)) {
+ bytesFromRemoteList = remoteListInputStream.readAllBytes();
+ }
+ try (FileInputStream storedListInputStream =
+ new FileInputStream(mStoredRevocationListFile)) {
+ bytesFromStoredList = storedListInputStream.readAllBytes();
+ }
+ assertThat(bytesFromStoredList).isEqualTo(bytesFromRemoteList);
}
@Test
- public void updateLastRevocationCheckDataForAllPreviouslySeenCertificates_updatesCorrectly()
+ public void checkRevocationStatus_recentlyChecked_doesNotFetchRemoteCrl()
throws Exception {
copyFromAssetToFile(
- REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRevocationListFile);
+ REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mRevocationListUrl, mRevocationStatusFile, false);
- // populate the revocation status file
+ mContext, mRevocationListUrl, mStoredRevocationListFile, false);
+ mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
+ // indirectly verifies the remote list is not fetched by simulating a remote revocation
+ copyFromAssetToFile(
+ REVOCATION_LIST_WITH_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
+
+ // no exception
mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
- // Sleep for 2 second so that the current time changes
- SystemClock.sleep(2000);
- LocalDateTime timestampBeforeUpdate = LocalDateTime.now();
- JSONObject revocationList = mCertificateRevocationStatusManager.fetchRemoteRevocationList();
- List<String> otherCertificatesToCheck = new ArrayList<>();
- String serialNumber1 = "1234567"; // not revoked
- String serialNumber2 = "8350192447815228107"; // revoked
- String serialNumber3 = "987654"; // not revoked
- otherCertificatesToCheck.add(serialNumber1);
- otherCertificatesToCheck.add(serialNumber2);
- otherCertificatesToCheck.add(serialNumber3);
-
- mCertificateRevocationStatusManager
- .updateLastRevocationCheckDataForAllPreviouslySeenCertificates(
- revocationList, otherCertificatesToCheck);
-
- Map<String, LocalDateTime> lastRevocationCheckData =
- mCertificateRevocationStatusManager.getLastRevocationCheckData();
- assertThat(lastRevocationCheckData.get(serialNumber1)).isAtLeast(timestampBeforeUpdate);
- assertThat(lastRevocationCheckData).doesNotContainKey(serialNumber2); // revoked
- assertThat(lastRevocationCheckData.get(serialNumber3)).isAtLeast(timestampBeforeUpdate);
- // validate that the existing certificates on the file got updated too
- for (X509Certificate certificate : mCertificates1) {
- assertThat(lastRevocationCheckData.get(getSerialNumber(certificate)))
- .isAtLeast(timestampBeforeUpdate);
- }
}
@Test
- public void checkRevocationStatus_allCertificatesRecentlyChecked_doesNotFetchRemoteCrl()
+ public void checkRevocationStatus_recentlyCheckedAndRevoked_exception()
throws Exception {
copyFromAssetToFile(
- REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRevocationListFile);
+ REVOCATION_LIST_WITH_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mRevocationListUrl, mRevocationStatusFile, false);
- mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
- // indirectly verifies the remote list is not fetched by simulating a remote revocation
- copyFromAssetToFile(
- REVOCATION_LIST_WITH_CERTIFICATES_USED_IN_THIS_TEST, mRevocationListFile);
+ mContext, mRevocationListUrl, mStoredRevocationListFile, false);
+ assertThrows(
+ CertPathValidatorException.class,
+ () -> mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1));
- // no exception
- mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
+ assertThrows(
+ CertPathValidatorException.class,
+ () -> mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1));
}
@Test
- public void checkRevocationStatus_allCertificatesBarelyRecentlyChecked_doesNotFetchRemoteCrl()
+ public void checkRevocationStatus_barelyRecentlyChecked_doesNotFetchRemoteCrl()
throws Exception {
copyFromAssetToFile(
- REVOCATION_LIST_WITH_CERTIFICATES_USED_IN_THIS_TEST, mRevocationListFile);
+ REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mRevocationListUrl, mRevocationStatusFile, false);
- Map<String, LocalDateTime> lastCheckedDates = new HashMap<>();
- LocalDateTime barelyRecently =
- LocalDateTime.now()
- .minusHours(
- CertificateRevocationStatusManager.NUM_HOURS_BEFORE_NEXT_CHECK - 1);
- for (X509Certificate certificate : mCertificates1) {
- lastCheckedDates.put(getSerialNumber(certificate), barelyRecently);
- }
- mCertificateRevocationStatusManager.storeLastRevocationCheckData(lastCheckedDates);
+ mContext, mRevocationListUrl, mStoredRevocationListFile, false);
+ mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
+ // set the last modified date of the stored list to a barely recent date
+ LocalDateTime now = LocalDateTime.now();
+ LocalDateTime barelyRecentDate =
+ now.minusHours(CertificateRevocationStatusManager.NUM_HOURS_BEFORE_NEXT_FETCH - 1);
+ mStoredRevocationListFile.setLastModified(
+ barelyRecentDate.toEpochSecond(OffsetDateTime.now().getOffset()) * 1000);
+ // indirectly verifies the remote list is not fetched by simulating a remote revocation
+ copyFromAssetToFile(
+ REVOCATION_LIST_WITH_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
// Indirectly verify the remote CRL is not checked by checking there is no exception despite
- // a certificate being revoked. This test differs from the next only in the lastCheckedDate,
- // one before the NUM_HOURS_BEFORE_NEXT_CHECK cutoff and one after
+ // a certificate being revoked. This test differs from the next only in the stored list last
+ // modified date, one before the NUM_HOURS_BEFORE_NEXT_FETCH cutoff and one after
mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
}
@@ -322,21 +300,20 @@ public class CertificateRevocationStatusManagerTest {
public void checkRevocationStatus_certificatesRevokedAfterCheck_throwsException()
throws Exception {
copyFromAssetToFile(
- REVOCATION_LIST_WITH_CERTIFICATES_USED_IN_THIS_TEST, mRevocationListFile);
+ REVOCATION_LIST_WITHOUT_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
mCertificateRevocationStatusManager =
new CertificateRevocationStatusManager(
- mContext, mRevocationListUrl, mRevocationStatusFile, false);
- Map<String, LocalDateTime> lastCheckedDates = new HashMap<>();
- // To save network use, we do not check the remote CRL if all the certificates are recently
- // checked, so we set the lastCheckDate to some time not recent.
- LocalDateTime notRecently =
- LocalDateTime.now()
- .minusHours(
- CertificateRevocationStatusManager.NUM_HOURS_BEFORE_NEXT_CHECK + 1);
- for (X509Certificate certificate : mCertificates1) {
- lastCheckedDates.put(getSerialNumber(certificate), notRecently);
- }
- mCertificateRevocationStatusManager.storeLastRevocationCheckData(lastCheckedDates);
+ mContext, mRevocationListUrl, mStoredRevocationListFile, false);
+ mCertificateRevocationStatusManager.checkRevocationStatus(mCertificates1);
+ // set the last modified date of the stored list to a barely not recent date
+ LocalDateTime now = LocalDateTime.now();
+ LocalDateTime barelyNotRecentDate =
+ now.minusHours(CertificateRevocationStatusManager.NUM_HOURS_BEFORE_NEXT_FETCH + 1);
+ mStoredRevocationListFile.setLastModified(
+ barelyNotRecentDate.toEpochSecond(OffsetDateTime.now().getOffset()) * 1000);
+ // simulate a remote revocation
+ copyFromAssetToFile(
+ REVOCATION_LIST_WITH_CERTIFICATES_USED_IN_THIS_TEST, mRemoteRevocationListFile);
assertThrows(
CertPathValidatorException.class,
@@ -362,8 +339,4 @@ public class CertificateRevocationStatusManagerTest {
fileOutputStream.write(data);
}
}
-
- private String getSerialNumber(X509Certificate certificate) {
- return certificate.getSerialNumber().toString(16);
- }
}
diff --git a/tests/PackageWatchdog/Android.bp b/tests/PackageWatchdog/Android.bp
index 44e545bac0ce..16c6e3baf051 100644
--- a/tests/PackageWatchdog/Android.bp
+++ b/tests/PackageWatchdog/Android.bp
@@ -28,6 +28,7 @@ android_test {
static_libs: [
"PlatformProperties",
"androidx.test.rules",
+ "androidx.test.runner",
"flag-junit",
"frameworks-base-testutils",
"junit",
diff --git a/tests/PackageWatchdog/AndroidManifest.xml b/tests/PackageWatchdog/AndroidManifest.xml
index 540edb41f66f..334d50fe6d10 100644
--- a/tests/PackageWatchdog/AndroidManifest.xml
+++ b/tests/PackageWatchdog/AndroidManifest.xml
@@ -15,7 +15,7 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.tests.packagewatchdog" >
+ package="com.android.server" >
<application android:debuggable="true">
<uses-library android:name="android.test.runner" />
@@ -23,6 +23,6 @@
<instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.tests.packagewatchdog"
- android:label="PackageWatchdog Test"/>
+ android:targetPackage="com.android.server"
+ android:label="PackageWatchdog Test"/>
</manifest>
diff --git a/tests/PackageWatchdog/AndroidTest.xml b/tests/PackageWatchdog/AndroidTest.xml
new file mode 100644
index 000000000000..45a88cdf5abe
--- /dev/null
+++ b/tests/PackageWatchdog/AndroidTest.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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.
+ -->
+<configuration description="Runs PackageWatchdog Tests.">
+ <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+ <option name="cleanup-apks" value="true" />
+ <option name="test-file-name" value="PackageWatchdogTest.apk" />
+ </target_preparer>
+
+ <option name="test-suite-tag" value="apct" />
+ <option name="test-tag" value="PackageWatchdogTest" />
+
+ <!-- Only run this tests in MTS if the Crashrecovery Mainline module is installed. -->
+ <object type="module_controller" class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
+ <option name="mainline-module-package-name" value="com.google.android.crashrecovery" />
+ </object>
+
+ <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+ <option name="package" value="com.android.server" />
+ <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
+ <option name="hidden-api-checks" value="false"/>
+ </test>
+</configuration>
diff --git a/tests/vcn/Android.bp b/tests/vcn/Android.bp
index 661ed07a5669..5ad1d1dce324 100644
--- a/tests/vcn/Android.bp
+++ b/tests/vcn/Android.bp
@@ -17,8 +17,9 @@ android_test {
// For access hidden connectivity methods in tests
defaults: ["framework-connectivity-test-defaults"],
- // TODO: b/374174952 Use 36 after Android B finalization
- min_sdk_version: "35",
+ // Tethering module is released in R so this test needs to be installable
+ // on R
+ min_sdk_version: "30",
srcs: [
"java/**/*.java",
diff --git a/tests/vcn/AndroidManifest.xml b/tests/vcn/AndroidManifest.xml
index 08effbd1f7cf..6e8b4ac48816 100644
--- a/tests/vcn/AndroidManifest.xml
+++ b/tests/vcn/AndroidManifest.xml
@@ -17,7 +17,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.frameworks.tests.vcn">
<!-- TODO: b/374174952 Use 36 after Android B finalization -->
- <uses-sdk android:minSdkVersion="35" android:targetSdkVersion="35" />
+ <uses-sdk android:minSdkVersion="30" android:targetSdkVersion="35" />
<application>
<uses-library android:name="android.test.runner" />
diff --git a/tools/aapt2/link/FlaggedResources_test.cpp b/tools/aapt2/link/FlaggedResources_test.cpp
index adf711ecfcbb..7bea96c26990 100644
--- a/tools/aapt2/link/FlaggedResources_test.cpp
+++ b/tools/aapt2/link/FlaggedResources_test.cpp
@@ -169,4 +169,18 @@ TEST_F(FlaggedResourcesTest, EnabledXmlELementAttributeRemoved) {
ASSERT_TRUE(output.contains("test.package.readWriteFlag"));
}
+TEST_F(FlaggedResourcesTest, ReadWriteFlagInPathFails) {
+ test::TestDiagnosticsImpl diag;
+ const std::string compiled_files_dir = GetTestPath("compiled");
+ ASSERT_FALSE(CompileFile(GetTestPath("res/values/flag(!test.package.rwFlag)/bools.xml"),
+ R"(<resources>
+ <bool name="bool1">false</bool>
+ </resources>)",
+ compiled_files_dir, &diag,
+ {"--feature-flags", "test.package.rwFlag=false"}));
+
+ ASSERT_TRUE(diag.GetLog().contains(
+ "Only read only flags may be used with resources: test.package.rwFlag"));
+}
+
} // namespace aapt